tests.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. /**
  2. * @file tests/pdevs/tests.cpp
  3. * @author The PARADEVS Development Team
  4. * See the AUTHORS or Authors.txt file
  5. */
  6. /*
  7. * PARADEVS - the multimodeling and simulation environment
  8. * This file is a part of the PARADEVS environment
  9. *
  10. * Copyright (C) 2013 ULCO http://www.univ-litoral.fr
  11. *
  12. * This program is free software: you can redistribute it and/or modify
  13. * it under the terms of the GNU General Public License as published by
  14. * the Free Software Foundation, either version 3 of the License, or
  15. * (at your option) any later version.
  16. *
  17. * This program is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU General Public License
  23. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  24. */
  25. #include <tests/pdevs/graph_manager.hpp>
  26. #include <tests/pdevs/models.hpp>
  27. #include <paradevs/common/RootCoordinator.hpp>
  28. #define CATCH_CONFIG_MAIN
  29. #include <tests/catch.hpp>
  30. using namespace paradevs::tests::pdevs;
  31. using namespace paradevs::common;
  32. TEST_CASE("pdevs/only_one", "run")
  33. {
  34. paradevs::common::RootCoordinator <
  35. DoubleTime, paradevs::pdevs::Coordinator <
  36. DoubleTime,
  37. paradevs::common::scheduler::HeapScheduler <
  38. DoubleTime, SchedulerHandle >,
  39. SchedulerHandle,
  40. OnlyOneGraphManager < SchedulerHandle > >
  41. > rc(0, 10, "root", paradevs::common::NoParameters(),
  42. paradevs::common::NoParameters());
  43. paradevs::common::Trace < DoubleTime >::trace().clear();
  44. rc.run();
  45. REQUIRE(paradevs::common::Trace <
  46. DoubleTime >::trace().elements().
  47. filter_model_name("a").
  48. filter_type(paradevs::common::START).size() == 1);
  49. REQUIRE(paradevs::common::Trace <
  50. DoubleTime >::trace().elements().
  51. filter_model_name("a").
  52. filter_type(paradevs::common::DELTA_EXT).size() == 0);
  53. REQUIRE(paradevs::common::Trace <
  54. DoubleTime >::trace().elements().
  55. filter_model_name("a").
  56. filter_type(paradevs::common::DELTA_CONF).size() == 0);
  57. for (unsigned int t = 0; t <= 10; ++t) {
  58. REQUIRE(paradevs::common::Trace <
  59. DoubleTime >::trace().elements().
  60. filter_model_name("a").filter_time(t).
  61. filter_type(paradevs::common::DELTA_INT).size() == 1);
  62. REQUIRE(paradevs::common::Trace <
  63. DoubleTime >::trace().elements().
  64. filter_model_name("a").filter_time(t).
  65. filter_type(paradevs::common::TA).size() == 1);
  66. REQUIRE(paradevs::common::Trace <
  67. DoubleTime >::trace().elements().
  68. filter_model_name("a").filter_time(t).
  69. filter_type(paradevs::common::LAMBDA).size() == 1);
  70. }
  71. }
  72. TEST_CASE("pdevs/flat", "run")
  73. {
  74. paradevs::common::RootCoordinator <
  75. DoubleTime, paradevs::pdevs::Coordinator <
  76. DoubleTime,
  77. paradevs::common::scheduler::HeapScheduler <
  78. DoubleTime, SchedulerHandle >,
  79. SchedulerHandle,
  80. FlatGraphManager < SchedulerHandle> >
  81. > rc(0, 10, "root", paradevs::common::NoParameters(),
  82. paradevs::common::NoParameters());
  83. paradevs::common::Trace < DoubleTime >::trace().clear();
  84. rc.run();
  85. REQUIRE(paradevs::common::Trace <
  86. DoubleTime >::trace().elements().
  87. filter_model_name("a1").
  88. filter_type(paradevs::common::START).size() == 1);
  89. REQUIRE(paradevs::common::Trace <
  90. DoubleTime >::trace().elements().
  91. filter_model_name("b1").
  92. filter_type(paradevs::common::START).size() == 1);
  93. REQUIRE(paradevs::common::Trace <
  94. DoubleTime >::trace().elements().
  95. filter_model_name("a2").
  96. filter_type(paradevs::common::START).size() == 1);
  97. REQUIRE(paradevs::common::Trace <
  98. DoubleTime >::trace().elements().
  99. filter_model_name("b2").
  100. filter_type(paradevs::common::START).size() == 1);
  101. REQUIRE(paradevs::common::Trace <
  102. DoubleTime >::trace().elements().
  103. filter_model_name("a1").
  104. filter_type(paradevs::common::DELTA_EXT).size() == 0);
  105. for (unsigned int t = 0; t <= 10; ++t) {
  106. REQUIRE(paradevs::common::Trace <
  107. DoubleTime >::trace().elements().
  108. filter_model_name("a1").filter_time(t).
  109. filter_type(paradevs::common::LAMBDA).size() == 1);
  110. REQUIRE(paradevs::common::Trace <
  111. DoubleTime >::trace().elements().
  112. filter_model_name("a1").filter_time(t).
  113. filter_type(paradevs::common::DELTA_INT).size() == 1);
  114. REQUIRE(paradevs::common::Trace <
  115. DoubleTime >::trace().elements().
  116. filter_model_name("a1").filter_time(t).
  117. filter_type(paradevs::common::TA).size() == 1);
  118. }
  119. for (unsigned int t = 0; t <= 10; ++t) {
  120. REQUIRE(paradevs::common::Trace <
  121. DoubleTime >::trace().elements().
  122. filter_model_name("b1").filter_time(t).
  123. filter_type(paradevs::common::LAMBDA).size() == 1);
  124. REQUIRE(paradevs::common::Trace <
  125. DoubleTime >::trace().elements().
  126. filter_model_name("b1").filter_time(t).
  127. filter_type(paradevs::common::DELTA_INT).size() == 1);
  128. REQUIRE(paradevs::common::Trace <
  129. DoubleTime >::trace().elements().
  130. filter_model_name("b1").filter_time(t).
  131. filter_type(paradevs::common::TA).size() == 2);
  132. REQUIRE(paradevs::common::Trace <
  133. DoubleTime >::trace().elements().
  134. filter_model_name("b1").filter_time(t).
  135. filter_type(paradevs::common::DELTA_EXT).size() == 1);
  136. }
  137. for (unsigned int t = 0; t <= 10; ++t) {
  138. REQUIRE(paradevs::common::Trace <
  139. DoubleTime >::trace().elements().
  140. filter_model_name("a2").filter_time(t).
  141. filter_type(paradevs::common::LAMBDA).size() == 2);
  142. REQUIRE(paradevs::common::Trace <
  143. DoubleTime >::trace().elements().
  144. filter_model_name("a2").filter_time(t).
  145. filter_type(paradevs::common::DELTA_INT).size() == 2);
  146. REQUIRE(paradevs::common::Trace <
  147. DoubleTime >::trace().elements().
  148. filter_model_name("a2").filter_time(t).
  149. filter_type(paradevs::common::TA).size() == 3);
  150. REQUIRE(paradevs::common::Trace <
  151. DoubleTime >::trace().elements().
  152. filter_model_name("a2").filter_time(t).
  153. filter_type(paradevs::common::DELTA_EXT).size() == 1);
  154. REQUIRE(paradevs::common::Trace <
  155. DoubleTime >::trace().elements().
  156. filter_model_name("a2").filter_time(t).
  157. filter_type(paradevs::common::DELTA_CONF).size() == 0);
  158. }
  159. for (unsigned int t = 0; t <= 10; ++t) {
  160. REQUIRE(paradevs::common::Trace <
  161. DoubleTime >::trace().elements().
  162. filter_model_name("b2").filter_time(t).
  163. filter_type(paradevs::common::LAMBDA).size() == 2);
  164. REQUIRE(paradevs::common::Trace <
  165. DoubleTime >::trace().elements().
  166. filter_model_name("b2").filter_time(t).
  167. filter_type(paradevs::common::DELTA_INT).size() == 2);
  168. REQUIRE(paradevs::common::Trace <
  169. DoubleTime >::trace().elements().
  170. filter_model_name("b2").filter_time(t).
  171. filter_type(paradevs::common::TA).size() == 4);
  172. REQUIRE(paradevs::common::Trace <
  173. DoubleTime >::trace().elements().
  174. filter_model_name("b2").filter_time(t).
  175. filter_type(paradevs::common::DELTA_EXT).size() == 2);
  176. }
  177. }
  178. TEST_CASE("pdevs/hierachical", "run")
  179. {
  180. paradevs::common::RootCoordinator <
  181. DoubleTime, paradevs::pdevs::Coordinator <
  182. DoubleTime,
  183. paradevs::common::scheduler::HeapScheduler <
  184. DoubleTime, SchedulerHandle >,
  185. SchedulerHandle,
  186. RootGraphManager >
  187. > rc(0, 10, "root", paradevs::common::NoParameters(),
  188. paradevs::common::NoParameters());
  189. paradevs::common::Trace < DoubleTime >::trace().clear();
  190. rc.run();
  191. REQUIRE(paradevs::common::Trace <
  192. DoubleTime >::trace().elements().
  193. filter_model_name("a1").
  194. filter_type(paradevs::common::START).size() == 1);
  195. REQUIRE(paradevs::common::Trace <
  196. DoubleTime >::trace().elements().
  197. filter_model_name("b1").
  198. filter_type(paradevs::common::START).size() == 1);
  199. REQUIRE(paradevs::common::Trace <
  200. DoubleTime >::trace().elements().
  201. filter_model_name("a2").
  202. filter_type(paradevs::common::START).size() == 1);
  203. REQUIRE(paradevs::common::Trace <
  204. DoubleTime >::trace().elements().
  205. filter_model_name("b2").
  206. filter_type(paradevs::common::START).size() == 1);
  207. REQUIRE(paradevs::common::Trace <
  208. DoubleTime >::trace().elements().
  209. filter_model_name("a1").
  210. filter_type(paradevs::common::DELTA_EXT).size() == 0);
  211. for (unsigned int t = 0; t <= 10; ++t) {
  212. REQUIRE(paradevs::common::Trace <
  213. DoubleTime >::trace().elements().
  214. filter_model_name("a1").filter_time(t).
  215. filter_type(paradevs::common::LAMBDA).size() == 1);
  216. REQUIRE(paradevs::common::Trace <
  217. DoubleTime >::trace().elements().
  218. filter_model_name("a1").filter_time(t).
  219. filter_type(paradevs::common::DELTA_INT).size() == 1);
  220. REQUIRE(paradevs::common::Trace <
  221. DoubleTime >::trace().elements().
  222. filter_model_name("a1").filter_time(t).
  223. filter_type(paradevs::common::TA).size() == 1);
  224. }
  225. for (unsigned int t = 0; t <= 10; ++t) {
  226. REQUIRE(paradevs::common::Trace <
  227. DoubleTime >::trace().elements().
  228. filter_model_name("b1").filter_time(t).
  229. filter_type(paradevs::common::LAMBDA).size() == 1);
  230. REQUIRE(paradevs::common::Trace <
  231. DoubleTime >::trace().elements().
  232. filter_model_name("b1").filter_time(t).
  233. filter_type(paradevs::common::DELTA_INT).size() == 1);
  234. REQUIRE(paradevs::common::Trace <
  235. DoubleTime >::trace().elements().
  236. filter_model_name("b1").filter_time(t).
  237. filter_type(paradevs::common::TA).size() == 2);
  238. REQUIRE(paradevs::common::Trace <
  239. DoubleTime >::trace().elements().
  240. filter_model_name("b1").filter_time(t).
  241. filter_type(paradevs::common::DELTA_EXT).size() == 1);
  242. }
  243. for (unsigned int t = 0; t <= 10; ++t) {
  244. REQUIRE(paradevs::common::Trace <
  245. DoubleTime >::trace().elements().
  246. filter_model_name("a2").filter_time(t).
  247. filter_type(paradevs::common::LAMBDA).size() == 2);
  248. REQUIRE(paradevs::common::Trace <
  249. DoubleTime >::trace().elements().
  250. filter_model_name("a2").filter_time(t).
  251. filter_type(paradevs::common::DELTA_INT).size() == 2);
  252. REQUIRE(paradevs::common::Trace <
  253. DoubleTime >::trace().elements().
  254. filter_model_name("a2").filter_time(t).
  255. filter_type(paradevs::common::TA).size() == 3);
  256. REQUIRE(paradevs::common::Trace <
  257. DoubleTime >::trace().elements().
  258. filter_model_name("a2").filter_time(t).
  259. filter_type(paradevs::common::DELTA_EXT).size() == 1);
  260. REQUIRE(paradevs::common::Trace <
  261. DoubleTime >::trace().elements().
  262. filter_model_name("a2").filter_time(t).
  263. filter_type(paradevs::common::DELTA_CONF).size() == 0);
  264. }
  265. for (unsigned int t = 0; t <= 10; ++t) {
  266. REQUIRE(paradevs::common::Trace <
  267. DoubleTime >::trace().elements().
  268. filter_model_name("b2").filter_time(t).
  269. filter_type(paradevs::common::LAMBDA).size() == 2);
  270. REQUIRE(paradevs::common::Trace <
  271. DoubleTime >::trace().elements().
  272. filter_model_name("b2").filter_time(t).
  273. filter_type(paradevs::common::DELTA_INT).size() == 2);
  274. REQUIRE(paradevs::common::Trace <
  275. DoubleTime >::trace().elements().
  276. filter_model_name("b2").filter_time(t).
  277. filter_type(paradevs::common::TA).size() == 4);
  278. REQUIRE(paradevs::common::Trace <
  279. DoubleTime >::trace().elements().
  280. filter_model_name("b2").filter_time(t).
  281. filter_type(paradevs::common::DELTA_EXT).size() == 2);
  282. }
  283. }