SyncJoinTest.cc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /**
  2. * Copyright (c) 2014 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* statechart = new SyncJoin();
  16. statechart->init();
  17. statechart->enter();
  18. EXPECT_TRUE(statechart->isActive(SyncJoin::B));
  19. EXPECT_TRUE(statechart->isActive(SyncJoin::C1));
  20. EXPECT_TRUE(statechart->isActive(SyncJoin::D1));
  21. statechart->raise_e();
  22. statechart->runCycle();
  23. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  24. EXPECT_TRUE(statechart->isActive(SyncJoin::D1));
  25. statechart->raise_jc();
  26. statechart->runCycle();
  27. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  28. EXPECT_TRUE(statechart->isActive(SyncJoin::D1));
  29. statechart->raise_jd();
  30. statechart->runCycle();
  31. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  32. EXPECT_TRUE(statechart->isActive(SyncJoin::D1));
  33. statechart->raise_jc();
  34. statechart->raise_jd();
  35. statechart->runCycle();
  36. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  37. EXPECT_TRUE(statechart->isActive(SyncJoin::D1));
  38. statechart->raise_f();
  39. statechart->runCycle();
  40. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  41. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  42. statechart->raise_jc();
  43. statechart->runCycle();
  44. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  45. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  46. statechart->raise_jd();
  47. statechart->runCycle();
  48. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  49. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  50. statechart->raise_jc();
  51. statechart->raise_jd();
  52. statechart->runCycle();
  53. EXPECT_TRUE(statechart->isActive(SyncJoin::A));
  54. delete statechart;
  55. }
  56. TEST(StatemachineTest, syncJoin_D2_Waits) {
  57. SyncJoin* statechart = new SyncJoin();
  58. statechart->init();
  59. statechart->enter();
  60. EXPECT_TRUE(statechart->isActive(SyncJoin::B));
  61. EXPECT_TRUE(statechart->isActive(SyncJoin::C1));
  62. EXPECT_TRUE(statechart->isActive(SyncJoin::D1));
  63. statechart->raise_f();
  64. statechart->runCycle();
  65. EXPECT_TRUE(statechart->isActive(SyncJoin::C1));
  66. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  67. statechart->raise_jc();
  68. statechart->runCycle();
  69. EXPECT_TRUE(statechart->isActive(SyncJoin::C1));
  70. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  71. statechart->raise_jd();
  72. statechart->runCycle();
  73. EXPECT_TRUE(statechart->isActive(SyncJoin::C1));
  74. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  75. statechart->raise_jc();
  76. statechart->raise_jd();
  77. statechart->runCycle();
  78. EXPECT_TRUE(statechart->isActive(SyncJoin::C1));
  79. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  80. statechart->raise_e();
  81. statechart->runCycle();
  82. EXPECT_TRUE(statechart->isActive(SyncJoin::C2));
  83. EXPECT_TRUE(statechart->isActive(SyncJoin::D2));
  84. delete statechart;
  85. }
  86. TEST(StatemachineTest, doubleEntryActionBug) {
  87. SyncJoin* statechart = new SyncJoin();
  88. statechart->init();
  89. statechart->enter();
  90. statechart->raise_e();
  91. statechart->raise_f();
  92. statechart->runCycle();
  93. statechart->raise_jc();
  94. statechart->raise_jd();
  95. statechart->runCycle();
  96. EXPECT_TRUE(statechart->isActive(SyncJoin::A));
  97. EXPECT_TRUE(statechart->getSCInterface()->get_x()== 1);
  98. delete statechart;
  99. }