SyncJoin.cc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /**
  2. * Copyright (c) 2015 committers of YAKINDU and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * committers of YAKINDU - initial API and implementation
  10. */
  11. #include <string>
  12. #include "gtest/gtest.h"
  13. #include "SyncJoin.h"
  14. SyncJoin handle;
  15. TEST(StatemachineTest, syncJoin_C2_Waits) {
  16. syncJoin_init(&handle);
  17. syncJoin_enter(&handle);
  18. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B));
  19. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  20. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D1));
  21. syncJoinIface_raise_e(&handle);
  22. syncJoin_runCycle(&handle);
  23. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  24. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D1));
  25. syncJoinIface_raise_jc(&handle);
  26. syncJoin_runCycle(&handle);
  27. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  28. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D1));
  29. syncJoinIface_raise_jd(&handle);
  30. syncJoin_runCycle(&handle);
  31. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  32. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D1));
  33. syncJoinIface_raise_jc(&handle);
  34. syncJoinIface_raise_jd(&handle);
  35. syncJoin_runCycle(&handle);
  36. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  37. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D1));
  38. syncJoinIface_raise_f(&handle);
  39. syncJoin_runCycle(&handle);
  40. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  41. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  42. syncJoinIface_raise_jc(&handle);
  43. syncJoin_runCycle(&handle);
  44. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  45. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  46. syncJoinIface_raise_jd(&handle);
  47. syncJoin_runCycle(&handle);
  48. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  49. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  50. syncJoinIface_raise_jc(&handle);
  51. syncJoinIface_raise_jd(&handle);
  52. syncJoin_runCycle(&handle);
  53. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_A));
  54. }
  55. TEST(StatemachineTest, syncJoin_D2_Waits) {
  56. syncJoin_init(&handle);
  57. syncJoin_enter(&handle);
  58. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B));
  59. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  60. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D1));
  61. syncJoinIface_raise_f(&handle);
  62. syncJoin_runCycle(&handle);
  63. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  64. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  65. syncJoinIface_raise_jc(&handle);
  66. syncJoin_runCycle(&handle);
  67. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  68. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  69. syncJoinIface_raise_jd(&handle);
  70. syncJoin_runCycle(&handle);
  71. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  72. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  73. syncJoinIface_raise_jc(&handle);
  74. syncJoinIface_raise_jd(&handle);
  75. syncJoin_runCycle(&handle);
  76. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  77. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  78. syncJoinIface_raise_e(&handle);
  79. syncJoin_runCycle(&handle);
  80. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  81. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  82. }
  83. TEST(StatemachineTest, doubleEntryActionBug) {
  84. syncJoin_init(&handle);
  85. syncJoin_enter(&handle);
  86. syncJoinIface_raise_e(&handle);
  87. syncJoinIface_raise_f(&handle);
  88. syncJoin_runCycle(&handle);
  89. syncJoinIface_raise_jc(&handle);
  90. syncJoinIface_raise_jd(&handle);
  91. syncJoin_runCycle(&handle);
  92. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_A));
  93. EXPECT_TRUE(syncJoinIface_get_x(&handle) == 1l);
  94. }