test_constructors_models.py 89 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934
  1. import unittest
  2. import sys
  3. import os
  4. from utils import execute, kill, run_file, run_barebone
  5. def flatten(lst):
  6. new_lst = []
  7. for f in lst:
  8. if isinstance(f, (list, tuple)):
  9. new_lst.extend(flatten(f))
  10. else:
  11. new_lst.append(f)
  12. return new_lst
  13. class TestConstructorsModels(unittest.TestCase):
  14. def test_constructors_instantiate_bottom(self):
  15. commands = ['"instantiate_bottom"',
  16. '"node"', '"Class"', 'true',
  17. '"value"', '"Type"', '{"value": "Type"}', 'true',
  18. '"value"', '"__String"', '{"value": "String"}', 'true',
  19. '"value"', '"__name"', '"name"', 'true',
  20. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  21. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  22. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  23. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  24. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  25. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  26. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  27. '"value"', '"__attribute"', '"attribute"', 'true',
  28. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  29. 1,
  30. '"output"', '"const"', '3',
  31. 'true',
  32. '"return"', 'true',
  33. '"const"', 'true',
  34. ]
  35. self.assertTrue(run_barebone(flatten(commands), ['3'], 1))
  36. def test_constructors_instantiate_model(self):
  37. commands = ['"instantiate_bottom"',
  38. '"node"', '"Class"', 'true',
  39. '"value"', '"Type"', '{"value": "Type"}', 'true',
  40. '"value"', '"__String"', '{"value": "String"}', 'true',
  41. '"value"', '"__name"', '"name"', 'true',
  42. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  43. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  44. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  45. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  46. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  47. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  48. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  49. '"value"', '"__attribute"', '"attribute"', 'true',
  50. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  51. 1,
  52. '"instantiate_model"',
  53. 1,
  54. 1, '"Inheritance"',
  55. '"Class"', '"Place"',
  56. 'true',
  57. '"tokens"', '{"value": "Integer"}', 'false',
  58. 'false',
  59. 'true',
  60. '"Class"', '"Transition"',
  61. 'false',
  62. 'false',
  63. 'true',
  64. '"Association"', '"P2T"', '"Place"', '"Transition"',
  65. 'true',
  66. '"weight"', '{"value": "Integer"}', 'false',
  67. 'false',
  68. 'true',
  69. '"Association"', '"T2P"', '"Transition"', '"Place"',
  70. 'true',
  71. '"weight"', '{"value": "Integer"}', 'false',
  72. 'false',
  73. 'false',
  74. 2,
  75. '"instantiate_model"',
  76. 2,
  77. 1, '"Inheritance"',
  78. '"Place"', '"p1"',
  79. 'false',
  80. 'true',
  81. '"tokens"', '5', 'false',
  82. 'true',
  83. '"Transition"', '"t1"',
  84. 'false',
  85. 'false',
  86. 'true',
  87. '"P2T"', '""', '"p1"', '"t1"',
  88. 'false',
  89. 'true',
  90. '"weight"', '1', 'false',
  91. 'true',
  92. '"T2P"', '""', '"t1"', '"p1"',
  93. 'false',
  94. 'true',
  95. '"weight"', '2', 'false',
  96. 'false',
  97. 3,
  98. '"output"', '"const"', '3',
  99. 'true',
  100. '"return"', 'true',
  101. '"const"', 'true',
  102. ]
  103. self.assertTrue(run_barebone(flatten(commands), ['3'], 1))
  104. def test_constructors_retype_model(self):
  105. commands = ['"instantiate_bottom"',
  106. '"node"', '"Class"', 'true',
  107. '"value"', '"Type"', '{"value": "Type"}', 'true',
  108. '"value"', '"__String"', '{"value": "String"}', 'true',
  109. '"value"', '"__name"', '"name"', 'true',
  110. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  111. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  112. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  113. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  114. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  115. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  116. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  117. '"value"', '"__attribute"', '"attribute"', 'true',
  118. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  119. 1,
  120. '"retype_model"',
  121. 1,
  122. 1,
  123. 1, '"Inheritance"',
  124. 'true',
  125. '"Class"', '"Class"', 'true',
  126. '"Type"', '"Type"', 'true',
  127. '"__String"', '"Type"', 'true',
  128. '"Attribute"', '"Attribute"', 'true',
  129. '"__Name"', '"Attribute"', 'true',
  130. '"Association"', '"Association"', 'true',
  131. '"Inheritance"', '"Association"', 'true',
  132. '"__inh_1"', '"Inheritance"', 'true',
  133. '"__inh2"', '"Inheritance"', 'true',
  134. '"__name"', '"__String"', 'true',
  135. '"__name_edge"', '"__Name"', 'true',
  136. '"__attribute"', '"__String"', 'true',
  137. '"__attribute_edge"', '"__Name"', 'false',
  138. '"output"', '"const"', '3',
  139. 'true',
  140. '"return"', 'true',
  141. '"const"', 'true',
  142. ]
  143. self.assertTrue(run_barebone(flatten(commands), ['3'], 1))
  144. def test_constructors_instantiate_model_inheritance(self):
  145. commands = ['"instantiate_bottom"',
  146. '"node"', '"Class"', 'true',
  147. '"value"', '"Type"', '{"value": "Type"}', 'true',
  148. '"value"', '"__String"', '{"value": "String"}', 'true',
  149. '"value"', '"__name"', '"name"', 'true',
  150. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  151. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  152. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  153. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  154. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  155. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  156. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  157. '"value"', '"__attribute"', '"attribute"', 'true',
  158. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  159. 1,
  160. '"instantiate_model"',
  161. 1,
  162. 1, '"Inheritance"',
  163. '"Class"', '"A"',
  164. 'true',
  165. '"a"', '{"value": "Integer"}', 'false',
  166. 'false',
  167. 'true',
  168. '"Class"', '"B"',
  169. 'true',
  170. '"b"', '{"value": "Integer"}', 'false',
  171. 'false',
  172. 'true',
  173. '"Inheritance"', '"b_inherits_from_a"', '"B"', '"A"',
  174. 'false',
  175. 'false',
  176. 'false',
  177. 2,
  178. '"instantiate_model"',
  179. 2,
  180. 1, '"Inheritance"',
  181. '"A"', '"a1"',
  182. 'false',
  183. 'true',
  184. '"a"', '1', 'false',
  185. 'true',
  186. '"B"', '"b1"',
  187. 'false',
  188. 'true',
  189. '"a"', '2', 'true',
  190. '"b"', '3', 'false',
  191. 'false',
  192. 3,
  193. '"output"', '"const"', '3',
  194. 'true',
  195. '"return"', 'true',
  196. '"const"', 'true',
  197. ]
  198. self.assertTrue(run_barebone(flatten(commands), ['3'], 1))
  199. def test_constructors_conformance_metametamodel(self):
  200. commands = ['"instantiate_bottom"',
  201. '"node"', '"Class"', 'true',
  202. '"value"', '"Type"', '{"value": "Type"}', 'true',
  203. '"value"', '"__String"', '{"value": "String"}', 'true',
  204. '"value"', '"__name"', '"name"', 'true',
  205. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  206. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  207. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  208. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  209. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  210. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  211. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  212. '"value"', '"__attribute"', '"attribute"', 'true',
  213. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  214. 1,
  215. '"retype_model"',
  216. 1,
  217. 1,
  218. 1, '"Inheritance"',
  219. 'true',
  220. '"Class"', '"Class"', 'true',
  221. '"Type"', '"Type"', 'true',
  222. '"__String"', '"Type"', 'true',
  223. '"Attribute"', '"Attribute"', 'true',
  224. '"__Name"', '"Attribute"', 'true',
  225. '"Association"', '"Association"', 'true',
  226. '"Inheritance"', '"Association"', 'true',
  227. '"__inh_1"', '"Inheritance"', 'true',
  228. '"__inh_2"', '"Inheritance"', 'true',
  229. '"__name"', '"__String"', 'true',
  230. '"__name_edge"', '"__Name"', 'true',
  231. '"__attribute"', '"__String"', 'true',
  232. '"__attribute_edge"', '"__Name"', 'false',
  233. '"output"', '"call"',
  234. '"access"',
  235. '"resolve"', '"conformance_scd"',
  236. '1',
  237. '"const"', 1,
  238. 'false',
  239. 'true',
  240. '"return"', 'true',
  241. '"const"', 'true',
  242. ]
  243. self.assertTrue(run_barebone(flatten(commands), ['OK'], 1))
  244. def test_constructors_conformance_metamodel(self):
  245. commands = ['"instantiate_bottom"',
  246. '"node"', '"Class"', 'true',
  247. '"value"', '"Type"', '{"value": "Type"}', 'true',
  248. '"value"', '"__String"', '{"value": "String"}', 'true',
  249. '"value"', '"__name"', '"name"', 'true',
  250. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  251. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  252. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  253. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  254. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  255. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  256. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  257. '"value"', '"__attribute"', '"attribute"', 'true',
  258. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  259. 1,
  260. '"retype_model"',
  261. 1,
  262. 1,
  263. 1, '"Inheritance"',
  264. 'true',
  265. '"Class"', '"Class"', 'true',
  266. '"Type"', '"Type"', 'true',
  267. '"__String"', '"Type"', 'true',
  268. '"Attribute"', '"Attribute"', 'true',
  269. '"__Name"', '"Attribute"', 'true',
  270. '"Association"', '"Association"', 'true',
  271. '"Inheritance"', '"Association"', 'true',
  272. '"__inh_1"', '"Inheritance"', 'true',
  273. '"__inh2"', '"Inheritance"', 'true',
  274. '"__name"', '"__String"', 'true',
  275. '"__name_edge"', '"__Name"', 'true',
  276. '"__attribute"', '"__String"', 'true',
  277. '"__attribute_edge"', '"__Name"', 'false',
  278. '"instantiate_model"',
  279. 1,
  280. 1, '"Inheritance"',
  281. '"Class"', '"Place"',
  282. 'true',
  283. '"tokens"', '{"value": "Integer"}', 'false',
  284. 'false',
  285. 'true',
  286. '"Class"', '"Transition"',
  287. 'false',
  288. 'false',
  289. 'true',
  290. '"Association"', '"P2T"', '"Place"', '"Transition"',
  291. 'true',
  292. '"weight"', '{"value": "Integer"}', 'false',
  293. 'false',
  294. 'true',
  295. '"Association"', '"T2P"', '"Transition"', '"Place"',
  296. 'true',
  297. '"weight"', '{"value": "Integer"}', 'false',
  298. 'false',
  299. 'false',
  300. 2,
  301. '"output"', '"call"',
  302. '"access"',
  303. '"resolve"', '"conformance_scd"',
  304. '1',
  305. '"const"', 2,
  306. 'false',
  307. 'true',
  308. '"return"', 'true',
  309. '"const"', 'true',
  310. ]
  311. self.assertTrue(run_barebone(flatten(commands), ['OK'], 1))
  312. def test_constructors_conformance_model(self):
  313. commands = ['"instantiate_bottom"',
  314. '"node"', '"Class"', 'true',
  315. '"value"', '"Type"', '{"value": "Type"}', 'true',
  316. '"value"', '"__String"', '{"value": "String"}', 'true',
  317. '"value"', '"__name"', '"name"', 'true',
  318. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  319. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  320. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  321. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  322. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  323. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  324. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  325. '"value"', '"__attribute"', '"attribute"', 'true',
  326. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  327. 1,
  328. '"retype_model"',
  329. 1,
  330. 1,
  331. 1, '"Inheritance"',
  332. 'true',
  333. '"Class"', '"Class"', 'true',
  334. '"Type"', '"Type"', 'true',
  335. '"__String"', '"Type"', 'true',
  336. '"Attribute"', '"Attribute"', 'true',
  337. '"__Name"', '"Attribute"', 'true',
  338. '"Association"', '"Association"', 'true',
  339. '"Inheritance"', '"Association"', 'true',
  340. '"__inh_1"', '"Inheritance"', 'true',
  341. '"__inh2"', '"Inheritance"', 'true',
  342. '"__name"', '"__String"', 'true',
  343. '"__name_edge"', '"__Name"', 'true',
  344. '"__attribute"', '"__String"', 'true',
  345. '"__attribute_edge"', '"__Name"', 'false',
  346. '"instantiate_model"',
  347. 1,
  348. 1, '"Inheritance"',
  349. '"Class"', '"Place"',
  350. 'true',
  351. '"tokens"', '{"value": "Integer"}', 'false',
  352. 'false',
  353. 'true',
  354. '"Class"', '"Transition"',
  355. 'false',
  356. 'false',
  357. 'true',
  358. '"Association"', '"P2T"', '"Place"', '"Transition"',
  359. 'true',
  360. '"weight"', '{"value": "Integer"}', 'false',
  361. 'false',
  362. 'true',
  363. '"Association"', '"T2P"', '"Transition"', '"Place"',
  364. 'true',
  365. '"weight"', '{"value": "Integer"}', 'false',
  366. 'false',
  367. 'false',
  368. 2,
  369. '"instantiate_model"',
  370. 2,
  371. 1, '"Inheritance"',
  372. '"Place"', '"p1"',
  373. 'false',
  374. 'true',
  375. '"tokens"', '5', 'false',
  376. 'true',
  377. '"Transition"', '"t1"',
  378. 'false',
  379. 'false',
  380. 'true',
  381. '"P2T"', '""', '"p1"', '"t1"',
  382. 'false',
  383. 'true',
  384. '"weight"', '1', 'false',
  385. 'true',
  386. '"T2P"', '""', '"t1"', '"p1"',
  387. 'false',
  388. 'true',
  389. '"weight"', '2', 'false',
  390. 'false',
  391. 3,
  392. '"output"', '"call"',
  393. '"access"',
  394. '"resolve"', '"conformance_scd"',
  395. '1',
  396. '"const"', 3,
  397. 'false',
  398. 'true',
  399. '"return"', 'true',
  400. '"const"', 'true',
  401. ]
  402. self.assertTrue(run_barebone(flatten(commands), ['OK'], 1))
  403. def test_constructors_is_direct_instance(self):
  404. commands = ['"instantiate_bottom"',
  405. '"node"', '"Class"', 'true',
  406. '"value"', '"Type"', '{"value": "Type"}', 'true',
  407. '"value"', '"__String"', '{"value": "String"}', 'true',
  408. '"value"', '"__name"', '"name"', 'true',
  409. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  410. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  411. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  412. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  413. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  414. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  415. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  416. '"value"', '"__attribute"', '"attribute"', 'true',
  417. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  418. 1,
  419. '"retype_model"',
  420. 1,
  421. 1,
  422. 1, '"Inheritance"',
  423. 'true',
  424. '"Class"', '"Class"', 'true',
  425. '"Type"', '"Type"', 'true',
  426. '"__String"', '"Type"', 'true',
  427. '"Attribute"', '"Attribute"', 'true',
  428. '"__Name"', '"Attribute"', 'true',
  429. '"Association"', '"Association"', 'true',
  430. '"Inheritance"', '"Association"', 'true',
  431. '"__inh_1"', '"Inheritance"', 'true',
  432. '"__inh2"', '"Inheritance"', 'true',
  433. '"__name"', '"__String"', 'true',
  434. '"__name_edge"', '"__Name"', 'true',
  435. '"__attribute"', '"__String"', 'true',
  436. '"__attribute_edge"', '"__Name"', 'false',
  437. '"instantiate_model"',
  438. 1,
  439. 1, '"Inheritance"',
  440. '"Class"', '"A"',
  441. 'true',
  442. '"a"', '{"value": "Integer"}', 'false',
  443. 'false',
  444. 'true',
  445. '"Class"', '"B"',
  446. 'true',
  447. '"b"', '{"value": "Integer"}', 'false',
  448. 'false',
  449. 'true',
  450. '"Class"', '"C"',
  451. 'true',
  452. '"b"', '{"value": "Integer"}', 'true',
  453. '"c"', '{"value": "Integer"}', 'false',
  454. 'false',
  455. 'true',
  456. '"Inheritance"', '"__inh_1"', '"A"', '"B"',
  457. 'false',
  458. 'false',
  459. 'false',
  460. 2,
  461. '"instantiate_model"',
  462. 2,
  463. 1, '"Inheritance"',
  464. '"A"', '"a"',
  465. 'false',
  466. 'true',
  467. '"a"', '1', 'true',
  468. '"b"', '1', 'false',
  469. 'true',
  470. '"B"', '"b"',
  471. 'false',
  472. 'true',
  473. '"b"', '1', 'false',
  474. 'true',
  475. '"C"', '"c"',
  476. 'false',
  477. 'true',
  478. '"b"', '1', 'true',
  479. '"c"', '1', 'false',
  480. 'false',
  481. 3,
  482. '"output"', '"call"',
  483. '"access"',
  484. '"resolve"', '"is_direct_instance"',
  485. '3',
  486. '"const"', 3,
  487. '"call"',
  488. '"access"',
  489. '"resolve"', '"dict_read"',
  490. '2',
  491. '"call"',
  492. '"access"',
  493. '"resolve"', '"dict_read"',
  494. '2',
  495. '"const"', 3,
  496. '"const"', '"model"',
  497. 'false',
  498. '"const"', '"a"',
  499. 'false',
  500. '"call"',
  501. '"access"',
  502. '"resolve"', '"dict_read"',
  503. '2',
  504. '"call"',
  505. '"access"',
  506. '"resolve"', '"dict_read"',
  507. '2',
  508. '"const"', 2,
  509. '"const"', '"model"',
  510. 'false',
  511. '"const"', '"A"',
  512. 'false',
  513. 'false',
  514. 'true',
  515. '"output"', '"call"',
  516. '"access"',
  517. '"resolve"', '"is_direct_instance"',
  518. '3',
  519. '"const"', 3,
  520. '"call"',
  521. '"access"',
  522. '"resolve"', '"dict_read"',
  523. '2',
  524. '"call"',
  525. '"access"',
  526. '"resolve"', '"dict_read"',
  527. '2',
  528. '"const"', 3,
  529. '"const"', '"model"',
  530. 'false',
  531. '"const"', '"a"',
  532. 'false',
  533. '"call"',
  534. '"access"',
  535. '"resolve"', '"dict_read"',
  536. '2',
  537. '"call"',
  538. '"access"',
  539. '"resolve"', '"dict_read"',
  540. '2',
  541. '"const"', 2,
  542. '"const"', '"model"',
  543. 'false',
  544. '"const"', '"B"',
  545. 'false',
  546. 'false',
  547. 'true',
  548. '"output"', '"call"',
  549. '"access"',
  550. '"resolve"', '"is_direct_instance"',
  551. '3',
  552. '"const"', 3,
  553. '"call"',
  554. '"access"',
  555. '"resolve"', '"dict_read"',
  556. '2',
  557. '"call"',
  558. '"access"',
  559. '"resolve"', '"dict_read"',
  560. '2',
  561. '"const"', 3,
  562. '"const"', '"model"',
  563. 'false',
  564. '"const"', '"a"',
  565. 'false',
  566. '"call"',
  567. '"access"',
  568. '"resolve"', '"dict_read"',
  569. '2',
  570. '"call"',
  571. '"access"',
  572. '"resolve"', '"dict_read"',
  573. '2',
  574. '"const"', 2,
  575. '"const"', '"model"',
  576. 'false',
  577. '"const"', '"C"',
  578. 'false',
  579. 'false',
  580. 'true',
  581. '"output"', '"call"',
  582. '"access"',
  583. '"resolve"', '"is_direct_instance"',
  584. '3',
  585. '"const"', 3,
  586. '"call"',
  587. '"access"',
  588. '"resolve"', '"dict_read"',
  589. '2',
  590. '"call"',
  591. '"access"',
  592. '"resolve"', '"dict_read"',
  593. '2',
  594. '"const"', 3,
  595. '"const"', '"model"',
  596. 'false',
  597. '"const"', '"b"',
  598. 'false',
  599. '"call"',
  600. '"access"',
  601. '"resolve"', '"dict_read"',
  602. '2',
  603. '"call"',
  604. '"access"',
  605. '"resolve"', '"dict_read"',
  606. '2',
  607. '"const"', 2,
  608. '"const"', '"model"',
  609. 'false',
  610. '"const"', '"A"',
  611. 'false',
  612. 'false',
  613. 'true',
  614. '"output"', '"call"',
  615. '"access"',
  616. '"resolve"', '"is_direct_instance"',
  617. '3',
  618. '"const"', 3,
  619. '"call"',
  620. '"access"',
  621. '"resolve"', '"dict_read"',
  622. '2',
  623. '"call"',
  624. '"access"',
  625. '"resolve"', '"dict_read"',
  626. '2',
  627. '"const"', 3,
  628. '"const"', '"model"',
  629. 'false',
  630. '"const"', '"b"',
  631. 'false',
  632. '"call"',
  633. '"access"',
  634. '"resolve"', '"dict_read"',
  635. '2',
  636. '"call"',
  637. '"access"',
  638. '"resolve"', '"dict_read"',
  639. '2',
  640. '"const"', 2,
  641. '"const"', '"model"',
  642. 'false',
  643. '"const"', '"B"',
  644. 'false',
  645. 'false',
  646. 'true',
  647. '"output"', '"call"',
  648. '"access"',
  649. '"resolve"', '"is_direct_instance"',
  650. '3',
  651. '"const"', 3,
  652. '"call"',
  653. '"access"',
  654. '"resolve"', '"dict_read"',
  655. '2',
  656. '"call"',
  657. '"access"',
  658. '"resolve"', '"dict_read"',
  659. '2',
  660. '"const"', 3,
  661. '"const"', '"model"',
  662. 'false',
  663. '"const"', '"b"',
  664. 'false',
  665. '"call"',
  666. '"access"',
  667. '"resolve"', '"dict_read"',
  668. '2',
  669. '"call"',
  670. '"access"',
  671. '"resolve"', '"dict_read"',
  672. '2',
  673. '"const"', 2,
  674. '"const"', '"model"',
  675. 'false',
  676. '"const"', '"C"',
  677. 'false',
  678. 'false',
  679. 'true',
  680. '"output"', '"call"',
  681. '"access"',
  682. '"resolve"', '"is_direct_instance"',
  683. '3',
  684. '"const"', 3,
  685. '"call"',
  686. '"access"',
  687. '"resolve"', '"dict_read"',
  688. '2',
  689. '"call"',
  690. '"access"',
  691. '"resolve"', '"dict_read"',
  692. '2',
  693. '"const"', 3,
  694. '"const"', '"model"',
  695. 'false',
  696. '"const"', '"c"',
  697. 'false',
  698. '"call"',
  699. '"access"',
  700. '"resolve"', '"dict_read"',
  701. '2',
  702. '"call"',
  703. '"access"',
  704. '"resolve"', '"dict_read"',
  705. '2',
  706. '"const"', 2,
  707. '"const"', '"model"',
  708. 'false',
  709. '"const"', '"A"',
  710. 'false',
  711. 'false',
  712. 'true',
  713. '"output"', '"call"',
  714. '"access"',
  715. '"resolve"', '"is_direct_instance"',
  716. '3',
  717. '"const"', 3,
  718. '"call"',
  719. '"access"',
  720. '"resolve"', '"dict_read"',
  721. '2',
  722. '"call"',
  723. '"access"',
  724. '"resolve"', '"dict_read"',
  725. '2',
  726. '"const"', 3,
  727. '"const"', '"model"',
  728. 'false',
  729. '"const"', '"c"',
  730. 'false',
  731. '"call"',
  732. '"access"',
  733. '"resolve"', '"dict_read"',
  734. '2',
  735. '"call"',
  736. '"access"',
  737. '"resolve"', '"dict_read"',
  738. '2',
  739. '"const"', 2,
  740. '"const"', '"model"',
  741. 'false',
  742. '"const"', '"B"',
  743. 'false',
  744. 'false',
  745. 'true',
  746. '"output"', '"call"',
  747. '"access"',
  748. '"resolve"', '"is_direct_instance"',
  749. '3',
  750. '"const"', 3,
  751. '"call"',
  752. '"access"',
  753. '"resolve"', '"dict_read"',
  754. '2',
  755. '"call"',
  756. '"access"',
  757. '"resolve"', '"dict_read"',
  758. '2',
  759. '"const"', 3,
  760. '"const"', '"model"',
  761. 'false',
  762. '"const"', '"c"',
  763. 'false',
  764. '"call"',
  765. '"access"',
  766. '"resolve"', '"dict_read"',
  767. '2',
  768. '"call"',
  769. '"access"',
  770. '"resolve"', '"dict_read"',
  771. '2',
  772. '"const"', 2,
  773. '"const"', '"model"',
  774. 'false',
  775. '"const"', '"C"',
  776. 'false',
  777. 'false',
  778. 'true',
  779. '"return"', 'true',
  780. '"const"', 'true',
  781. ]
  782. # Test in order:
  783. # a : A --> Yes
  784. # a : B --> No
  785. # a : C --> No
  786. # b : A --> No
  787. # b : B --> Yes
  788. # b : C --> No
  789. # c : A --> No
  790. # c : B --> No
  791. # c : C --> Yes
  792. self.assertTrue(run_barebone(flatten(commands), ['True', 'False', 'False', 'False', 'True', 'False', 'False', 'False', 'True'], 1))
  793. def test_constructors_is_nominal_instance(self):
  794. commands = ['"instantiate_bottom"',
  795. '"node"', '"Class"', 'true',
  796. '"value"', '"Type"', '{"value": "Type"}', 'true',
  797. '"value"', '"__String"', '{"value": "String"}', 'true',
  798. '"value"', '"__name"', '"name"', 'true',
  799. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  800. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  801. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  802. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  803. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  804. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  805. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  806. '"value"', '"__attribute"', '"attribute"', 'true',
  807. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  808. 1,
  809. '"retype_model"',
  810. 1,
  811. 1,
  812. 1, '"Inheritance"',
  813. 'true',
  814. '"Class"', '"Class"', 'true',
  815. '"Type"', '"Type"', 'true',
  816. '"__String"', '"Type"', 'true',
  817. '"Attribute"', '"Attribute"', 'true',
  818. '"__Name"', '"Attribute"', 'true',
  819. '"Association"', '"Association"', 'true',
  820. '"Inheritance"', '"Association"', 'true',
  821. '"__inh_1"', '"Inheritance"', 'true',
  822. '"__inh2"', '"Inheritance"', 'true',
  823. '"__name"', '"__String"', 'true',
  824. '"__name_edge"', '"__Name"', 'true',
  825. '"__attribute"', '"__String"', 'true',
  826. '"__attribute_edge"', '"__Name"', 'false',
  827. '"instantiate_model"',
  828. 1,
  829. 1, '"Inheritance"',
  830. '"Class"', '"A"',
  831. 'true',
  832. '"a"', '{"value": "Integer"}', 'false',
  833. 'false',
  834. 'true',
  835. '"Class"', '"B"',
  836. 'true',
  837. '"b"', '{"value": "Integer"}', 'false',
  838. 'false',
  839. 'true',
  840. '"Class"', '"C"',
  841. 'true',
  842. '"b"', '{"value": "Integer"}', 'true',
  843. '"c"', '{"value": "Integer"}', 'false',
  844. 'false',
  845. 'true',
  846. '"Inheritance"', '"__inh_1"', '"A"', '"B"',
  847. 'false',
  848. 'false',
  849. 'false',
  850. 2,
  851. '"instantiate_model"',
  852. 2,
  853. 1, '"Inheritance"',
  854. '"A"', '"a"',
  855. 'false',
  856. 'true',
  857. '"a"', '1', 'true',
  858. '"b"', '1', 'false',
  859. 'true',
  860. '"B"', '"b"',
  861. 'false',
  862. 'true',
  863. '"b"', '1', 'false',
  864. 'true',
  865. '"C"', '"c"',
  866. 'false',
  867. 'true',
  868. '"b"', '1', 'true',
  869. '"c"', '1', 'false',
  870. 'false',
  871. 3,
  872. '"output"', '"call"',
  873. '"access"',
  874. '"resolve"', '"is_nominal_instance"',
  875. '3',
  876. '"const"', 3,
  877. '"call"',
  878. '"access"',
  879. '"resolve"', '"dict_read"',
  880. '2',
  881. '"call"',
  882. '"access"',
  883. '"resolve"', '"dict_read"',
  884. '2',
  885. '"const"', 3,
  886. '"const"', '"model"',
  887. 'false',
  888. '"const"', '"a"',
  889. 'false',
  890. '"call"',
  891. '"access"',
  892. '"resolve"', '"dict_read"',
  893. '2',
  894. '"call"',
  895. '"access"',
  896. '"resolve"', '"dict_read"',
  897. '2',
  898. '"const"', 2,
  899. '"const"', '"model"',
  900. 'false',
  901. '"const"', '"A"',
  902. 'false',
  903. 'false',
  904. 'true',
  905. '"output"', '"call"',
  906. '"access"',
  907. '"resolve"', '"is_nominal_instance"',
  908. '3',
  909. '"const"', 3,
  910. '"call"',
  911. '"access"',
  912. '"resolve"', '"dict_read"',
  913. '2',
  914. '"call"',
  915. '"access"',
  916. '"resolve"', '"dict_read"',
  917. '2',
  918. '"const"', 3,
  919. '"const"', '"model"',
  920. 'false',
  921. '"const"', '"a"',
  922. 'false',
  923. '"call"',
  924. '"access"',
  925. '"resolve"', '"dict_read"',
  926. '2',
  927. '"call"',
  928. '"access"',
  929. '"resolve"', '"dict_read"',
  930. '2',
  931. '"const"', 2,
  932. '"const"', '"model"',
  933. 'false',
  934. '"const"', '"B"',
  935. 'false',
  936. 'false',
  937. 'true',
  938. '"output"', '"call"',
  939. '"access"',
  940. '"resolve"', '"is_nominal_instance"',
  941. '3',
  942. '"const"', 3,
  943. '"call"',
  944. '"access"',
  945. '"resolve"', '"dict_read"',
  946. '2',
  947. '"call"',
  948. '"access"',
  949. '"resolve"', '"dict_read"',
  950. '2',
  951. '"const"', 3,
  952. '"const"', '"model"',
  953. 'false',
  954. '"const"', '"a"',
  955. 'false',
  956. '"call"',
  957. '"access"',
  958. '"resolve"', '"dict_read"',
  959. '2',
  960. '"call"',
  961. '"access"',
  962. '"resolve"', '"dict_read"',
  963. '2',
  964. '"const"', 2,
  965. '"const"', '"model"',
  966. 'false',
  967. '"const"', '"C"',
  968. 'false',
  969. 'false',
  970. 'true',
  971. '"output"', '"call"',
  972. '"access"',
  973. '"resolve"', '"is_nominal_instance"',
  974. '3',
  975. '"const"', 3,
  976. '"call"',
  977. '"access"',
  978. '"resolve"', '"dict_read"',
  979. '2',
  980. '"call"',
  981. '"access"',
  982. '"resolve"', '"dict_read"',
  983. '2',
  984. '"const"', 3,
  985. '"const"', '"model"',
  986. 'false',
  987. '"const"', '"b"',
  988. 'false',
  989. '"call"',
  990. '"access"',
  991. '"resolve"', '"dict_read"',
  992. '2',
  993. '"call"',
  994. '"access"',
  995. '"resolve"', '"dict_read"',
  996. '2',
  997. '"const"', 2,
  998. '"const"', '"model"',
  999. 'false',
  1000. '"const"', '"A"',
  1001. 'false',
  1002. 'false',
  1003. 'true',
  1004. '"output"', '"call"',
  1005. '"access"',
  1006. '"resolve"', '"is_nominal_instance"',
  1007. '3',
  1008. '"const"', 3,
  1009. '"call"',
  1010. '"access"',
  1011. '"resolve"', '"dict_read"',
  1012. '2',
  1013. '"call"',
  1014. '"access"',
  1015. '"resolve"', '"dict_read"',
  1016. '2',
  1017. '"const"', 3,
  1018. '"const"', '"model"',
  1019. 'false',
  1020. '"const"', '"b"',
  1021. 'false',
  1022. '"call"',
  1023. '"access"',
  1024. '"resolve"', '"dict_read"',
  1025. '2',
  1026. '"call"',
  1027. '"access"',
  1028. '"resolve"', '"dict_read"',
  1029. '2',
  1030. '"const"', 2,
  1031. '"const"', '"model"',
  1032. 'false',
  1033. '"const"', '"B"',
  1034. 'false',
  1035. 'false',
  1036. 'true',
  1037. '"output"', '"call"',
  1038. '"access"',
  1039. '"resolve"', '"is_nominal_instance"',
  1040. '3',
  1041. '"const"', 3,
  1042. '"call"',
  1043. '"access"',
  1044. '"resolve"', '"dict_read"',
  1045. '2',
  1046. '"call"',
  1047. '"access"',
  1048. '"resolve"', '"dict_read"',
  1049. '2',
  1050. '"const"', 3,
  1051. '"const"', '"model"',
  1052. 'false',
  1053. '"const"', '"b"',
  1054. 'false',
  1055. '"call"',
  1056. '"access"',
  1057. '"resolve"', '"dict_read"',
  1058. '2',
  1059. '"call"',
  1060. '"access"',
  1061. '"resolve"', '"dict_read"',
  1062. '2',
  1063. '"const"', 2,
  1064. '"const"', '"model"',
  1065. 'false',
  1066. '"const"', '"C"',
  1067. 'false',
  1068. 'false',
  1069. 'true',
  1070. '"output"', '"call"',
  1071. '"access"',
  1072. '"resolve"', '"is_nominal_instance"',
  1073. '3',
  1074. '"const"', 3,
  1075. '"call"',
  1076. '"access"',
  1077. '"resolve"', '"dict_read"',
  1078. '2',
  1079. '"call"',
  1080. '"access"',
  1081. '"resolve"', '"dict_read"',
  1082. '2',
  1083. '"const"', 3,
  1084. '"const"', '"model"',
  1085. 'false',
  1086. '"const"', '"c"',
  1087. 'false',
  1088. '"call"',
  1089. '"access"',
  1090. '"resolve"', '"dict_read"',
  1091. '2',
  1092. '"call"',
  1093. '"access"',
  1094. '"resolve"', '"dict_read"',
  1095. '2',
  1096. '"const"', 2,
  1097. '"const"', '"model"',
  1098. 'false',
  1099. '"const"', '"A"',
  1100. 'false',
  1101. 'false',
  1102. 'true',
  1103. '"output"', '"call"',
  1104. '"access"',
  1105. '"resolve"', '"is_nominal_instance"',
  1106. '3',
  1107. '"const"', 3,
  1108. '"call"',
  1109. '"access"',
  1110. '"resolve"', '"dict_read"',
  1111. '2',
  1112. '"call"',
  1113. '"access"',
  1114. '"resolve"', '"dict_read"',
  1115. '2',
  1116. '"const"', 3,
  1117. '"const"', '"model"',
  1118. 'false',
  1119. '"const"', '"c"',
  1120. 'false',
  1121. '"call"',
  1122. '"access"',
  1123. '"resolve"', '"dict_read"',
  1124. '2',
  1125. '"call"',
  1126. '"access"',
  1127. '"resolve"', '"dict_read"',
  1128. '2',
  1129. '"const"', 2,
  1130. '"const"', '"model"',
  1131. 'false',
  1132. '"const"', '"B"',
  1133. 'false',
  1134. 'false',
  1135. 'true',
  1136. '"output"', '"call"',
  1137. '"access"',
  1138. '"resolve"', '"is_nominal_instance"',
  1139. '3',
  1140. '"const"', 3,
  1141. '"call"',
  1142. '"access"',
  1143. '"resolve"', '"dict_read"',
  1144. '2',
  1145. '"call"',
  1146. '"access"',
  1147. '"resolve"', '"dict_read"',
  1148. '2',
  1149. '"const"', 3,
  1150. '"const"', '"model"',
  1151. 'false',
  1152. '"const"', '"c"',
  1153. 'false',
  1154. '"call"',
  1155. '"access"',
  1156. '"resolve"', '"dict_read"',
  1157. '2',
  1158. '"call"',
  1159. '"access"',
  1160. '"resolve"', '"dict_read"',
  1161. '2',
  1162. '"const"', 2,
  1163. '"const"', '"model"',
  1164. 'false',
  1165. '"const"', '"C"',
  1166. 'false',
  1167. 'false',
  1168. 'true',
  1169. '"return"', 'true',
  1170. '"const"', 'true',
  1171. ]
  1172. # Test in order:
  1173. # a : A --> Yes
  1174. # a : B --> Yes
  1175. # a : C --> No
  1176. # b : A --> No
  1177. # b : B --> Yes
  1178. # b : C --> No
  1179. # c : A --> No
  1180. # c : B --> No
  1181. # c : C --> Yes
  1182. self.assertTrue(run_barebone(flatten(commands), ['True', 'True', 'False', 'False', 'True', 'False', 'False', 'False', 'True'], 1))
  1183. def test_constructors_is_structural_instance(self):
  1184. commands = ['"instantiate_bottom"',
  1185. '"node"', '"Class"', 'true',
  1186. '"value"', '"Type"', '{"value": "Type"}', 'true',
  1187. '"value"', '"__String"', '{"value": "String"}', 'true',
  1188. '"value"', '"__name"', '"name"', 'true',
  1189. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  1190. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  1191. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  1192. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  1193. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  1194. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  1195. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  1196. '"value"', '"__attribute"', '"attribute"', 'true',
  1197. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  1198. 1,
  1199. '"retype_model"',
  1200. 1,
  1201. 1,
  1202. 1, '"Inheritance"',
  1203. 'true',
  1204. '"Class"', '"Class"', 'true',
  1205. '"Type"', '"Type"', 'true',
  1206. '"__String"', '"Type"', 'true',
  1207. '"Attribute"', '"Attribute"', 'true',
  1208. '"__Name"', '"Attribute"', 'true',
  1209. '"Association"', '"Association"', 'true',
  1210. '"Inheritance"', '"Association"', 'true',
  1211. '"__inh_1"', '"Inheritance"', 'true',
  1212. '"__inh2"', '"Inheritance"', 'true',
  1213. '"__name"', '"__String"', 'true',
  1214. '"__name_edge"', '"__Name"', 'true',
  1215. '"__attribute"', '"__String"', 'true',
  1216. '"__attribute_edge"', '"__Name"', 'false',
  1217. '"instantiate_model"',
  1218. 1,
  1219. 1, '"Inheritance"',
  1220. '"Class"', '"A"',
  1221. 'true',
  1222. '"a"', '{"value": "Integer"}', 'false',
  1223. 'false',
  1224. 'true',
  1225. '"Class"', '"B"',
  1226. 'true',
  1227. '"b"', '{"value": "Integer"}', 'false',
  1228. 'false',
  1229. 'true',
  1230. '"Class"', '"C"',
  1231. 'true',
  1232. '"b"', '{"value": "Integer"}', 'true',
  1233. '"c"', '{"value": "Integer"}', 'false',
  1234. 'false',
  1235. 'true',
  1236. '"Inheritance"', '"__inh_1"', '"A"', '"B"',
  1237. 'false',
  1238. 'false',
  1239. 'false',
  1240. 2,
  1241. '"instantiate_model"',
  1242. 2,
  1243. 1, '"Inheritance"',
  1244. '"A"', '"a"',
  1245. 'false',
  1246. 'true',
  1247. '"a"', '1', 'false',
  1248. 'true',
  1249. '"B"', '"b"',
  1250. 'false',
  1251. 'true',
  1252. '"b"', '1', 'false',
  1253. 'true',
  1254. '"C"', '"c"',
  1255. 'false',
  1256. 'true',
  1257. '"b"', '1', 'true',
  1258. '"c"', '1', 'false',
  1259. 'false',
  1260. 3,
  1261. '"output"', '"call"',
  1262. '"access"',
  1263. '"resolve"', '"is_structural_instance"',
  1264. '3',
  1265. '"const"', 3,
  1266. '"call"',
  1267. '"access"',
  1268. '"resolve"', '"dict_read"',
  1269. '2',
  1270. '"call"',
  1271. '"access"',
  1272. '"resolve"', '"dict_read"',
  1273. '2',
  1274. '"const"', 3,
  1275. '"const"', '"model"',
  1276. 'false',
  1277. '"const"', '"a"',
  1278. 'false',
  1279. '"call"',
  1280. '"access"',
  1281. '"resolve"', '"dict_read"',
  1282. '2',
  1283. '"call"',
  1284. '"access"',
  1285. '"resolve"', '"dict_read"',
  1286. '2',
  1287. '"const"', 2,
  1288. '"const"', '"model"',
  1289. 'false',
  1290. '"const"', '"A"',
  1291. 'false',
  1292. 'false',
  1293. 'true',
  1294. '"output"', '"call"',
  1295. '"access"',
  1296. '"resolve"', '"is_structural_instance"',
  1297. '3',
  1298. '"const"', 3,
  1299. '"call"',
  1300. '"access"',
  1301. '"resolve"', '"dict_read"',
  1302. '2',
  1303. '"call"',
  1304. '"access"',
  1305. '"resolve"', '"dict_read"',
  1306. '2',
  1307. '"const"', 3,
  1308. '"const"', '"model"',
  1309. 'false',
  1310. '"const"', '"a"',
  1311. 'false',
  1312. '"call"',
  1313. '"access"',
  1314. '"resolve"', '"dict_read"',
  1315. '2',
  1316. '"call"',
  1317. '"access"',
  1318. '"resolve"', '"dict_read"',
  1319. '2',
  1320. '"const"', 2,
  1321. '"const"', '"model"',
  1322. 'false',
  1323. '"const"', '"B"',
  1324. 'false',
  1325. 'false',
  1326. 'true',
  1327. '"output"', '"call"',
  1328. '"access"',
  1329. '"resolve"', '"is_structural_instance"',
  1330. '3',
  1331. '"const"', 3,
  1332. '"call"',
  1333. '"access"',
  1334. '"resolve"', '"dict_read"',
  1335. '2',
  1336. '"call"',
  1337. '"access"',
  1338. '"resolve"', '"dict_read"',
  1339. '2',
  1340. '"const"', 3,
  1341. '"const"', '"model"',
  1342. 'false',
  1343. '"const"', '"a"',
  1344. 'false',
  1345. '"call"',
  1346. '"access"',
  1347. '"resolve"', '"dict_read"',
  1348. '2',
  1349. '"call"',
  1350. '"access"',
  1351. '"resolve"', '"dict_read"',
  1352. '2',
  1353. '"const"', 2,
  1354. '"const"', '"model"',
  1355. 'false',
  1356. '"const"', '"C"',
  1357. 'false',
  1358. 'false',
  1359. 'true',
  1360. '"output"', '"call"',
  1361. '"access"',
  1362. '"resolve"', '"is_structural_instance"',
  1363. '3',
  1364. '"const"', 3,
  1365. '"call"',
  1366. '"access"',
  1367. '"resolve"', '"dict_read"',
  1368. '2',
  1369. '"call"',
  1370. '"access"',
  1371. '"resolve"', '"dict_read"',
  1372. '2',
  1373. '"const"', 3,
  1374. '"const"', '"model"',
  1375. 'false',
  1376. '"const"', '"b"',
  1377. 'false',
  1378. '"call"',
  1379. '"access"',
  1380. '"resolve"', '"dict_read"',
  1381. '2',
  1382. '"call"',
  1383. '"access"',
  1384. '"resolve"', '"dict_read"',
  1385. '2',
  1386. '"const"', 2,
  1387. '"const"', '"model"',
  1388. 'false',
  1389. '"const"', '"A"',
  1390. 'false',
  1391. 'false',
  1392. 'true',
  1393. '"output"', '"call"',
  1394. '"access"',
  1395. '"resolve"', '"is_structural_instance"',
  1396. '3',
  1397. '"const"', 3,
  1398. '"call"',
  1399. '"access"',
  1400. '"resolve"', '"dict_read"',
  1401. '2',
  1402. '"call"',
  1403. '"access"',
  1404. '"resolve"', '"dict_read"',
  1405. '2',
  1406. '"const"', 3,
  1407. '"const"', '"model"',
  1408. 'false',
  1409. '"const"', '"b"',
  1410. 'false',
  1411. '"call"',
  1412. '"access"',
  1413. '"resolve"', '"dict_read"',
  1414. '2',
  1415. '"call"',
  1416. '"access"',
  1417. '"resolve"', '"dict_read"',
  1418. '2',
  1419. '"const"', 2,
  1420. '"const"', '"model"',
  1421. 'false',
  1422. '"const"', '"B"',
  1423. 'false',
  1424. 'false',
  1425. 'true',
  1426. '"output"', '"call"',
  1427. '"access"',
  1428. '"resolve"', '"is_structural_instance"',
  1429. '3',
  1430. '"const"', 3,
  1431. '"call"',
  1432. '"access"',
  1433. '"resolve"', '"dict_read"',
  1434. '2',
  1435. '"call"',
  1436. '"access"',
  1437. '"resolve"', '"dict_read"',
  1438. '2',
  1439. '"const"', 3,
  1440. '"const"', '"model"',
  1441. 'false',
  1442. '"const"', '"b"',
  1443. 'false',
  1444. '"call"',
  1445. '"access"',
  1446. '"resolve"', '"dict_read"',
  1447. '2',
  1448. '"call"',
  1449. '"access"',
  1450. '"resolve"', '"dict_read"',
  1451. '2',
  1452. '"const"', 2,
  1453. '"const"', '"model"',
  1454. 'false',
  1455. '"const"', '"C"',
  1456. 'false',
  1457. 'false',
  1458. 'true',
  1459. '"output"', '"call"',
  1460. '"access"',
  1461. '"resolve"', '"is_structural_instance"',
  1462. '3',
  1463. '"const"', 3,
  1464. '"call"',
  1465. '"access"',
  1466. '"resolve"', '"dict_read"',
  1467. '2',
  1468. '"call"',
  1469. '"access"',
  1470. '"resolve"', '"dict_read"',
  1471. '2',
  1472. '"const"', 3,
  1473. '"const"', '"model"',
  1474. 'false',
  1475. '"const"', '"c"',
  1476. 'false',
  1477. '"call"',
  1478. '"access"',
  1479. '"resolve"', '"dict_read"',
  1480. '2',
  1481. '"call"',
  1482. '"access"',
  1483. '"resolve"', '"dict_read"',
  1484. '2',
  1485. '"const"', 2,
  1486. '"const"', '"model"',
  1487. 'false',
  1488. '"const"', '"A"',
  1489. 'false',
  1490. 'false',
  1491. 'true',
  1492. '"output"', '"call"',
  1493. '"access"',
  1494. '"resolve"', '"is_structural_instance"',
  1495. '3',
  1496. '"const"', 3,
  1497. '"call"',
  1498. '"access"',
  1499. '"resolve"', '"dict_read"',
  1500. '2',
  1501. '"call"',
  1502. '"access"',
  1503. '"resolve"', '"dict_read"',
  1504. '2',
  1505. '"const"', 3,
  1506. '"const"', '"model"',
  1507. 'false',
  1508. '"const"', '"c"',
  1509. 'false',
  1510. '"call"',
  1511. '"access"',
  1512. '"resolve"', '"dict_read"',
  1513. '2',
  1514. '"call"',
  1515. '"access"',
  1516. '"resolve"', '"dict_read"',
  1517. '2',
  1518. '"const"', 2,
  1519. '"const"', '"model"',
  1520. 'false',
  1521. '"const"', '"B"',
  1522. 'false',
  1523. 'false',
  1524. 'true',
  1525. '"output"', '"call"',
  1526. '"access"',
  1527. '"resolve"', '"is_structural_instance"',
  1528. '3',
  1529. '"const"', 3,
  1530. '"call"',
  1531. '"access"',
  1532. '"resolve"', '"dict_read"',
  1533. '2',
  1534. '"call"',
  1535. '"access"',
  1536. '"resolve"', '"dict_read"',
  1537. '2',
  1538. '"const"', 3,
  1539. '"const"', '"model"',
  1540. 'false',
  1541. '"const"', '"c"',
  1542. 'false',
  1543. '"call"',
  1544. '"access"',
  1545. '"resolve"', '"dict_read"',
  1546. '2',
  1547. '"call"',
  1548. '"access"',
  1549. '"resolve"', '"dict_read"',
  1550. '2',
  1551. '"const"', 2,
  1552. '"const"', '"model"',
  1553. 'false',
  1554. '"const"', '"C"',
  1555. 'false',
  1556. 'false',
  1557. 'true',
  1558. '"return"', 'true',
  1559. '"const"', 'true',
  1560. ]
  1561. # Test in order:
  1562. # a : A --> Yes
  1563. # a : B --> No
  1564. # a : C --> No
  1565. # b : A --> No
  1566. # b : B --> Yes
  1567. # b : C --> No
  1568. # c : A --> No
  1569. # c : B --> Yes
  1570. # c : C --> Yes
  1571. self.assertTrue(run_barebone(flatten(commands), ['True', 'False', 'False', 'False', 'True', 'False', 'False', 'True', 'True'], 1))
  1572. def test_constructors_readAttribute(self):
  1573. commands = ['"instantiate_bottom"',
  1574. '"node"', '"Class"', 'true',
  1575. '"value"', '"Type"', '{"value": "Type"}', 'true',
  1576. '"value"', '"__String"', '{"value": "String"}', 'true',
  1577. '"value"', '"__name"', '"name"', 'true',
  1578. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  1579. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  1580. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  1581. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  1582. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  1583. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  1584. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  1585. '"value"', '"__attribute"', '"attribute"', 'true',
  1586. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  1587. 1,
  1588. '"retype_model"',
  1589. 1,
  1590. 1,
  1591. 1, '"Inheritance"',
  1592. 'true',
  1593. '"Class"', '"Class"', 'true',
  1594. '"Type"', '"Type"', 'true',
  1595. '"__String"', '"Type"', 'true',
  1596. '"Attribute"', '"Attribute"', 'true',
  1597. '"__Name"', '"Attribute"', 'true',
  1598. '"Association"', '"Association"', 'true',
  1599. '"Inheritance"', '"Association"', 'true',
  1600. '"__inh_1"', '"Inheritance"', 'true',
  1601. '"__inh2"', '"Inheritance"', 'true',
  1602. '"__name"', '"__String"', 'true',
  1603. '"__name_edge"', '"__Name"', 'true',
  1604. '"__attribute"', '"__String"', 'true',
  1605. '"__attribute_edge"', '"__Name"', 'false',
  1606. '"instantiate_model"',
  1607. 1,
  1608. 1, '"Inheritance"',
  1609. '"Class"', '"Place"',
  1610. 'true',
  1611. '"tokens"', '{"value": "Integer"}', 'false',
  1612. 'false',
  1613. 'true',
  1614. '"Class"', '"Transition"',
  1615. 'false',
  1616. 'false',
  1617. 'true',
  1618. '"Association"', '"P2T"', '"Place"', '"Transition"',
  1619. 'true',
  1620. '"weight"', '{"value": "Integer"}', 'false',
  1621. 'false',
  1622. 'true',
  1623. '"Association"', '"T2P"', '"Transition"', '"Place"',
  1624. 'true',
  1625. '"weight"', '{"value": "Integer"}', 'false',
  1626. 'false',
  1627. 'false',
  1628. 2,
  1629. '"instantiate_model"',
  1630. 2,
  1631. 1, '"Inheritance"',
  1632. '"Place"', '"p1"',
  1633. 'false',
  1634. 'true',
  1635. '"tokens"', '5', 'false',
  1636. 'true',
  1637. '"Transition"', '"t1"',
  1638. 'false',
  1639. 'false',
  1640. 'true',
  1641. '"P2T"', '"arc1"', '"p1"', '"t1"',
  1642. 'false',
  1643. 'true',
  1644. '"weight"', '1', 'false',
  1645. 'true',
  1646. '"T2P"', '"arc2"', '"t1"', '"p1"',
  1647. 'false',
  1648. 'true',
  1649. '"weight"', '2', 'false',
  1650. 'false',
  1651. 3,
  1652. '"output"', '"call"',
  1653. '"access"',
  1654. '"resolve"', '"readAttribute"',
  1655. '3',
  1656. '"const"', 3,
  1657. '"call"',
  1658. '"access"',
  1659. '"resolve"', '"readElementByName"',
  1660. '2',
  1661. '"const"', 3,
  1662. '"const"', '"p1"',
  1663. 'false',
  1664. '"const"', '"tokens"',
  1665. 'false',
  1666. 'true',
  1667. '"output"', '"call"',
  1668. '"access"',
  1669. '"resolve"', '"readAttribute"',
  1670. '3',
  1671. '"const"', 3,
  1672. '"call"',
  1673. '"access"',
  1674. '"resolve"', '"readElementByName"',
  1675. '2',
  1676. '"const"', 3,
  1677. '"const"', '"arc1"',
  1678. 'false',
  1679. '"const"', '"weight"',
  1680. 'false',
  1681. 'true',
  1682. '"output"', '"call"',
  1683. '"access"',
  1684. '"resolve"', '"readAttribute"',
  1685. '3',
  1686. '"const"', 3,
  1687. '"call"',
  1688. '"access"',
  1689. '"resolve"', '"readElementByName"',
  1690. '2',
  1691. '"const"', 3,
  1692. '"const"', '"arc2"',
  1693. 'false',
  1694. '"const"', '"weight"',
  1695. 'false',
  1696. 'true',
  1697. '"return"', 'true',
  1698. '"const"', 'true',
  1699. ]
  1700. self.assertTrue(run_barebone(flatten(commands), ['5', '1', '2'], 1))
  1701. def test_constructors_readAndSetAttribute(self):
  1702. commands = ['"instantiate_bottom"',
  1703. '"node"', '"Class"', 'true',
  1704. '"value"', '"Type"', '{"value": "Type"}', 'true',
  1705. '"value"', '"__String"', '{"value": "String"}', 'true',
  1706. '"value"', '"__name"', '"name"', 'true',
  1707. '"edge"', '"Attribute"', '"Class"', '"Type"', 'true',
  1708. '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true',
  1709. '"edge"', '"Association"', '"Class"', '"Class"', 'true',
  1710. '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true',
  1711. '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true',
  1712. '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true',
  1713. '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true',
  1714. '"value"', '"__attribute"', '"attribute"', 'true',
  1715. '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false',
  1716. 1,
  1717. '"retype_model"',
  1718. 1,
  1719. 1,
  1720. 1, '"Inheritance"',
  1721. 'true',
  1722. '"Class"', '"Class"', 'true',
  1723. '"Type"', '"Type"', 'true',
  1724. '"__String"', '"Type"', 'true',
  1725. '"Attribute"', '"Attribute"', 'true',
  1726. '"__Name"', '"Attribute"', 'true',
  1727. '"Association"', '"Association"', 'true',
  1728. '"Inheritance"', '"Association"', 'true',
  1729. '"__inh_1"', '"Inheritance"', 'true',
  1730. '"__inh2"', '"Inheritance"', 'true',
  1731. '"__name"', '"__String"', 'true',
  1732. '"__name_edge"', '"__Name"', 'true',
  1733. '"__attribute"', '"__String"', 'true',
  1734. '"__attribute_edge"', '"__Name"', 'false',
  1735. '"instantiate_model"',
  1736. 1,
  1737. 1, '"Inheritance"',
  1738. '"Class"', '"Place"',
  1739. 'true',
  1740. '"tokens"', '{"value": "Integer"}', 'false',
  1741. 'false',
  1742. 'true',
  1743. '"Class"', '"Transition"',
  1744. 'false',
  1745. 'false',
  1746. 'true',
  1747. '"Association"', '"P2T"', '"Place"', '"Transition"',
  1748. 'true',
  1749. '"weight"', '{"value": "Integer"}', 'false',
  1750. 'false',
  1751. 'true',
  1752. '"Association"', '"T2P"', '"Transition"', '"Place"',
  1753. 'true',
  1754. '"weight"', '{"value": "Integer"}', 'false',
  1755. 'false',
  1756. 'false',
  1757. 2,
  1758. '"instantiate_model"',
  1759. 2,
  1760. 1, '"Inheritance"',
  1761. '"Place"', '"p1"',
  1762. 'false',
  1763. 'true',
  1764. '"tokens"', '5', 'false',
  1765. 'true',
  1766. '"Transition"', '"t1"',
  1767. 'false',
  1768. 'false',
  1769. 'true',
  1770. '"P2T"', '"arc1"', '"p1"', '"t1"',
  1771. 'false',
  1772. 'true',
  1773. '"weight"', '1', 'false',
  1774. 'true',
  1775. '"T2P"', '"arc2"', '"t1"', '"p1"',
  1776. 'false',
  1777. 'true',
  1778. '"weight"', '2', 'false',
  1779. 'false',
  1780. 3,
  1781. '"output"', '"call"',
  1782. '"access"',
  1783. '"resolve"', '"readAttribute"',
  1784. '3',
  1785. '"const"', 3,
  1786. '"call"',
  1787. '"access"',
  1788. '"resolve"', '"readElementByName"',
  1789. '2',
  1790. '"const"', 3,
  1791. '"const"', '"p1"',
  1792. 'false',
  1793. '"const"', '"tokens"',
  1794. 'false',
  1795. 'true',
  1796. '"output"', '"call"',
  1797. '"access"',
  1798. '"resolve"', '"readAttribute"',
  1799. '3',
  1800. '"const"', 3,
  1801. '"call"',
  1802. '"access"',
  1803. '"resolve"', '"readElementByName"',
  1804. '2',
  1805. '"const"', 3,
  1806. '"const"', '"arc1"',
  1807. 'false',
  1808. '"const"', '"weight"',
  1809. 'false',
  1810. 'true',
  1811. '"output"', '"call"',
  1812. '"access"',
  1813. '"resolve"', '"readAttribute"',
  1814. '3',
  1815. '"const"', 3,
  1816. '"call"',
  1817. '"access"',
  1818. '"resolve"', '"readElementByName"',
  1819. '2',
  1820. '"const"', 3,
  1821. '"const"', '"arc2"',
  1822. 'false',
  1823. '"const"', '"weight"',
  1824. 'false',
  1825. 'true',
  1826. '"call"',
  1827. '"access"',
  1828. '"resolve"', '"setAttribute"',
  1829. '4',
  1830. '"const"', 3,
  1831. '"call"',
  1832. '"access"',
  1833. '"resolve"', '"readElementByName"',
  1834. '2',
  1835. '"const"', 3,
  1836. '"const"', '"p1"',
  1837. 'false',
  1838. '"const"', '"tokens"',
  1839. '"const"', '10',
  1840. 'true',
  1841. '"call"',
  1842. '"access"',
  1843. '"resolve"', '"setAttribute"',
  1844. '4',
  1845. '"const"', 3,
  1846. '"call"',
  1847. '"access"',
  1848. '"resolve"', '"readElementByName"',
  1849. '2',
  1850. '"const"', 3,
  1851. '"const"', '"arc1"',
  1852. 'false',
  1853. '"const"', '"weight"',
  1854. '"const"', '16',
  1855. 'true',
  1856. '"call"',
  1857. '"access"',
  1858. '"resolve"', '"setAttribute"',
  1859. '4',
  1860. '"const"', 3,
  1861. '"call"',
  1862. '"access"',
  1863. '"resolve"', '"readElementByName"',
  1864. '2',
  1865. '"const"', 3,
  1866. '"const"', '"arc2"',
  1867. 'false',
  1868. '"const"', '"weight"',
  1869. '"const"', '30',
  1870. 'true',
  1871. '"output"', '"call"',
  1872. '"access"',
  1873. '"resolve"', '"readAttribute"',
  1874. '3',
  1875. '"const"', 3,
  1876. '"call"',
  1877. '"access"',
  1878. '"resolve"', '"readElementByName"',
  1879. '2',
  1880. '"const"', 3,
  1881. '"const"', '"p1"',
  1882. 'false',
  1883. '"const"', '"tokens"',
  1884. 'false',
  1885. 'true',
  1886. '"output"', '"call"',
  1887. '"access"',
  1888. '"resolve"', '"readAttribute"',
  1889. '3',
  1890. '"const"', 3,
  1891. '"call"',
  1892. '"access"',
  1893. '"resolve"', '"readElementByName"',
  1894. '2',
  1895. '"const"', 3,
  1896. '"const"', '"arc1"',
  1897. 'false',
  1898. '"const"', '"weight"',
  1899. 'false',
  1900. 'true',
  1901. '"output"', '"call"',
  1902. '"access"',
  1903. '"resolve"', '"readAttribute"',
  1904. '3',
  1905. '"const"', 3,
  1906. '"call"',
  1907. '"access"',
  1908. '"resolve"', '"readElementByName"',
  1909. '2',
  1910. '"const"', 3,
  1911. '"const"', '"arc2"',
  1912. 'false',
  1913. '"const"', '"weight"',
  1914. 'false',
  1915. 'true',
  1916. '"return"', 'true',
  1917. '"const"', 'true',
  1918. ]
  1919. self.assertTrue(run_barebone(flatten(commands), ['5', '1', '2', '10', '16', '30'], 1))