SyncJoin.cc 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * Copyright (c) 2013 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. TEST(StatemachineTest, syncJoin_C2_Waits) {
  15. SyncJoin handle;
  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 handle;
  57. syncJoin_init(&handle);
  58. syncJoin_enter(&handle);
  59. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B));
  60. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  61. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D1));
  62. syncJoinIface_raise_f(&handle);
  63. syncJoin_runCycle(&handle);
  64. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  65. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  66. syncJoinIface_raise_jc(&handle);
  67. syncJoin_runCycle(&handle);
  68. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  69. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  70. syncJoinIface_raise_jd(&handle);
  71. syncJoin_runCycle(&handle);
  72. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  73. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  74. syncJoinIface_raise_jc(&handle);
  75. syncJoinIface_raise_jd(&handle);
  76. syncJoin_runCycle(&handle);
  77. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C1));
  78. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  79. syncJoinIface_raise_e(&handle);
  80. syncJoin_runCycle(&handle);
  81. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r1_C2));
  82. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_B_r2_D2));
  83. }
  84. TEST(StatemachineTest, doubleEntryActionBug) {
  85. SyncJoin handle;
  86. syncJoin_init(&handle);
  87. syncJoin_enter(&handle);
  88. syncJoinIface_raise_e(&handle);
  89. syncJoinIface_raise_f(&handle);
  90. syncJoin_runCycle(&handle);
  91. syncJoinIface_raise_jc(&handle);
  92. syncJoinIface_raise_jd(&handle);
  93. syncJoin_runCycle(&handle);
  94. EXPECT_TRUE(syncJoin_isActive(&handle, SyncJoin_main_region_A));
  95. EXPECT_TRUE(syncJoinIface_get_x(&handle) == 1);
  96. }