From 66cba204970d57edac4469a76eb4cf0c4e097d59 Mon Sep 17 00:00:00 2001
From: arnaudlabourel <arnaud.labourel@univ-amu.fr>
Date: Wed, 18 Oct 2023 11:46:41 +0200
Subject: [PATCH] backtrack
---
.../java/main/GameOfLifeApplication.class | Bin 0 -> 3201 bytes
.../java/main/controller/Controller.class | Bin 0 -> 2867 bytes
.../controller/PersistentToggleGroup.class | Bin 0 -> 2668 bytes
build/classes/java/main/model/Cell.class | Bin 0 -> 1478 bytes
build/classes/java/main/model/CellState.class | Bin 0 -> 1257 bytes
.../classes/java/main/model/GameOfLife.class | Bin 0 -> 3325 bytes
build/classes/java/main/model/Grid.class | Bin 0 -> 2537 bytes
.../java/main/model/GridIterator.class | Bin 0 -> 1098 bytes
build/classes/java/main/view/MatrixPane.class | Bin 0 -> 3554 bytes
build/classes/java/test/model/GridTest.class | Bin 0 -> 2293 bytes
.../tests/test/classes/model.GridTest.html | 384 ++++++++++++++++++
build/reports/tests/test/css/base-style.css | 179 ++++++++
build/reports/tests/test/css/style.css | 84 ++++
build/reports/tests/test/index.html | 153 +++++++
build/reports/tests/test/js/report.js | 194 +++++++++
build/reports/tests/test/packages/model.html | 123 ++++++
build/resources/main/view/style.css | 37 ++
build/resources/main/view/view.fxml | 56 +++
.../test-results/test/TEST-model.GridTest.xml | 266 ++++++++++++
build/test-results/test/binary/output.bin | 0
build/test-results/test/binary/output.bin.idx | Bin 0 -> 1 bytes
build/test-results/test/binary/results.bin | Bin 0 -> 27520 bytes
.../compileJava/previous-compilation-data.bin | Bin 0 -> 20471 bytes
.../previous-compilation-data.bin | Bin 0 -> 15975 bytes
.../classes/GameOfLifeApplication.class | Bin 0 -> 3201 bytes
.../classes/controller/Controller.class | Bin 0 -> 2867 bytes
.../controller/PersistentToggleGroup.class | Bin 0 -> 2668 bytes
out/production/classes/model/Cell.class | Bin 0 -> 1478 bytes
out/production/classes/model/CellState.class | Bin 0 -> 1257 bytes
out/production/classes/model/GameOfLife.class | Bin 0 -> 3325 bytes
out/production/classes/model/Grid.class | Bin 0 -> 2537 bytes
.../classes/model/GridIterator.class | Bin 0 -> 1098 bytes
out/production/classes/view/MatrixPane.class | Bin 0 -> 3554 bytes
out/production/resources/view/style.css | 37 ++
out/production/resources/view/view.fxml | 56 +++
out/test/classes/model/GridTest.class | Bin 0 -> 2293 bytes
36 files changed, 1569 insertions(+)
create mode 100644 build/classes/java/main/GameOfLifeApplication.class
create mode 100644 build/classes/java/main/controller/Controller.class
create mode 100644 build/classes/java/main/controller/PersistentToggleGroup.class
create mode 100644 build/classes/java/main/model/Cell.class
create mode 100644 build/classes/java/main/model/CellState.class
create mode 100644 build/classes/java/main/model/GameOfLife.class
create mode 100644 build/classes/java/main/model/Grid.class
create mode 100644 build/classes/java/main/model/GridIterator.class
create mode 100644 build/classes/java/main/view/MatrixPane.class
create mode 100644 build/classes/java/test/model/GridTest.class
create mode 100644 build/reports/tests/test/classes/model.GridTest.html
create mode 100644 build/reports/tests/test/css/base-style.css
create mode 100644 build/reports/tests/test/css/style.css
create mode 100644 build/reports/tests/test/index.html
create mode 100644 build/reports/tests/test/js/report.js
create mode 100644 build/reports/tests/test/packages/model.html
create mode 100644 build/resources/main/view/style.css
create mode 100644 build/resources/main/view/view.fxml
create mode 100644 build/test-results/test/TEST-model.GridTest.xml
create mode 100644 build/test-results/test/binary/output.bin
create mode 100644 build/test-results/test/binary/output.bin.idx
create mode 100644 build/test-results/test/binary/results.bin
create mode 100644 build/tmp/compileJava/previous-compilation-data.bin
create mode 100644 build/tmp/compileTestJava/previous-compilation-data.bin
create mode 100644 out/production/classes/GameOfLifeApplication.class
create mode 100644 out/production/classes/controller/Controller.class
create mode 100644 out/production/classes/controller/PersistentToggleGroup.class
create mode 100644 out/production/classes/model/Cell.class
create mode 100644 out/production/classes/model/CellState.class
create mode 100644 out/production/classes/model/GameOfLife.class
create mode 100644 out/production/classes/model/Grid.class
create mode 100644 out/production/classes/model/GridIterator.class
create mode 100644 out/production/classes/view/MatrixPane.class
create mode 100644 out/production/resources/view/style.css
create mode 100644 out/production/resources/view/view.fxml
create mode 100644 out/test/classes/model/GridTest.class
diff --git a/build/classes/java/main/GameOfLifeApplication.class b/build/classes/java/main/GameOfLifeApplication.class
new file mode 100644
index 0000000000000000000000000000000000000000..39fe8d606e4e6e27fe8c9a70a2eeb048ef4d41d7
GIT binary patch
literal 3201
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
b49pA*85T1vV^|JO&WsEz7*;W?VUPp>cH9#C
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class
new file mode 100644
index 0000000000000000000000000000000000000000..a06a4fd312163e10361d653d8788da44287d6946
GIT binary patch
literal 2867
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
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/controller/PersistentToggleGroup.class b/build/classes/java/main/controller/PersistentToggleGroup.class
new file mode 100644
index 0000000000000000000000000000000000000000..5ccef4da42dee9301d32078f998d43094c421149
GIT binary patch
literal 2668
zcmX^0Z`VEs1_lR)IxYq#24;2!79Ivx1~x_pg{;J~#Iy?i;^fr4RQ=@qypp2)9Q}~|
z^z@um_oDpL0!9Wlo6Nk-5<5l)W)00SE(Q(;PId+^9tLg(9!3TQsE(Y}BK?5WqT<Zr
zlGMBs6zyE;sZfDpMg~<4O&_R@$@w`ssmUdo`FX|q{z=8DMP-ReIjKIG#U<843=9l>
zJPiB{0*nlt`FYM6iFxU%DU1x>8a{;Vv&L#Z$W(|aAXaK#YLPWJgAju-JA()hgD8U-
zBZDGAS1~ehC#Iyp^fNMOX<+jSNFL25P@qXLNU}3X@i0g;$S^YKV6h8Rp9;hnMh2F=
z)QS>t=tpreNHECpFvv3~Ff#C`r<ORTq@<<<mnMO9GcpK416RMaBr``JBxcRcpv0ie
z&Y;4>pvs`e$iN4(86nNcz>!&!T9jClU&P2DhN9aODsIiqpuwQY&Y;D^pbc`n5W)nQ
z5=I90jKpHU)QS?2T3wJQ^%xmMV8-Pn=B4ZVCuOB3msqni7%(zOgN(qD<k%UE5OIMm
zO*)m9l;r1eGMF%!vNM?RFqkt~Ffz!Zn3$PYP+Fqzn_pU->ROhXSHj4^=j$ID>>3~B
z>f`Dd?CQeEAOVZIRFDFFu(FWKf>diE21W)e9tLX$8%74UjKsW@oK!}JBqEX>%s||3
zMx;z6OFh6=6j^gI7&6%LFxWFVFf#BZrlf#f<d&IJl3K*bU<OZVNIJpJh1rTE4l@yy
z>Npsjco>`+To@Sy(^E@=Q$hJHH3gD885!iEF@z&3thpH67~I(zJa`y98N3)71VDkT
zj})7X3~Z@|rHMJkj0~a>7b44AYesP~m@xS8F!+MX8TRD-yyDW_R7M6C=lqmZMh1SL
z%)C^;(%hufq7YEVXJioa$xlwq2}>->1o5GQEF~G4#f%I}gfl)P15Zw3Zc<93N?vNY
ziXkI|A;eK>75d0U4Jcbcau$dMDhi+(%~~^zk%6ZKT=GFu86$%-EP(MuD<cCNL=z)}
zEI#Gdj0|ka;F64yK@X;oIF~Up@CKJ8CTII57C?gq*{cSO46bmm;&CX<PKXlpTmtq!
zS1wYnktd*mk%22XzqBYh)h!d0OQf)t|9YTQ!^j}ul%HQxTvC)+;G0^Kk)Kk`&&H6#
z#gNL7#?Fw=!;ry{$;hAtQVK~znR#XT*{S+I;P~`SElEsEOfJbUs$^u~&PC>(f%qFm
z6T|{YHYir{$<NO&EwBcA1)?mtq$o2l9a#iw8$=@_UqO@;FA1>{zrm2&3B_dR#GIVq
z%#u`V0frEMR)!o<4V%lu5X=xFz>v?#AP(_jT7^DRCb!lM<7Z_k1Su`zVTfUf6<{b~
zWKe=D#S_Imo_TqxMb0^i#l@+`><s0M462}TCzwkZ8Q37%hMl1bst3gzkkEsK0W8?r
z8EP0A<Uq#bR?5i028kmE1qKcVCI%2-W?%rdP8b*&{1_M*+!&Y`7#SECM6|XuFludM
zVAtBkz{|j}lR=P)VIu<r0~3QksJ*}d(k0Bm!XUyR%%H#!z`(%31JTD2$PmQ9Aix9)
zQ>d967+4rs85kHGwYM>d&t$OC-o_xilR=S@!B=M|gE}L_Oa?WboeVmR3<ntW{d5m7
z7+SGNvTR~7){<n|#bC+6u#LfX`Ty(7{~rc9fEnxnDF!wM1_n_Eb_Ov96$WtzEd~h&
zD+XBx2L^etW3(7p7_=A!7(yAs7+4ro7{nOD86v=rc7!+(<Q#@bhA0L`hG+%`23`gh
zhCd7f><k*e7_^xLm_X4Cb$vXj4adO1AfT<ajlppngX>HNcAaeu-U!F=fen^q;AW6w
z;AfBlJ3s*}CIGh#;uKKG3NXYmfXoD0%gn&Y&%n%(01nthh9m|C1~CREhGYh2hAf6`
lhAc2EkD-8}n4y$`fkB9Yi9v#)jG=;slcAEKnxU3K5&+iX@&o_?
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/model/Cell.class b/build/classes/java/main/model/Cell.class
new file mode 100644
index 0000000000000000000000000000000000000000..12da98014d76383a1f7cf2d81a9fdf8dfeca06fe
GIT binary patch
literal 1478
zcmX^0Z`VEs1_lQPZ!QKV24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00Sb_Nbc1}%`Hv<m&C)Wp1E{eq(Wg4CjtO8wx>+=84`h_(QzASVMC12;PZ
z4-W$`10N#;e{OzCYL32hYEDjYNn%MVBLj<ztD_4egP;$Zj5QYnJA(koRf3ERq8dIR
zE0Nu0tr^D2Aj}}b&LGOeAjTlh$iRg#fsui?7-T%m6^slDU;{AS3{zpv#URWe$-^MU
zAkE0Yk)B!tb)K+>CWgyEev;*3kYkW%WMI!McFf5vOJ!tWi~<><$itw-pv=f105bw+
z0V9Kwh9)6La5JbfsIfDs^Dt;I2r@Frfjo`d&5R5j#i=D>i8-aIAdOl)4B8Aj5Z8kR
z85u;NR-yzP7XufA9uI>)g8?H0TNy}qF<50ZhDSjvjd&Q08B7=%*z=20GV>C1z{$W9
z<W(~s26F}rh$En(C8B|0hGrNe17~n%dR}5lX;CU8gE4_Hu)#3F&YF>d#W_DEm63tp
zCo?bAuQWF)wJ0PpDJPYYLC7aRIWZ?Ju_zP7hYGTkWMmdIGVmZ7Wes+B6e9y?G9vA9
zm*l6X=cGa%&sUINT%4H%<rgzD2w{c@BLfdOVfn)XgVB?bK`amKBLB1iGy_bb!H+u%
zvHO-QIKQ+gIn^x_<U>wSX3+zs1O`P0VFo4!1_nk3AyATMU}UglU|?Wkuwr0iU<Bn~
z21W*J1_lO41{MZJ1_lOUt?dkqTDuw8BR4T{ZfD@%${@56tigtXfdQ29K_m+UH-jw$
z0|O643xgelJ=h941_!8dMhuK#IS#FD3=&%yWY)mV09nhxAcCZy1Fqkk!2+t^nSlxH
zY;LV>3<}yi8B~}U(48U2z{MaBHbxAh6lx3u12=;s10UD{QVh~i1I@vF1_oY`fjb#A
z85s^RaBV<yl?K>2h_85|#xXKDfrAPZNW}~+3@i)`4AMIobbUZR+s0sMtG&-oOIwB|
zLAJnX8-pprm0}F63=9kg3@i+W3_J`*4Ezkn3{ngxU@NpB#z3uLVGw6<W^iF(WZ+@o
zXK-b3V_;(7XW(IQXK-U+W?%%B4h&4-Skj03f>mn^gAlswZNNrDT+a$M8WPza42%q(
IV840+007A}z5oCK
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/model/CellState.class b/build/classes/java/main/model/CellState.class
new file mode 100644
index 0000000000000000000000000000000000000000..32f92b742dbe574ec15c245f2e916eef17dc31c2
GIT binary patch
literal 1257
zcmX^0Z`VEs1_lQPS9S&_Mh5=e{FKxjedpAioZyngl2lFxMg|rh237_(Mg~?#AI~sX
zMg~D2G)2}RRUAAFoFG*!F0PI)AOUV31|9}pMh143Fh`$I*I-5lp=b=9TnzjS0_+UD
zJPd*iLW~To$vOFXsf-LF8k#;?iDilUIf;4c`u<5-smUeQTnr)%qU;P}JPhIt5{wLd
z2nDWrrMZj@>}82LrK$dDj0~n4NV=VK5{rwikpzNEiZb)kt&wd282~n4iibg(L57im
z%_cK1v&4>(K@8a_s7_DKFpvl3co^gv6c`!UGm9N_GRsmK85pBL;z~RW$_y$X&*bOi
z7cnwOf$dJK&@WC-%}doUNX*PD(RT*PS#vP3ax$nhXs|PA@-S$DG)aJbg-tCZ19On8
z3l{?;gAT}zx{M5l*qj!H+cM2C4hBw;bp|{Ph9J9G!#zAhTtP+}^Dvk&n1bR89EQc<
z7{H7zMg}&RJd1OFN-84*zfWdfs$XetQfg61Vp2{jBZDdyS7~CzJ0pXTPkwS@PFP}5
zCP*JtGfQ4#ZYoF)6bg{YhlV*L14~IpW-%iJXK-eEUSdgUQ7R*YoCaR+GBR-3B<DaQ
zl37DDjFCYZ96S({L6L5Q;W9gGMh33n{L-T2RJTl!hxp)`K@a3A2SWx%1`!4Z237}2
zP`+SbaF7J0d<F&vK~Q=C)5;7g3=9HNpbP*~$-v2A#$d|8$Y9REz@Wsy$N&Odn;5vZ
zG4LH=;NQT&z`)30!N9=42A1Ps;A9YIu!O2NVPFD_atSeN?O+f-z`zJn&xE4hih+TF
z2cn9>n!$#Ffq{uZnn9O=32b8w12Y3F0|SGQmbT1x21za1tqihSk}O*p6gPrZf@~II
zU}0cj;AdcC5MbbD5CmmM29T)=49p;%47LnxAV)I@f&B;(1NoAL!47POy#N;|2|?Yg
z2{w&^L6CJX17jrfCI;r<NR~|u?7<+Xqk5Ht!GXaMs?8H>iRNww#z-MmW|mD1YTFsK
zH#0DU1@u^$H!<jg1=x2m7;R?Y0=XYz93R-7oD6~tTntJK91KiQcR4XQgWcx>05MJb
AI{*Lx
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/model/GameOfLife.class b/build/classes/java/main/model/GameOfLife.class
new file mode 100644
index 0000000000000000000000000000000000000000..e9b8c97f46565a6c2d615c148ae6323efbea151e
GIT binary patch
literal 3325
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
VW0=msz`(`8$S{Lp7Q-9{NdSN@8^Hho
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/model/Grid.class b/build/classes/java/main/model/Grid.class
new file mode 100644
index 0000000000000000000000000000000000000000..e3ad503a3e7636a4415ff0ecadee7bcabf4cb3c3
GIT binary patch
literal 2537
zcmX^0Z`VEs1_lR)2rdRD24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3VP-29Z(9DVnq%oIijp1jiBq|_q+w4nU*Vnzl=
zPmp3h9tM7pN`9E6bAC=~ZeB4L0|$d34}%bcFe3wZa#3nxNvd;dPEIi+gMfx+bhHn|
zV33eC$QV%`1~CS4Mh4boh$22zCF~56j0{2$Js`(;mZTOXmgE<4F-R~-gS;lg$iS}w
zH58=4S~Cpf0y!QAc?JbW2LANa5<e8zGizvif>bE+Fermm2qCF}dV!rmoSi`p9ta?}
zaxthfFoU#d@-S#IXfrZ^w1pQX78InW1m%}|=B1=oFfy=cctQ-<<zdhRsS-_3ErF_n
zm<?9Q&S1dEAdKSC;F83WRBLtyBSr=xL`;Ewo0OBv$iS-M>8TmU$iU*9pOVVR!0(fp
zmkRM$NFrE)kWYScVoq3MQ6`8F6=W&N$Sh`L;6V-_Mh1>dXdp5&h-qm0fUPSn$;{CQ
zTUU}_WX;IH8JwA(msnC-l*-7Uf>n_X)KF09Sld~HA{(3lz&>PT;3$HJ3U6>pVsf@`
zVgb}u?CGf`AYGso;pwS~Yz`v>4=6fPGt)DY@{5WY8AL$-MslK0W^su%BZCqaVGIWe
zC+C;ul{n^PmZkb3OazCdCnJMUa$-($X-;BEs$XhF2{`;28AQS6LXsQEiC|%CMh0O_
z#l;}is0kXTnl~@C0_;Pu03!oWX+cV2Nh+9E3<`8CQ4fk-PLMvZDn<q|h@Oyqkn7x2
z^FYZyGd~ZMQF2lfix?RMiW2iu@^g`;L^Y5?DhMoX4KkMvqLh(A2veSs!2}|RR5Vy4
ziGb5YQcfyH=yC<;mlh?bx@CfrCnqTD>48!bgCYY50}}%ygCPSmgAk}NVPIeo0u>ct
zT8u%Qfq_AQfsuig!I*)O!GwW<Ar(|oF)%QQYi(y>)RNxHz^)~;m4R1FYa4^WRtAxc
z3=9lR45kbW3}Otd3=9mC3@i*%44e$o415eS3}Otj3}y@r3<?a)AR`#e87vq;Kpbo}
zBUp@|fd}j)O9m?jCa{&p49pB5InLb-5|LWl8KgGAEnx#osDlmV0kb)whFXKw*f21G
z3OA_Rw=l3UurM$%SZi%#kk#78pm>x)g~^B6RtCgh#GuM-2Nqq#AgV26B)gkIHF7(H
zdT<Lf<MRJ6TbLM^|G%jXvYHv}KRE_=1_lOg23`go25|;m21N!v23-bS24e;t21^D*
zu#>bHSQsQ3q!?@&co>)&_!+bq?7+TbV6cWdlb1mcRHQO6GT1XPFbFfS{AJ*0XHa4M
z!@$Y-i$U@i11kd~g9C#j)Cc|y%;2CC)Y`%zq9whJLBmK(W*dW!5y)MTaEAnm9oT+I
zI157UVqg#i+Ybs$L9m;c7??l>B-C&R1`wZtfkzq?9tj|#U=27JLGcMO*9mN{7y}an
z0|O7-Tpp;oOrU}kn`w$5(-bjGbHia8D7+XM7(ulH)HHnt5TAj8Rci|aJG!I%!Nx%1
zpB3sTMo@);MKdqD<_N5sofw><sn3Cd5gg=9jObw;2i6G*V<xDzpwthFV^A0~LBkl5
z6kQk?8C)6MpiY9D%8c%wWFk#vWN>HjKsOD;jTuCn=E>j%HO(EG4){SS0Fq7gnS8)W
zACkmCtrZ4_d<I^I0<iIr<iHON0$v6t25$xfaD@3V_(BZ@B_U9vVMLS=kQ7yhWCSDB
z2nGg520y3~{tO^>prS{c0VK}AfMG-j*a%4c!;D~L2q3I+0#=QI3_*k(JsYeM;%}IZ
XAjbtWgfK8NFfl-)Jd_~}oPELpU}3I~
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/model/GridIterator.class b/build/classes/java/main/model/GridIterator.class
new file mode 100644
index 0000000000000000000000000000000000000000..59abad2932cbdcccbe5c9bf39db8c90383d2116d
GIT binary patch
literal 1098
zcmX^0Z`VEs1_lQPOD+Z`24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3VC-29Z(9DVnq%oNX()S|?a{31pMj-vc>&%Bh>
z3PuJ-Pml&a9tM7pYVPFxoYLGpupCHSkcUBtL70(&CA}y!g^_{B2Vt5u7lSB+7(0VF
z4}%1QBqIYCLW+?=C_S~ruQWF)wa7os8Ej-R*ma&DP0~CJG9VrNNQ#2;%ZovBay$(3
z3<``4?CGf`&Z#*$j0^%Ao}QXedqE=BTnroxN<0k83@VHaEP1IFC5#Mw8Yn8*8PpgV
zguvlcT9TQgkMKCZ2Gk@_cvx$OF*2|?=clAHGVuFk=A}Yh9Fmxnlgh{-<ddJAm=l&*
zlnLTP1zAcmGK(1*M378@8E(zUz@Cv<><4xbvxa6ABLi=6Nn&!gZ(;#dH(OC^acNEo
zA{@c~VP`OghaO0PkwHX5(+BK&q*%6QWZ(?WOwUU!DJ@E6WH7;001-j)unp9mAY-lV
ztQi@&g7Zs@l2hF>K|T}&1p>_ZdLRoK6d5=em>3utR2i5Vm_P}Lfq{Vulr$I^7=%Dc
zfq{X6g@J*Al|h|>kwJrjfgyr{iGhiMfk8xTI|HK@^Hv6S5W%aZy_G>=BUra40|SE?
z11kdq11|#$10Mq?13v>Fg8+jtgCK(zSPrb8L7PE`0R%+A_AoLqGUzhsL2U^KyNZE9
zNoxxOuhtd@fo%*Tix@<;wlJ_mcv6cP*jbh{urRM-U|?Wo0NKgLz{tSBAPTmF2h3K2
z+My5j0h59Q$P#4+6{sccU{5nJn1YOi8qK?nLDokLWGhPoNO&8ANWoUH6L@Da@M=YF
zVPI!T*vi1Jy#a17#II5e0u0g&N(?d#nhdfG#tiaccZh+*$`tAj0R~kD0|r9|Mh1|J
zI2aiJFc`Bl7zsEsC^MKq9i`6zawG!-tJXFKMUW*-NS@;W8w&9pE7VXX22*gbn=zP!
GX$t@tr_SgA
literal 0
HcmV?d00001
diff --git a/build/classes/java/main/view/MatrixPane.class b/build/classes/java/main/view/MatrixPane.class
new file mode 100644
index 0000000000000000000000000000000000000000..7b342e2cc4473b954ec3d2a1ee361ee7f7bafdb6
GIT binary patch
literal 3554
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
DY>ADr
literal 0
HcmV?d00001
diff --git a/build/classes/java/test/model/GridTest.class b/build/classes/java/test/model/GridTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..7365dfb3e106e86a584f743eca1c4205590d6f00
GIT binary patch
literal 2293
zcmX^0Z`VEs1_lR)3@!#H24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00Sb_Nbc2Cm%vl++x3_oB=cE(Uf6E|6YsMg~?5PfyJ-P6l2EK6VCv9tHsh
zK}H5XgxZkQ;u1y%mh_^`6h;OfAB2Q8$P{571`!5PMh2er)Dpkc%=C<;{Gwt;1`&{<
zK44dsmSpDW`(zfESaUImGf1#ANb)d9F-S8q$mbWO>n9c$rxulD=_ltGrRpaZWa>MD
z1v2yViWwQWAhIDDi6x8-#v176Y5HI_0c01%6l*R9Sq3?F26-L^1qMZ2HX_tBGH_-V
z`{kGTmFDCyGH7eyu)r~?xTGjCxdfpRY>_e#g9?KxBLjOzVsUV0RVpKcfrcjmBRoq|
zixQJ^Qlai;XHbX7lXGfL4k&~*c^I@9v>6%L(^E@8VvGy|;J}4M1V{vIyDkrd9)mt3
zgJg1kUP)qRUa@OMVsc4NrDvXFUZsCgN@@`!gOf%yBn**KiZy921i8qNhrx)!n2|v^
zIlnZo#4#tcEEOs0!Rg5p6xXJph&E$n&?g)Wc_pdosYTFG;9{^~uw-Yj;$g66Fk@uU
z!Wzr4Nbp3~3XVY6!qUW?kbF)CTLwFJ274X`2L?w*27W|%1(zh2q%tzFI{J8qxiT^c
zLen%TD8W+JTnuUq&O8h*46cj}9L1?6U{O$_#!#sl1_}^&9tIBvPeulz<iwoh(wxMS
zRKL^;m@ZMY*a9174RW0~4}%YbFCzncW-&Mr85tO(K;h;O3bz1IxJ40&9H;#JoYcfT
zc(?^I1hX@Q@Gyijgb@li6s=%4xFzNkr!q3=5lZ$bI<2`Ff*2xr7$QM7vSk*B6qTkj
zGO#%3r=&76@cU%urTUfTCZ!gIfKoXlgOE>ta$-(cVo@fD4;5r7$;d2bWDtOcE~tP4
z6*|_841Az6EHg1DvnmxN%E%xYRGL?knVTAxS)2*VHhFpZC5a`F(n1Mb9AuT|WtQk?
zl@?@{q!xio6sOd*{GwFX#N-TXMh3x>)Z!9%cv)2nDy(F1XoNaK0;I(mJ*k6rih-rD
zL^@Y+erZv1s#|7GDkB3g$n7A*^gsn7gCYYj0}}%S10w?ysIX;VU|?ln1eN0qj0{l>
z3=H}Vj0}t*QLXI^j2jsk7?>EM85kJYz=9kMF$@e0JYY5}Lo7oa*r0d@HU=iJW;?K9
z3=9HVyBXLc1=s}Gwli>UW#B=W1FAY07<d`@8TgRQ5`dbO0JSL*Y;F?V+%F95U^{1N
zZDHVHVcEtYw1Yux8-q+ZGGBmW8-o&>$X*7uNM?{CX69`S8o`k)U^WYw%?f6-g4t{!
zHVZ@zJD3d-=K!%;A>smHMXV6b0$^3FU{%`~bixrnG-KdpU|<kp5MU5yP+|~aux1ct
zaAy!>2xbsxh-Z*s$YzjaC})sjXkn0Mn8+Z*FqJ`+VJ3qtQfSOV3yoxOXr#bHqnd#k
z92$-w$ALn_U<ZQ<^EL)^u;;;U+QeY9jll^d5B4~M3scStQjT!67y~N<1A`)iAcGQv
z0)sMxK7$H_1A{7(qa3k1Di!Xi15ig*fh+}wB&wwvNL)~;A-EtHx@}?b+QHzrjUf>1
z2atYrA(m|naG`LpDo|7)2_bx=#K6J8z@W*%&!EL1$Dqxi%b>&Hz@W<z%%I1R#-Pto
R$zXuwvns4UO9LnUbO3OUDTV+5
literal 0
HcmV?d00001
diff --git a/build/reports/tests/test/classes/model.GridTest.html b/build/reports/tests/test/classes/model.GridTest.html
new file mode 100644
index 0000000..f38c00b
--- /dev/null
+++ b/build/reports/tests/test/classes/model.GridTest.html
@@ -0,0 +1,384 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - GridTest</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>GridTest</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> >
+<a href="../packages/model.html">model</a> > GridTest</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">3</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">3</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.106s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox failures" id="successRate">
+<div class="percent">0%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Failed tests</a>
+</li>
+<li>
+<a href="#tab1">Tests</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Failed tests</h2>
+<div class="test">
+<a name="testCalculateNextState()"></a>
+<h3 class="failures">testCalculateNextState()</h3>
+<span class="code">
+<pre>java.lang.NullPointerException: Cannot read field "isAlive" because the return value of "model.Grid.calculateNextState(int, int)" is null
+ at model.GridTest.testCalculateNextState(GridTest.java:44)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
+ at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
+ at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:118)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:93)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:88)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+ at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+ at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+</pre>
+</span>
+</div>
+<div class="test">
+<a name="testCountAliveNeighbours()"></a>
+<h3 class="failures">testCountAliveNeighbours()</h3>
+<span class="code">
+<pre>org.opentest4j.AssertionFailedError:
+expected: 2
+ but was: 0
+ at java.base@20/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
+ at java.base@20/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
+ at app//model.GridTest.testCountAliveNeighbours(GridTest.java:36)
+ at java.base@20/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base@20/java.lang.reflect.Method.invoke(Method.java:578)
+ at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
+ at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+ at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
+ at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
+ at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base@20/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base@20/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+ at app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
+ at app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
+ at app//org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:118)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:93)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:88)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
+ at java.base@20/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base@20/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+ at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+ at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
+ at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+ at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+</pre>
+</span>
+</div>
+<div class="test">
+<a name="testGetNeighbours()"></a>
+<h3 class="failures">testGetNeighbours()</h3>
+<span class="code">
+<pre>java.lang.AssertionError:
+Expecting actual not to be null
+ at model.GridTest.testGetNeighbours(GridTest.java:18)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
+ at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
+ at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:118)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:93)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:88)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+ at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+ at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+</pre>
+</span>
+</div>
+</div>
+<div id="tab1" class="tab">
+<h2>Tests</h2>
+<table>
+<thead>
+<tr>
+<th>Test</th>
+<th>Duration</th>
+<th>Result</th>
+</tr>
+</thead>
+<tr>
+<td class="failures">testCalculateNextState()</td>
+<td class="failures">0.003s</td>
+<td class="failures">failed</td>
+</tr>
+<tr>
+<td class="failures">testCountAliveNeighbours()</td>
+<td class="failures">0.093s</td>
+<td class="failures">failed</td>
+</tr>
+<tr>
+<td class="failures">testGetNeighbours()</td>
+<td class="failures">0.010s</td>
+<td class="failures">failed</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by
+<a href="http://www.gradle.org">Gradle 8.3</a> at 15 sept. 2023, 16:59:13</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/reports/tests/test/css/base-style.css b/build/reports/tests/test/css/base-style.css
new file mode 100644
index 0000000..4afa73e
--- /dev/null
+++ b/build/reports/tests/test/css/base-style.css
@@ -0,0 +1,179 @@
+
+body {
+ margin: 0;
+ padding: 0;
+ font-family: sans-serif;
+ font-size: 12pt;
+}
+
+body, a, a:visited {
+ color: #303030;
+}
+
+#content {
+ padding-left: 50px;
+ padding-right: 50px;
+ padding-top: 30px;
+ padding-bottom: 30px;
+}
+
+#content h1 {
+ font-size: 160%;
+ margin-bottom: 10px;
+}
+
+#footer {
+ margin-top: 100px;
+ font-size: 80%;
+ white-space: nowrap;
+}
+
+#footer, #footer a {
+ color: #a0a0a0;
+}
+
+#line-wrapping-toggle {
+ vertical-align: middle;
+}
+
+#label-for-line-wrapping-toggle {
+ vertical-align: middle;
+}
+
+ul {
+ margin-left: 0;
+}
+
+h1, h2, h3 {
+ white-space: nowrap;
+}
+
+h2 {
+ font-size: 120%;
+}
+
+ul.tabLinks {
+ padding-left: 0;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ overflow: auto;
+ min-width: 800px;
+ width: auto !important;
+ width: 800px;
+}
+
+ul.tabLinks li {
+ float: left;
+ height: 100%;
+ list-style: none;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ margin-bottom: 0;
+ -moz-border-radius: 7px;
+ border-radius: 7px;
+ margin-right: 25px;
+ border: solid 1px #d4d4d4;
+ background-color: #f0f0f0;
+}
+
+ul.tabLinks li:hover {
+ background-color: #fafafa;
+}
+
+ul.tabLinks li.selected {
+ background-color: #c5f0f5;
+ border-color: #c5f0f5;
+}
+
+ul.tabLinks a {
+ font-size: 120%;
+ display: block;
+ outline: none;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+}
+
+ul.tabLinks li h2 {
+ margin: 0;
+ padding: 0;
+}
+
+div.tab {
+}
+
+div.selected {
+ display: block;
+}
+
+div.deselected {
+ display: none;
+}
+
+div.tab table {
+ min-width: 350px;
+ width: auto !important;
+ width: 350px;
+ border-collapse: collapse;
+}
+
+div.tab th, div.tab table {
+ border-bottom: solid #d0d0d0 1px;
+}
+
+div.tab th {
+ text-align: left;
+ white-space: nowrap;
+ padding-left: 6em;
+}
+
+div.tab th:first-child {
+ padding-left: 0;
+}
+
+div.tab td {
+ white-space: nowrap;
+ padding-left: 6em;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div.tab td:first-child {
+ padding-left: 0;
+}
+
+div.tab td.numeric, div.tab th.numeric {
+ text-align: right;
+}
+
+span.code {
+ display: inline-block;
+ margin-top: 0em;
+ margin-bottom: 1em;
+}
+
+span.code pre {
+ font-size: 11pt;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ margin: 0;
+ background-color: #f7f7f7;
+ border: solid 1px #d0d0d0;
+ min-width: 700px;
+ width: auto !important;
+ width: 700px;
+}
+
+span.wrapped pre {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ word-break: break-all;
+}
+
+label.hidden {
+ display: none;
+}
\ No newline at end of file
diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css
new file mode 100644
index 0000000..3dc4913
--- /dev/null
+++ b/build/reports/tests/test/css/style.css
@@ -0,0 +1,84 @@
+
+#summary {
+ margin-top: 30px;
+ margin-bottom: 40px;
+}
+
+#summary table {
+ border-collapse: collapse;
+}
+
+#summary td {
+ vertical-align: top;
+}
+
+.breadcrumbs, .breadcrumbs a {
+ color: #606060;
+}
+
+.infoBox {
+ width: 110px;
+ padding-top: 15px;
+ padding-bottom: 15px;
+ text-align: center;
+}
+
+.infoBox p {
+ margin: 0;
+}
+
+.counter, .percent {
+ font-size: 120%;
+ font-weight: bold;
+ margin-bottom: 8px;
+}
+
+#duration {
+ width: 125px;
+}
+
+#successRate, .summaryGroup {
+ border: solid 2px #d0d0d0;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+}
+
+#successRate {
+ width: 140px;
+ margin-left: 35px;
+}
+
+#successRate .percent {
+ font-size: 180%;
+}
+
+.success, .success a {
+ color: #008000;
+}
+
+div.success, #successRate.success {
+ background-color: #bbd9bb;
+ border-color: #008000;
+}
+
+.failures, .failures a {
+ color: #b60808;
+}
+
+.skipped, .skipped a {
+ color: #c09853;
+}
+
+div.failures, #successRate.failures {
+ background-color: #ecdada;
+ border-color: #b60808;
+}
+
+ul.linkList {
+ padding-left: 0;
+}
+
+ul.linkList li {
+ list-style: none;
+ margin-bottom: 5px;
+}
diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html
new file mode 100644
index 0000000..7030bb6
--- /dev/null
+++ b/build/reports/tests/test/index.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Test Summary</title>
+<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="css/style.css" rel="stylesheet" type="text/css"/>
+<script src="js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Test Summary</h1>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">3</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">3</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.106s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox failures" id="successRate">
+<div class="percent">0%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Failed tests</a>
+</li>
+<li>
+<a href="#tab1">Packages</a>
+</li>
+<li>
+<a href="#tab2">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Failed tests</h2>
+<ul class="linkList">
+<li>
+<a href="classes/model.GridTest.html">GridTest</a>.
+<a href="classes/model.GridTest.html#testCalculateNextState()">testCalculateNextState()</a>
+</li>
+<li>
+<a href="classes/model.GridTest.html">GridTest</a>.
+<a href="classes/model.GridTest.html#testCountAliveNeighbours()">testCountAliveNeighbours()</a>
+</li>
+<li>
+<a href="classes/model.GridTest.html">GridTest</a>.
+<a href="classes/model.GridTest.html#testGetNeighbours()">testGetNeighbours()</a>
+</li>
+</ul>
+</div>
+<div id="tab1" class="tab">
+<h2>Packages</h2>
+<table>
+<thead>
+<tr>
+<th>Package</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="failures">
+<a href="packages/model.html">model</a>
+</td>
+<td>3</td>
+<td>3</td>
+<td>0</td>
+<td>0.106s</td>
+<td class="failures">0%</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div id="tab2" class="tab">
+<h2>Classes</h2>
+<table>
+<thead>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="failures">
+<a href="classes/model.GridTest.html">model.GridTest</a>
+</td>
+<td>3</td>
+<td>3</td>
+<td>0</td>
+<td>0.106s</td>
+<td class="failures">0%</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by
+<a href="http://www.gradle.org">Gradle 8.3</a> at 15 sept. 2023, 16:59:13</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js
new file mode 100644
index 0000000..83bab4a
--- /dev/null
+++ b/build/reports/tests/test/js/report.js
@@ -0,0 +1,194 @@
+(function (window, document) {
+ "use strict";
+
+ var tabs = {};
+
+ function changeElementClass(element, classValue) {
+ if (element.getAttribute("className")) {
+ element.setAttribute("className", classValue);
+ } else {
+ element.setAttribute("class", classValue);
+ }
+ }
+
+ function getClassAttribute(element) {
+ if (element.getAttribute("className")) {
+ return element.getAttribute("className");
+ } else {
+ return element.getAttribute("class");
+ }
+ }
+
+ function addClass(element, classValue) {
+ changeElementClass(element, getClassAttribute(element) + " " + classValue);
+ }
+
+ function removeClass(element, classValue) {
+ changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
+ }
+
+ function initTabs() {
+ var container = document.getElementById("tabs");
+
+ tabs.tabs = findTabs(container);
+ tabs.titles = findTitles(tabs.tabs);
+ tabs.headers = findHeaders(container);
+ tabs.select = select;
+ tabs.deselectAll = deselectAll;
+ tabs.select(0);
+
+ return true;
+ }
+
+ function getCheckBox() {
+ return document.getElementById("line-wrapping-toggle");
+ }
+
+ function getLabelForCheckBox() {
+ return document.getElementById("label-for-line-wrapping-toggle");
+ }
+
+ function findCodeBlocks() {
+ var spans = document.getElementById("tabs").getElementsByTagName("span");
+ var codeBlocks = [];
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i].className.indexOf("code") >= 0) {
+ codeBlocks.push(spans[i]);
+ }
+ }
+ return codeBlocks;
+ }
+
+ function forAllCodeBlocks(operation) {
+ var codeBlocks = findCodeBlocks();
+
+ for (var i = 0; i < codeBlocks.length; ++i) {
+ operation(codeBlocks[i], "wrapped");
+ }
+ }
+
+ function toggleLineWrapping() {
+ var checkBox = getCheckBox();
+
+ if (checkBox.checked) {
+ forAllCodeBlocks(addClass);
+ } else {
+ forAllCodeBlocks(removeClass);
+ }
+ }
+
+ function initControls() {
+ if (findCodeBlocks().length > 0) {
+ var checkBox = getCheckBox();
+ var label = getLabelForCheckBox();
+
+ checkBox.onclick = toggleLineWrapping;
+ checkBox.checked = false;
+
+ removeClass(label, "hidden");
+ }
+ }
+
+ function switchTab() {
+ var id = this.id.substr(1);
+
+ for (var i = 0; i < tabs.tabs.length; i++) {
+ if (tabs.tabs[i].id === id) {
+ tabs.select(i);
+ break;
+ }
+ }
+
+ return false;
+ }
+
+ function select(i) {
+ this.deselectAll();
+
+ changeElementClass(this.tabs[i], "tab selected");
+ changeElementClass(this.headers[i], "selected");
+
+ while (this.headers[i].firstChild) {
+ this.headers[i].removeChild(this.headers[i].firstChild);
+ }
+
+ var h2 = document.createElement("H2");
+
+ h2.appendChild(document.createTextNode(this.titles[i]));
+ this.headers[i].appendChild(h2);
+ }
+
+ function deselectAll() {
+ for (var i = 0; i < this.tabs.length; i++) {
+ changeElementClass(this.tabs[i], "tab deselected");
+ changeElementClass(this.headers[i], "deselected");
+
+ while (this.headers[i].firstChild) {
+ this.headers[i].removeChild(this.headers[i].firstChild);
+ }
+
+ var a = document.createElement("A");
+
+ a.setAttribute("id", "ltab" + i);
+ a.setAttribute("href", "#tab" + i);
+ a.onclick = switchTab;
+ a.appendChild(document.createTextNode(this.titles[i]));
+
+ this.headers[i].appendChild(a);
+ }
+ }
+
+ function findTabs(container) {
+ return findChildElements(container, "DIV", "tab");
+ }
+
+ function findHeaders(container) {
+ var owner = findChildElements(container, "UL", "tabLinks");
+ return findChildElements(owner[0], "LI", null);
+ }
+
+ function findTitles(tabs) {
+ var titles = [];
+
+ for (var i = 0; i < tabs.length; i++) {
+ var tab = tabs[i];
+ var header = findChildElements(tab, "H2", null)[0];
+
+ header.parentNode.removeChild(header);
+
+ if (header.innerText) {
+ titles.push(header.innerText);
+ } else {
+ titles.push(header.textContent);
+ }
+ }
+
+ return titles;
+ }
+
+ function findChildElements(container, name, targetClass) {
+ var elements = [];
+ var children = container.childNodes;
+
+ for (var i = 0; i < children.length; i++) {
+ var child = children.item(i);
+
+ if (child.nodeType === 1 && child.nodeName === name) {
+ if (targetClass && child.className.indexOf(targetClass) < 0) {
+ continue;
+ }
+
+ elements.push(child);
+ }
+ }
+
+ return elements;
+ }
+
+ // Entry point.
+
+ window.onload = function() {
+ initTabs();
+ initControls();
+ };
+} (window, window.document));
\ No newline at end of file
diff --git a/build/reports/tests/test/packages/model.html b/build/reports/tests/test/packages/model.html
new file mode 100644
index 0000000..b273cff
--- /dev/null
+++ b/build/reports/tests/test/packages/model.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Package model</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Package model</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> > model</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">3</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">3</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.106s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox failures" id="successRate">
+<div class="percent">0%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Failed tests</a>
+</li>
+<li>
+<a href="#tab1">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Failed tests</h2>
+<ul class="linkList">
+<li>
+<a href="../classes/model.GridTest.html">GridTest</a>.
+<a href="../classes/model.GridTest.html#testCalculateNextState()">testCalculateNextState()</a>
+</li>
+<li>
+<a href="../classes/model.GridTest.html">GridTest</a>.
+<a href="../classes/model.GridTest.html#testCountAliveNeighbours()">testCountAliveNeighbours()</a>
+</li>
+<li>
+<a href="../classes/model.GridTest.html">GridTest</a>.
+<a href="../classes/model.GridTest.html#testGetNeighbours()">testGetNeighbours()</a>
+</li>
+</ul>
+</div>
+<div id="tab1" class="tab">
+<h2>Classes</h2>
+<table>
+<thread>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thread>
+<tr>
+<td class="failures">
+<a href="../classes/model.GridTest.html">GridTest</a>
+</td>
+<td>3</td>
+<td>3</td>
+<td>0</td>
+<td>0.106s</td>
+<td class="failures">0%</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by
+<a href="http://www.gradle.org">Gradle 8.3</a> at 15 sept. 2023, 16:59:13</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/resources/main/view/style.css b/build/resources/main/view/style.css
new file mode 100644
index 0000000..f518257
--- /dev/null
+++ b/build/resources/main/view/style.css
@@ -0,0 +1,37 @@
+.root {
+ -fx-focus-color: transparent;
+ -fx-font-size: 13px;
+}
+
+.background {
+ -fx-background-color: #1d1d1d;
+}
+
+.separator .line {
+ -fx-border-color: #fff;
+}
+
+.button {
+ -fx-background-color: derive(#1d1d1d, 20%);
+ -fx-text-fill: #fff;
+}
+
+.button:hover,
+.button:selected {
+ -fx-background-color: #fff;
+ -fx-background-insets: 0 0 -1px 0, 0, 1px, 2px;
+ -fx-background-radius: 5px, 5px, 4px, 3px;
+ -fx-text-fill: derive(#1d1d1d, 20%);
+}
+
+.label {
+ -fx-text-fill: #fff;
+}
+
+.cell-pane {
+ -fx-background-color: derive(#1d1d1d, 20%);
+}
+
+.alive {
+ -fx-background-color: #fff;
+}
diff --git a/build/resources/main/view/view.fxml b/build/resources/main/view/view.fxml
new file mode 100644
index 0000000..fcd70d9
--- /dev/null
+++ b/build/resources/main/view/view.fxml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.Separator?>
+<?import javafx.scene.control.ToggleButton?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.GridPane?>
+<?import javafx.scene.layout.HBox?>
+
+<?import view.MatrixPane?>
+<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+ styleClass="background" stylesheets="@style.css"
+ xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"
+ fx:controller="controller.Controller">
+ <padding>
+ <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
+ </padding>
+ <children>
+ <HBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0"
+ prefWidth="980.0" spacing="10.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
+ AnchorPane.topAnchor="0.0">
+ <children>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ <ToggleButton fx:id="playToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#playToggleButtonAction" prefHeight="24.0"
+ prefWidth="62.0" styleClass="button" text="Play"/>
+ <ToggleButton fx:id="pauseToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0"
+ prefWidth="71.0" styleClass="button" text="Pause"/>
+ <Button fx:id="resetButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#resetButtonAction" prefHeight="24.0" prefWidth="70.0"
+ text="Reset"/>
+ <Button fx:id="clearButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#clearButtonAction" prefHeight="24.0" prefWidth="70.0"
+ text="Clear"/>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ <Label maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="103.0"
+ text="Generation"/>
+ <Label fx:id="generationNumberLabel" alignment="CENTER_RIGHT" contentDisplay="TEXT_ONLY"
+ maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="99.0"/>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ </children>
+ </HBox>
+ <MatrixPane fx:id="matrixPane" alignment="CENTER" hgap="1.0"
+ maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="600.0" prefWidth="980.0" vgap="1.0"
+ AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
+ AnchorPane.topAnchor="35.0"/>
+ </children>
+</AnchorPane>
diff --git a/build/test-results/test/TEST-model.GridTest.xml b/build/test-results/test/TEST-model.GridTest.xml
new file mode 100644
index 0000000..cfb9395
--- /dev/null
+++ b/build/test-results/test/TEST-model.GridTest.xml
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite name="model.GridTest" tests="3" skipped="0" failures="3" errors="0" timestamp="2023-09-15T14:59:13" hostname="dhcp-183.lidil.univ-mrs.fr" time="0.109">
+ <properties/>
+ <testcase name="testCountAliveNeighbours()" classname="model.GridTest" time="0.093">
+ <failure message="org.opentest4j.AssertionFailedError: expected: 2 but was: 0" type="org.opentest4j.AssertionFailedError">org.opentest4j.AssertionFailedError:
+expected: 2
+ but was: 0
+ at java.base@20/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
+ at java.base@20/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
+ at app//model.GridTest.testCountAliveNeighbours(GridTest.java:36)
+ at java.base@20/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base@20/java.lang.reflect.Method.invoke(Method.java:578)
+ at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
+ at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+ at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
+ at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
+ at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+ at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
+ at app//org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
+ at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base@20/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base@20/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+ at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+ at app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
+ at app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
+ at app//org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:118)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:93)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:88)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
+ at java.base@20/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base@20/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+ at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+ at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
+ at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+ at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+</failure>
+ </testcase>
+ <testcase name="testGetNeighbours()" classname="model.GridTest" time="0.01">
+ <failure message="java.lang.AssertionError: Expecting actual not to be null" type="java.lang.AssertionError">java.lang.AssertionError:
+Expecting actual not to be null
+ at model.GridTest.testGetNeighbours(GridTest.java:18)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
+ at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
+ at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:118)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:93)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:88)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+ at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+ at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+</failure>
+ </testcase>
+ <testcase name="testCalculateNextState()" classname="model.GridTest" time="0.003">
+ <failure message="java.lang.NullPointerException: Cannot read field "isAlive" because the return value of "model.Grid.calculateNextState(int, int)" is null" type="java.lang.NullPointerException">java.lang.NullPointerException: Cannot read field "isAlive" because the return value of "model.Grid.calculateNextState(int, int)" is null
+ at model.GridTest.testCalculateNextState(GridTest.java:44)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
+ at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
+ at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+ at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
+ at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
+ at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:118)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:93)
+ at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:88)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:578)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+ at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+ at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
+ at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+ at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+</failure>
+ </testcase>
+ <system-out><![CDATA[]]></system-out>
+ <system-err><![CDATA[]]></system-err>
+</testsuite>
diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin
new file mode 100644
index 0000000..e69de29
diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx
new file mode 100644
index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d
GIT binary patch
literal 1
IcmZPo000310RR91
literal 0
HcmV?d00001
diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin
new file mode 100644
index 0000000000000000000000000000000000000000..16339129ef88f07efd0226dd65908fe19aa2f64f
GIT binary patch
literal 27520
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
ao-dP}F?zlX{80JPML462aPmj^A{+qTp$Dx1
literal 0
HcmV?d00001
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f79aee48987b7aa43f3a5d502f0437a6e8f11953
GIT binary patch
literal 20471
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
K%vcLPqYD7iH<oPx
literal 0
HcmV?d00001
diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9da8eebee6c0fabc053d1a0a7551e3762f5c62bd
GIT binary patch
literal 15975
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
XGqbR={b6Tl1vP*f7#P62y%`t)rNakg
literal 0
HcmV?d00001
diff --git a/out/production/classes/GameOfLifeApplication.class b/out/production/classes/GameOfLifeApplication.class
new file mode 100644
index 0000000000000000000000000000000000000000..39fe8d606e4e6e27fe8c9a70a2eeb048ef4d41d7
GIT binary patch
literal 3201
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
b49pA*85T1vV^|JO&WsEz7*;W?VUPp>cH9#C
literal 0
HcmV?d00001
diff --git a/out/production/classes/controller/Controller.class b/out/production/classes/controller/Controller.class
new file mode 100644
index 0000000000000000000000000000000000000000..a06a4fd312163e10361d653d8788da44287d6946
GIT binary patch
literal 2867
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
literal 0
HcmV?d00001
diff --git a/out/production/classes/controller/PersistentToggleGroup.class b/out/production/classes/controller/PersistentToggleGroup.class
new file mode 100644
index 0000000000000000000000000000000000000000..5ccef4da42dee9301d32078f998d43094c421149
GIT binary patch
literal 2668
zcmX^0Z`VEs1_lR)IxYq#24;2!79Ivx1~x_pg{;J~#Iy?i;^fr4RQ=@qypp2)9Q}~|
z^z@um_oDpL0!9Wlo6Nk-5<5l)W)00SE(Q(;PId+^9tLg(9!3TQsE(Y}BK?5WqT<Zr
zlGMBs6zyE;sZfDpMg~<4O&_R@$@w`ssmUdo`FX|q{z=8DMP-ReIjKIG#U<843=9l>
zJPiB{0*nlt`FYM6iFxU%DU1x>8a{;Vv&L#Z$W(|aAXaK#YLPWJgAju-JA()hgD8U-
zBZDGAS1~ehC#Iyp^fNMOX<+jSNFL25P@qXLNU}3X@i0g;$S^YKV6h8Rp9;hnMh2F=
z)QS>t=tpreNHECpFvv3~Ff#C`r<ORTq@<<<mnMO9GcpK416RMaBr``JBxcRcpv0ie
z&Y;4>pvs`e$iN4(86nNcz>!&!T9jClU&P2DhN9aODsIiqpuwQY&Y;D^pbc`n5W)nQ
z5=I90jKpHU)QS?2T3wJQ^%xmMV8-Pn=B4ZVCuOB3msqni7%(zOgN(qD<k%UE5OIMm
zO*)m9l;r1eGMF%!vNM?RFqkt~Ffz!Zn3$PYP+Fqzn_pU->ROhXSHj4^=j$ID>>3~B
z>f`Dd?CQeEAOVZIRFDFFu(FWKf>diE21W)e9tLX$8%74UjKsW@oK!}JBqEX>%s||3
zMx;z6OFh6=6j^gI7&6%LFxWFVFf#BZrlf#f<d&IJl3K*bU<OZVNIJpJh1rTE4l@yy
z>Npsjco>`+To@Sy(^E@=Q$hJHH3gD885!iEF@z&3thpH67~I(zJa`y98N3)71VDkT
zj})7X3~Z@|rHMJkj0~a>7b44AYesP~m@xS8F!+MX8TRD-yyDW_R7M6C=lqmZMh1SL
z%)C^;(%hufq7YEVXJioa$xlwq2}>->1o5GQEF~G4#f%I}gfl)P15Zw3Zc<93N?vNY
ziXkI|A;eK>75d0U4Jcbcau$dMDhi+(%~~^zk%6ZKT=GFu86$%-EP(MuD<cCNL=z)}
zEI#Gdj0|ka;F64yK@X;oIF~Up@CKJ8CTII57C?gq*{cSO46bmm;&CX<PKXlpTmtq!
zS1wYnktd*mk%22XzqBYh)h!d0OQf)t|9YTQ!^j}ul%HQxTvC)+;G0^Kk)Kk`&&H6#
z#gNL7#?Fw=!;ry{$;hAtQVK~znR#XT*{S+I;P~`SElEsEOfJbUs$^u~&PC>(f%qFm
z6T|{YHYir{$<NO&EwBcA1)?mtq$o2l9a#iw8$=@_UqO@;FA1>{zrm2&3B_dR#GIVq
z%#u`V0frEMR)!o<4V%lu5X=xFz>v?#AP(_jT7^DRCb!lM<7Z_k1Su`zVTfUf6<{b~
zWKe=D#S_Imo_TqxMb0^i#l@+`><s0M462}TCzwkZ8Q37%hMl1bst3gzkkEsK0W8?r
z8EP0A<Uq#bR?5i028kmE1qKcVCI%2-W?%rdP8b*&{1_M*+!&Y`7#SECM6|XuFludM
zVAtBkz{|j}lR=P)VIu<r0~3QksJ*}d(k0Bm!XUyR%%H#!z`(%31JTD2$PmQ9Aix9)
zQ>d967+4rs85kHGwYM>d&t$OC-o_xilR=S@!B=M|gE}L_Oa?WboeVmR3<ntW{d5m7
z7+SGNvTR~7){<n|#bC+6u#LfX`Ty(7{~rc9fEnxnDF!wM1_n_Eb_Ov96$WtzEd~h&
zD+XBx2L^etW3(7p7_=A!7(yAs7+4ro7{nOD86v=rc7!+(<Q#@bhA0L`hG+%`23`gh
zhCd7f><k*e7_^xLm_X4Cb$vXj4adO1AfT<ajlppngX>HNcAaeu-U!F=fen^q;AW6w
z;AfBlJ3s*}CIGh#;uKKG3NXYmfXoD0%gn&Y&%n%(01nthh9m|C1~CREhGYh2hAf6`
lhAc2EkD-8}n4y$`fkB9Yi9v#)jG=;slcAEKnxU3K5&+iX@&o_?
literal 0
HcmV?d00001
diff --git a/out/production/classes/model/Cell.class b/out/production/classes/model/Cell.class
new file mode 100644
index 0000000000000000000000000000000000000000..12da98014d76383a1f7cf2d81a9fdf8dfeca06fe
GIT binary patch
literal 1478
zcmX^0Z`VEs1_lQPZ!QKV24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00Sb_Nbc1}%`Hv<m&C)Wp1E{eq(Wg4CjtO8wx>+=84`h_(QzASVMC12;PZ
z4-W$`10N#;e{OzCYL32hYEDjYNn%MVBLj<ztD_4egP;$Zj5QYnJA(koRf3ERq8dIR
zE0Nu0tr^D2Aj}}b&LGOeAjTlh$iRg#fsui?7-T%m6^slDU;{AS3{zpv#URWe$-^MU
zAkE0Yk)B!tb)K+>CWgyEev;*3kYkW%WMI!McFf5vOJ!tWi~<><$itw-pv=f105bw+
z0V9Kwh9)6La5JbfsIfDs^Dt;I2r@Frfjo`d&5R5j#i=D>i8-aIAdOl)4B8Aj5Z8kR
z85u;NR-yzP7XufA9uI>)g8?H0TNy}qF<50ZhDSjvjd&Q08B7=%*z=20GV>C1z{$W9
z<W(~s26F}rh$En(C8B|0hGrNe17~n%dR}5lX;CU8gE4_Hu)#3F&YF>d#W_DEm63tp
zCo?bAuQWF)wJ0PpDJPYYLC7aRIWZ?Ju_zP7hYGTkWMmdIGVmZ7Wes+B6e9y?G9vA9
zm*l6X=cGa%&sUINT%4H%<rgzD2w{c@BLfdOVfn)XgVB?bK`amKBLB1iGy_bb!H+u%
zvHO-QIKQ+gIn^x_<U>wSX3+zs1O`P0VFo4!1_nk3AyATMU}UglU|?Wkuwr0iU<Bn~
z21W*J1_lO41{MZJ1_lOUt?dkqTDuw8BR4T{ZfD@%${@56tigtXfdQ29K_m+UH-jw$
z0|O643xgelJ=h941_!8dMhuK#IS#FD3=&%yWY)mV09nhxAcCZy1Fqkk!2+t^nSlxH
zY;LV>3<}yi8B~}U(48U2z{MaBHbxAh6lx3u12=;s10UD{QVh~i1I@vF1_oY`fjb#A
z85s^RaBV<yl?K>2h_85|#xXKDfrAPZNW}~+3@i)`4AMIobbUZR+s0sMtG&-oOIwB|
zLAJnX8-pprm0}F63=9kg3@i+W3_J`*4Ezkn3{ngxU@NpB#z3uLVGw6<W^iF(WZ+@o
zXK-b3V_;(7XW(IQXK-U+W?%%B4h&4-Skj03f>mn^gAlswZNNrDT+a$M8WPza42%q(
IV840+007A}z5oCK
literal 0
HcmV?d00001
diff --git a/out/production/classes/model/CellState.class b/out/production/classes/model/CellState.class
new file mode 100644
index 0000000000000000000000000000000000000000..32f92b742dbe574ec15c245f2e916eef17dc31c2
GIT binary patch
literal 1257
zcmX^0Z`VEs1_lQPS9S&_Mh5=e{FKxjedpAioZyngl2lFxMg|rh237_(Mg~?#AI~sX
zMg~D2G)2}RRUAAFoFG*!F0PI)AOUV31|9}pMh143Fh`$I*I-5lp=b=9TnzjS0_+UD
zJPd*iLW~To$vOFXsf-LF8k#;?iDilUIf;4c`u<5-smUeQTnr)%qU;P}JPhIt5{wLd
z2nDWrrMZj@>}82LrK$dDj0~n4NV=VK5{rwikpzNEiZb)kt&wd282~n4iibg(L57im
z%_cK1v&4>(K@8a_s7_DKFpvl3co^gv6c`!UGm9N_GRsmK85pBL;z~RW$_y$X&*bOi
z7cnwOf$dJK&@WC-%}doUNX*PD(RT*PS#vP3ax$nhXs|PA@-S$DG)aJbg-tCZ19On8
z3l{?;gAT}zx{M5l*qj!H+cM2C4hBw;bp|{Ph9J9G!#zAhTtP+}^Dvk&n1bR89EQc<
z7{H7zMg}&RJd1OFN-84*zfWdfs$XetQfg61Vp2{jBZDdyS7~CzJ0pXTPkwS@PFP}5
zCP*JtGfQ4#ZYoF)6bg{YhlV*L14~IpW-%iJXK-eEUSdgUQ7R*YoCaR+GBR-3B<DaQ
zl37DDjFCYZ96S({L6L5Q;W9gGMh33n{L-T2RJTl!hxp)`K@a3A2SWx%1`!4Z237}2
zP`+SbaF7J0d<F&vK~Q=C)5;7g3=9HNpbP*~$-v2A#$d|8$Y9REz@Wsy$N&Odn;5vZ
zG4LH=;NQT&z`)30!N9=42A1Ps;A9YIu!O2NVPFD_atSeN?O+f-z`zJn&xE4hih+TF
z2cn9>n!$#Ffq{uZnn9O=32b8w12Y3F0|SGQmbT1x21za1tqihSk}O*p6gPrZf@~II
zU}0cj;AdcC5MbbD5CmmM29T)=49p;%47LnxAV)I@f&B;(1NoAL!47POy#N;|2|?Yg
z2{w&^L6CJX17jrfCI;r<NR~|u?7<+Xqk5Ht!GXaMs?8H>iRNww#z-MmW|mD1YTFsK
zH#0DU1@u^$H!<jg1=x2m7;R?Y0=XYz93R-7oD6~tTntJK91KiQcR4XQgWcx>05MJb
AI{*Lx
literal 0
HcmV?d00001
diff --git a/out/production/classes/model/GameOfLife.class b/out/production/classes/model/GameOfLife.class
new file mode 100644
index 0000000000000000000000000000000000000000..e9b8c97f46565a6c2d615c148ae6323efbea151e
GIT binary patch
literal 3325
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
VW0=msz`(`8$S{Lp7Q-9{NdSN@8^Hho
literal 0
HcmV?d00001
diff --git a/out/production/classes/model/Grid.class b/out/production/classes/model/Grid.class
new file mode 100644
index 0000000000000000000000000000000000000000..e3ad503a3e7636a4415ff0ecadee7bcabf4cb3c3
GIT binary patch
literal 2537
zcmX^0Z`VEs1_lR)2rdRD24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3VP-29Z(9DVnq%oIijp1jiBq|_q+w4nU*Vnzl=
zPmp3h9tM7pN`9E6bAC=~ZeB4L0|$d34}%bcFe3wZa#3nxNvd;dPEIi+gMfx+bhHn|
zV33eC$QV%`1~CS4Mh4boh$22zCF~56j0{2$Js`(;mZTOXmgE<4F-R~-gS;lg$iS}w
zH58=4S~Cpf0y!QAc?JbW2LANa5<e8zGizvif>bE+Fermm2qCF}dV!rmoSi`p9ta?}
zaxthfFoU#d@-S#IXfrZ^w1pQX78InW1m%}|=B1=oFfy=cctQ-<<zdhRsS-_3ErF_n
zm<?9Q&S1dEAdKSC;F83WRBLtyBSr=xL`;Ewo0OBv$iS-M>8TmU$iU*9pOVVR!0(fp
zmkRM$NFrE)kWYScVoq3MQ6`8F6=W&N$Sh`L;6V-_Mh1>dXdp5&h-qm0fUPSn$;{CQ
zTUU}_WX;IH8JwA(msnC-l*-7Uf>n_X)KF09Sld~HA{(3lz&>PT;3$HJ3U6>pVsf@`
zVgb}u?CGf`AYGso;pwS~Yz`v>4=6fPGt)DY@{5WY8AL$-MslK0W^su%BZCqaVGIWe
zC+C;ul{n^PmZkb3OazCdCnJMUa$-($X-;BEs$XhF2{`;28AQS6LXsQEiC|%CMh0O_
z#l;}is0kXTnl~@C0_;Pu03!oWX+cV2Nh+9E3<`8CQ4fk-PLMvZDn<q|h@Oyqkn7x2
z^FYZyGd~ZMQF2lfix?RMiW2iu@^g`;L^Y5?DhMoX4KkMvqLh(A2veSs!2}|RR5Vy4
ziGb5YQcfyH=yC<;mlh?bx@CfrCnqTD>48!bgCYY50}}%ygCPSmgAk}NVPIeo0u>ct
zT8u%Qfq_AQfsuig!I*)O!GwW<Ar(|oF)%QQYi(y>)RNxHz^)~;m4R1FYa4^WRtAxc
z3=9lR45kbW3}Otd3=9mC3@i*%44e$o415eS3}Otj3}y@r3<?a)AR`#e87vq;Kpbo}
zBUp@|fd}j)O9m?jCa{&p49pB5InLb-5|LWl8KgGAEnx#osDlmV0kb)whFXKw*f21G
z3OA_Rw=l3UurM$%SZi%#kk#78pm>x)g~^B6RtCgh#GuM-2Nqq#AgV26B)gkIHF7(H
zdT<Lf<MRJ6TbLM^|G%jXvYHv}KRE_=1_lOg23`go25|;m21N!v23-bS24e;t21^D*
zu#>bHSQsQ3q!?@&co>)&_!+bq?7+TbV6cWdlb1mcRHQO6GT1XPFbFfS{AJ*0XHa4M
z!@$Y-i$U@i11kd~g9C#j)Cc|y%;2CC)Y`%zq9whJLBmK(W*dW!5y)MTaEAnm9oT+I
zI157UVqg#i+Ybs$L9m;c7??l>B-C&R1`wZtfkzq?9tj|#U=27JLGcMO*9mN{7y}an
z0|O7-Tpp;oOrU}kn`w$5(-bjGbHia8D7+XM7(ulH)HHnt5TAj8Rci|aJG!I%!Nx%1
zpB3sTMo@);MKdqD<_N5sofw><sn3Cd5gg=9jObw;2i6G*V<xDzpwthFV^A0~LBkl5
z6kQk?8C)6MpiY9D%8c%wWFk#vWN>HjKsOD;jTuCn=E>j%HO(EG4){SS0Fq7gnS8)W
zACkmCtrZ4_d<I^I0<iIr<iHON0$v6t25$xfaD@3V_(BZ@B_U9vVMLS=kQ7yhWCSDB
z2nGg520y3~{tO^>prS{c0VK}AfMG-j*a%4c!;D~L2q3I+0#=QI3_*k(JsYeM;%}IZ
XAjbtWgfK8NFfl-)Jd_~}oPELpU}3I~
literal 0
HcmV?d00001
diff --git a/out/production/classes/model/GridIterator.class b/out/production/classes/model/GridIterator.class
new file mode 100644
index 0000000000000000000000000000000000000000..59abad2932cbdcccbe5c9bf39db8c90383d2116d
GIT binary patch
literal 1098
zcmX^0Z`VEs1_lQPOD+Z`24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3VC-29Z(9DVnq%oNX()S|?a{31pMj-vc>&%Bh>
z3PuJ-Pml&a9tM7pYVPFxoYLGpupCHSkcUBtL70(&CA}y!g^_{B2Vt5u7lSB+7(0VF
z4}%1QBqIYCLW+?=C_S~ruQWF)wa7os8Ej-R*ma&DP0~CJG9VrNNQ#2;%ZovBay$(3
z3<``4?CGf`&Z#*$j0^%Ao}QXedqE=BTnroxN<0k83@VHaEP1IFC5#Mw8Yn8*8PpgV
zguvlcT9TQgkMKCZ2Gk@_cvx$OF*2|?=clAHGVuFk=A}Yh9Fmxnlgh{-<ddJAm=l&*
zlnLTP1zAcmGK(1*M378@8E(zUz@Cv<><4xbvxa6ABLi=6Nn&!gZ(;#dH(OC^acNEo
zA{@c~VP`OghaO0PkwHX5(+BK&q*%6QWZ(?WOwUU!DJ@E6WH7;001-j)unp9mAY-lV
ztQi@&g7Zs@l2hF>K|T}&1p>_ZdLRoK6d5=em>3utR2i5Vm_P}Lfq{Vulr$I^7=%Dc
zfq{X6g@J*Al|h|>kwJrjfgyr{iGhiMfk8xTI|HK@^Hv6S5W%aZy_G>=BUra40|SE?
z11kdq11|#$10Mq?13v>Fg8+jtgCK(zSPrb8L7PE`0R%+A_AoLqGUzhsL2U^KyNZE9
zNoxxOuhtd@fo%*Tix@<;wlJ_mcv6cP*jbh{urRM-U|?Wo0NKgLz{tSBAPTmF2h3K2
z+My5j0h59Q$P#4+6{sccU{5nJn1YOi8qK?nLDokLWGhPoNO&8ANWoUH6L@Da@M=YF
zVPI!T*vi1Jy#a17#II5e0u0g&N(?d#nhdfG#tiaccZh+*$`tAj0R~kD0|r9|Mh1|J
zI2aiJFc`Bl7zsEsC^MKq9i`6zawG!-tJXFKMUW*-NS@;W8w&9pE7VXX22*gbn=zP!
GX$t@tr_SgA
literal 0
HcmV?d00001
diff --git a/out/production/classes/view/MatrixPane.class b/out/production/classes/view/MatrixPane.class
new file mode 100644
index 0000000000000000000000000000000000000000..7b342e2cc4473b954ec3d2a1ee361ee7f7bafdb6
GIT binary patch
literal 3554
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
DY>ADr
literal 0
HcmV?d00001
diff --git a/out/production/resources/view/style.css b/out/production/resources/view/style.css
new file mode 100644
index 0000000..f518257
--- /dev/null
+++ b/out/production/resources/view/style.css
@@ -0,0 +1,37 @@
+.root {
+ -fx-focus-color: transparent;
+ -fx-font-size: 13px;
+}
+
+.background {
+ -fx-background-color: #1d1d1d;
+}
+
+.separator .line {
+ -fx-border-color: #fff;
+}
+
+.button {
+ -fx-background-color: derive(#1d1d1d, 20%);
+ -fx-text-fill: #fff;
+}
+
+.button:hover,
+.button:selected {
+ -fx-background-color: #fff;
+ -fx-background-insets: 0 0 -1px 0, 0, 1px, 2px;
+ -fx-background-radius: 5px, 5px, 4px, 3px;
+ -fx-text-fill: derive(#1d1d1d, 20%);
+}
+
+.label {
+ -fx-text-fill: #fff;
+}
+
+.cell-pane {
+ -fx-background-color: derive(#1d1d1d, 20%);
+}
+
+.alive {
+ -fx-background-color: #fff;
+}
diff --git a/out/production/resources/view/view.fxml b/out/production/resources/view/view.fxml
new file mode 100644
index 0000000..fcd70d9
--- /dev/null
+++ b/out/production/resources/view/view.fxml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.Separator?>
+<?import javafx.scene.control.ToggleButton?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.GridPane?>
+<?import javafx.scene.layout.HBox?>
+
+<?import view.MatrixPane?>
+<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+ styleClass="background" stylesheets="@style.css"
+ xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"
+ fx:controller="controller.Controller">
+ <padding>
+ <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
+ </padding>
+ <children>
+ <HBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0"
+ prefWidth="980.0" spacing="10.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
+ AnchorPane.topAnchor="0.0">
+ <children>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ <ToggleButton fx:id="playToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#playToggleButtonAction" prefHeight="24.0"
+ prefWidth="62.0" styleClass="button" text="Play"/>
+ <ToggleButton fx:id="pauseToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0"
+ prefWidth="71.0" styleClass="button" text="Pause"/>
+ <Button fx:id="resetButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#resetButtonAction" prefHeight="24.0" prefWidth="70.0"
+ text="Reset"/>
+ <Button fx:id="clearButton" maxHeight="-Infinity" maxWidth="-Infinity"
+ mnemonicParsing="false" onAction="#clearButtonAction" prefHeight="24.0" prefWidth="70.0"
+ text="Clear"/>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ <Label maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="103.0"
+ text="Generation"/>
+ <Label fx:id="generationNumberLabel" alignment="CENTER_RIGHT" contentDisplay="TEXT_ONLY"
+ maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="99.0"/>
+ <Separator maxHeight="-Infinity" maxWidth="-Infinity" orientation="VERTICAL"
+ prefHeight="24.0" prefWidth="6.0"/>
+ </children>
+ </HBox>
+ <MatrixPane fx:id="matrixPane" alignment="CENTER" hgap="1.0"
+ maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="600.0" prefWidth="980.0" vgap="1.0"
+ AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
+ AnchorPane.topAnchor="35.0"/>
+ </children>
+</AnchorPane>
diff --git a/out/test/classes/model/GridTest.class b/out/test/classes/model/GridTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..7365dfb3e106e86a584f743eca1c4205590d6f00
GIT binary patch
literal 2293
zcmX^0Z`VEs1_lR)3@!#H24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00Sb_Nbc2Cm%vl++x3_oB=cE(Uf6E|6YsMg~?5PfyJ-P6l2EK6VCv9tHsh
zK}H5XgxZkQ;u1y%mh_^`6h;OfAB2Q8$P{571`!5PMh2er)Dpkc%=C<;{Gwt;1`&{<
zK44dsmSpDW`(zfESaUImGf1#ANb)d9F-S8q$mbWO>n9c$rxulD=_ltGrRpaZWa>MD
z1v2yViWwQWAhIDDi6x8-#v176Y5HI_0c01%6l*R9Sq3?F26-L^1qMZ2HX_tBGH_-V
z`{kGTmFDCyGH7eyu)r~?xTGjCxdfpRY>_e#g9?KxBLjOzVsUV0RVpKcfrcjmBRoq|
zixQJ^Qlai;XHbX7lXGfL4k&~*c^I@9v>6%L(^E@8VvGy|;J}4M1V{vIyDkrd9)mt3
zgJg1kUP)qRUa@OMVsc4NrDvXFUZsCgN@@`!gOf%yBn**KiZy921i8qNhrx)!n2|v^
zIlnZo#4#tcEEOs0!Rg5p6xXJph&E$n&?g)Wc_pdosYTFG;9{^~uw-Yj;$g66Fk@uU
z!Wzr4Nbp3~3XVY6!qUW?kbF)CTLwFJ274X`2L?w*27W|%1(zh2q%tzFI{J8qxiT^c
zLen%TD8W+JTnuUq&O8h*46cj}9L1?6U{O$_#!#sl1_}^&9tIBvPeulz<iwoh(wxMS
zRKL^;m@ZMY*a9174RW0~4}%YbFCzncW-&Mr85tO(K;h;O3bz1IxJ40&9H;#JoYcfT
zc(?^I1hX@Q@Gyijgb@li6s=%4xFzNkr!q3=5lZ$bI<2`Ff*2xr7$QM7vSk*B6qTkj
zGO#%3r=&76@cU%urTUfTCZ!gIfKoXlgOE>ta$-(cVo@fD4;5r7$;d2bWDtOcE~tP4
z6*|_841Az6EHg1DvnmxN%E%xYRGL?knVTAxS)2*VHhFpZC5a`F(n1Mb9AuT|WtQk?
zl@?@{q!xio6sOd*{GwFX#N-TXMh3x>)Z!9%cv)2nDy(F1XoNaK0;I(mJ*k6rih-rD
zL^@Y+erZv1s#|7GDkB3g$n7A*^gsn7gCYYj0}}%S10w?ysIX;VU|?ln1eN0qj0{l>
z3=H}Vj0}t*QLXI^j2jsk7?>EM85kJYz=9kMF$@e0JYY5}Lo7oa*r0d@HU=iJW;?K9
z3=9HVyBXLc1=s}Gwli>UW#B=W1FAY07<d`@8TgRQ5`dbO0JSL*Y;F?V+%F95U^{1N
zZDHVHVcEtYw1Yux8-q+ZGGBmW8-o&>$X*7uNM?{CX69`S8o`k)U^WYw%?f6-g4t{!
zHVZ@zJD3d-=K!%;A>smHMXV6b0$^3FU{%`~bixrnG-KdpU|<kp5MU5yP+|~aux1ct
zaAy!>2xbsxh-Z*s$YzjaC})sjXkn0Mn8+Z*FqJ`+VJ3qtQfSOV3yoxOXr#bHqnd#k
z92$-w$ALn_U<ZQ<^EL)^u;;;U+QeY9jll^d5B4~M3scStQjT!67y~N<1A`)iAcGQv
z0)sMxK7$H_1A{7(qa3k1Di!Xi15ig*fh+}wB&wwvNL)~;A-EtHx@}?b+QHzrjUf>1
z2atYrA(m|naG`LpDo|7)2_bx=#K6J8z@W*%&!EL1$Dqxi%b>&Hz@W<z%%I1R#-Pto
R$zXuwvns4UO9LnUbO3OUDTV+5
literal 0
HcmV?d00001
--
GitLab