From d2e5f4809ce0011350dfae93c22908d77002f6d0 Mon Sep 17 00:00:00 2001 From: Graden <101433010+GramGra07@users.noreply.github.com> Date: Sat, 12 Oct 2024 00:16:23 -0600 Subject: [PATCH] add Sequential and Parallel --- .gradle/7.5/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/7.5/checksums/md5-checksums.bin | Bin 25047 -> 25147 bytes .gradle/7.5/checksums/sha1-checksums.bin | Bin 39827 -> 45821 bytes .../7.5/executionHistory/executionHistory.bin | Bin 2789126 -> 2828319 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.5/fileHashes/fileHashes.bin | Bin 138433 -> 140933 bytes .gradle/7.5/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.5/fileHashes/resourceHashesCache.bin | Bin 19041 -> 23461 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 91817 -> 95147 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes RunAll.run.xml | 14 + build.gradle | 6 +- .../debugUnitTest/R.jar | Bin 348175 -> 346689 bytes .../debug/classes.jar | Bin 94196 -> 142463 bytes .../compile-file-map.properties | 2 +- .../debug/packageDebugResources/merger.xml | 2 +- .../ParallelRunSM$Builder.class | Bin 0 -> 5903 bytes .../statemachineftc/ParallelRunSM.class | Bin 0 -> 4570 bytes .../SequentialRunSM$Builder.class | Bin 0 -> 5729 bytes .../statemachineftc/SequentialRunSM.class | Bin 0 -> 5111 bytes .../tests/ParallelRunSMTestCases$States.class | Bin 0 -> 1332 bytes .../tests/ParallelRunSMTestCases.class | Bin 0 -> 10855 bytes .../SequentialRunSMTestCases$States.class | Bin 0 -> 1295 bytes .../tests/SequentialRunSMTestCases.class | Bin 0 -> 12083 bytes .../classes/tests/StateMachineTestCases.class | Bin 57676 -> 57677 bytes .../statemachineftc/BuildConfig.class | Bin 519 -> 0 bytes .../statemachineftc/StateChangeCallback.class | Bin 258 -> 0 bytes .../StateMachine$Builder.class | Bin 7123 -> 0 bytes .../statemachineftc/StateMachine.class | Bin 6210 -> 0 bytes .../examples/StateMachineLocal$state.class | Bin 1495 -> 0 bytes .../examples/StateMachineLocal.class | Bin 3637 -> 0 bytes .../StateMachineAbstracted$state.class | Bin 1612 -> 0 bytes .../abstracted/StateMachineAbstracted.class | Bin 1458 -> 0 bytes .../examples/abstracted/abstractedSM.class | Bin 3521 -> 0 bytes .../StateMachineTestCases$LargeStates.class | Bin 6471 -> 0 bytes .../tests/StateMachineTestCases$States.class | Bin 1378 -> 0 bytes .../classes/tests/StateMachineTestCases.class | Bin 57676 -> 0 bytes .../manifest-merger-blame-debug-report.txt | 4 +- .../logs/manifest-merger-debug-report.txt | 36 +-- .../previous-compilation-data.bin | Bin 3942 -> 4591 bytes .../statemachineftc/ParallelRunSM.java | 153 ++++++++++ .../statemachineftc/SequentialRunSM.java | 198 ++++++++++++ .../java/tests/ParallelRunSMTestCases.java | 281 ++++++++++++++++++ .../java/tests/SequentialRunSMTestCases.java | 274 +++++++++++++++++ .../java/tests/StateMachineTestCases.java | 4 +- 46 files changed, 948 insertions(+), 26 deletions(-) create mode 100644 RunAll.run.xml create mode 100644 build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/ParallelRunSM$Builder.class create mode 100644 build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/ParallelRunSM.class create mode 100644 build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/SequentialRunSM$Builder.class create mode 100644 build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/SequentialRunSM.class create mode 100644 build/intermediates/javac/debug/classes/tests/ParallelRunSMTestCases$States.class create mode 100644 build/intermediates/javac/debug/classes/tests/ParallelRunSMTestCases.class create mode 100644 build/intermediates/javac/debug/classes/tests/SequentialRunSMTestCases$States.class create mode 100644 build/intermediates/javac/debug/classes/tests/SequentialRunSMTestCases.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/BuildConfig.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateChangeCallback.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateMachine$Builder.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateMachine.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/StateMachineLocal$state.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/StateMachineLocal.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/abstracted/StateMachineAbstracted$state.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/abstracted/StateMachineAbstracted.class delete mode 100644 build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/abstracted/abstractedSM.class delete mode 100644 build/intermediates/javac/release/classes/tests/StateMachineTestCases$LargeStates.class delete mode 100644 build/intermediates/javac/release/classes/tests/StateMachineTestCases$States.class delete mode 100644 build/intermediates/javac/release/classes/tests/StateMachineTestCases.class create mode 100644 src/main/java/org/gentrifiedApps/statemachineftc/ParallelRunSM.java create mode 100644 src/main/java/org/gentrifiedApps/statemachineftc/SequentialRunSM.java create mode 100644 src/main/java/tests/ParallelRunSMTestCases.java create mode 100644 src/main/java/tests/SequentialRunSMTestCases.java diff --git a/.gradle/7.5/checksums/checksums.lock b/.gradle/7.5/checksums/checksums.lock index 2ad1ff14a6e241a91dfe34569eaab52972f80a7b..81c3512d81cf2767cb60ffd6c0856b9c352fa4c6 100644 GIT binary patch literal 17 VcmZRco*Iz-<;C0U3}C=C9{@l~1^fU2 literal 17 VcmZRco*Iz-<;C0U3}C>d1^_?N1%m(p diff --git a/.gradle/7.5/checksums/md5-checksums.bin b/.gradle/7.5/checksums/md5-checksums.bin index d7323fc655fdf05cbde7608d0481446ab8b238d4..82309b375296d79f3d16c79bc76245f35477ea89 100644 GIT binary patch delta 161 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 CZJ9Ix diff --git a/.gradle/7.5/executionHistory/executionHistory.bin b/.gradle/7.5/executionHistory/executionHistory.bin index ec6b3fb31bf8b33c8cbdf383df2013237a0b2127..a6d789a8ad029858e2764d0dbdcd30d9324d58e2 100644 GIT binary patch delta 11364 zcmeG?2~<;8)42}_0rD_}eUmk^2x!6*RFtAsu_^{pM5{;)!G(Pn6+x{_QDk}I*rL^{ zEtJ|S#){Tjg)Um_hV^UJelFOmt+?X$NwI!6H-s#pw*G(5>HnW{&KzFm&UR+e2F2>in^=_MN74~-a$kDfE=+n+W1q3_y`gx7Lig?3H zW~}`!DrzG$*umcsg^W;>-LjiA`Y_#8NXS^p7n!9FdDQrg%o7KH1K)~zg}XXY{K z(Fd7z^K3ck`DrQX(!^}2&)^3$r>5B(AQ5fkh$us)f}_l$B@dX=SWD*Va#QAZoRMPL!~`23 zbO^5L(2RAxw&Rkd?_P-YFE{hJ#^*WbL< zuGV%MgqJK`n4+CA46n*sF(j?mVK?j3ES7axb+R-#DMdOjFfTY!HYa0lK~`{HQeJRw zP;Mr3tI{8KoactZtyoT*8A2;$Dbnn0dA2nmk(riaR4(nwsd1U`8uaR9B<~%g7`b#7I~++4iNqmcafe%jCX~Nv~3(C z{oKan)vmxQ)%BA|v!p30@|5wpX)$9xhvv>sNt9;=kPR8|_9t_SojSgLv!3awZ}R!M z86AK|5%O?+4imH-Li$R)bm-N>y?^i3N-u@@32cF@>FN{VsDTK#?131f_vs6j^_OSn z%F}XYOM5ommhrmTw(~YyexvlJ#dQi~C1)CB$y4xp8jP<>wwB766 z1(vAJ%G-F~FMg2*g_ax9HkD|-fT^s{%I?uA#^ZGT-(`u~{vEp+*idPozIl1ExH8Kek@UJU{>C_2lvf@9iifbZNP7QDWh(t+XmQwDx5 zd9?ccr%U6YF_5p7DryP-kRaojfXj7V>4D(#7z=ip$+2)_@dkhBlAdZaE}yZjEG@B5 z{^;}jkMKkC=^2jlp=>=0EM^$$iq>U6y=>m5(hT7-{j{nr$8lsHoSlEo{P8`+dYz^yd=qM1dv4BNys?8+C$!vOxMjOLFX$7~3 z)59Um7}KJWT2|P=!C*Q@qm0mYjKGGC;b7Xz0`pFVi;r7c!-)`D4x+QR+PI7M^eEUN z#>9;W)D~~P=4K81M`4Y>o8X1ELLDiaTXA(-p#6Wuz~4O^hk&rfEP3y#S7N3 z-4$>2Ju|$Zap7hszBMcuhb`^L)!}FwWM~aLqUor$gD_stC=;5F)AAOfE%(G~f21+7 zCJtn~@nJX)8W#}PZWGYsf!#~n6ymc56Yy@!F&=q7Bcmd}&$+%l8X}LiuNtsC# z!D2qAGcE*&lV~j1TG1BJHea1x>P#92Wv}7|lx(P%PSdq~qt2v}ux&Ud?()1konm{) zq*q{}9j28Qbf%a(ov?K?k#^SLOd1c>_L#P@PA55VI!);r*DbqZ^@EEuE*9!%s?(dq z5GR}DZ-wig^Kn{%P^bHJjlV&i=@WazX@aOu{OMZqo{#H(a}0+uo;WC)=ZX3biPOq2 z_02IBW(hE{Cba51M5eJ+eRIV2gt|GA7Qhc)w5EY!GPe(9KCbl#xp#MLFW^q1g~0aF zUc%37CZWy_HcX<2!23NcNtw&rJ5z7G$jh1uUo%=MT^oh_cvvx+=EKas+Mvq_`SWWWW?G(-xk=_hUYu#Dhf^lvdGIo)wjNV}*I#5X8Ls zriO*7pX>>}Lv4+j?{u-Bqedokl#QlesyJ-u!F)W$xCi`jCbT59i;_{MOwsGFGryN; z^e9c}3m5B*j2N$}e(?HbL(LjtsGd5)=92xCn~~qS(Z2i5&5LFk?A=;QT;#SYz&82N z+h0vv@!^Q1zE`F>-n-$njVwK3!lnrstkFsFhb!%sDDCqDSWmuBVgiBm?4N9mp zVUADpVLVFp6o<#V3BOkc_6dduN_cSq#zI9bN5D8TcmGiG<3p^U#v0Wv*o)bg#viR6lYbL(uvC` z2G!Xxrxxmz>nbwa>Wy35!LyQ|L-3?WLW z&Jf8{W{PH{XU~z&O-jxW5+}_GlBLcnNT1y~ml?@Yz@>r68A8RVPeXMF8fny}1=Q1^ zVQ`}7DG?-%Mebm1K)H7@sZTd%P&F7?!sS)!W|rD%UIFJh(LC3!u|omfd2l{jM)Kmq*(^MCsQ9pIQ(|5X1@Ir zgCimPswl0dha3VD%&Fnb?IV_uWoOrEcGgf-0d8TPmVl_-X(_BSp?tbI!3o|Ks+sWq z%RtiCQfvRr&|`0FZ~YYCeT&wvXKb{s)NB~2Gj4Cb#ExBbcg(wKeeywbiBs}V&fmV` zwCMg1J?s~Eo_zJ@+8BPB?p~KbuTVFBL%?guoqERj@VN=|Dl&oko7z*3%tHbR6rbSQ zgR>PS)f@JZ#e;sfKHxnL$(5ax=0*Y4;&)t2D1L<4@YI@`2+>)5Z3-J|l$Y-G0S7)$ zYQS5a-COZ+f8ohtt9Ol*4gS#+?IEKg%N~fKdA*KS8)`e$$LpcSD(6BRct0AAf#$hL z*9HN&+EK<)y0W{*8J!kQ&n(QAogCem?>%9Q#5ma!ZGFKMWVM~GQ&-YKrVT~ZBx_K( z*%%Keqw$TCu}{DQyBHLSnsm!L=JMq8e!5^7Q)hg>Ceh9Lz^3+yzUOs`luZkmPe21e z?4Ug_Rt`L1jRQ3Z&QCx*&ZWccxYVpRf@=;`m}%=F<*!CZv<2!v61c-SM~ZKHogj~L z(FSOoft+ADMzU2%*yu=&F#UxP{9uOGLF0E^TVOk3f?o*|dOJ}zv)|F1Jn0TcSv>s- zV`W?Ae`-W6erT;8qiXoX;_1%}RSb{3AR-p|oBoTaUQD5CkWS|~z#B??uBhx;??ib| zzDll}`Wvu#mpJ=(hi+bY89#)lOF0(!r923Hk0eirf5CXe(uZ z3YyL&`wTvGU~07tqrRN>$&%%J?9MCFcE8eElXd`FovBwec_{2ng~9wd6aw${*2*8; zayY}q-jo?Uj6)(x!`=N$bF8OMT@kSNjXMM1Ni8MjUUXGfwm!pfW%JI*kgkO40$E;e zaQ^JPd3lMc8M5pwQSO}F{M_^cDSod*{v!XWZ2wd?^}tMB$^YugX7-m>HmOH1?L!@Y za!2;jc`wjeM>e;etVy0CS_-7`f)BWSdnyusmjr~O+L%jjCIgGN^sV@q_*)jZo& z)%zQhu|x4%7d=s(id-$o)~r9&G+1;@!k(Gsu3qs(kvbHjUz7D;SUx5C$^y_D9X54E z)_(tIrZ_`Z4y1bR$dXe=b6>U z73TZb3@O}B_|}g3!#&15;_;X1F;v;sQ;%_l$W-+hs%yO-;}=4p>M>Hq|M_Wc)iFh5 zS>*S-cbt@B*O?4*XlyMV*?#=3W0#IJjz0WSJ;pm}=RRvHN;z9RCnqhk!Z^F0c;>9T zvd8dVfO`zz%NWjK2!76|2Aw^|r2l!3VOByymLbiVW%i60g{q@8da83q9-NvY%}tZd zl4tc3280F(`^m&&xpYQIh%87JBu^S3lF376B#MOMU}>;0G)OEKCM5|I`zI#$o0FS1 zJI6mGMVgb8o|Wpa7UNIEs1C*Z_5~jG349nP8{f1DzKU5wX`Rn0h1(jwv1j8>`^D#H z4!UvsjN`i>UePAd9N;yFe|JCg3X7KO)A{4}j;~qUc6oK0c->;Ehe?3uy!&@M;QLh~ z3-qiIIq63yS?$*U_2}?^kY5eWLRLTLdl!y<dG;;_XiZUo) zZLT+m&^Z48(V*dQmwN`Tdm-TA;A9-yjpX%%~eNnHb|LxWe!gp=LAMVwTlbm^(UhM?o z?5S5he$9m zeM-m4&Y(X_f{X}a9O4qvOHYDQ`n(4V>LCQBm!1myZt4#{9Dcvw_XnrE`i?$)@s`ep zb%KgiCQ8xb>@DTQ9GW1n)%I>F*^>L zUn&7A?74_KdndGHq_+r3Zy}UoO~>WA_wEJ%>0jEd%XyDSrM;k^lwE!Fw9GRWmOpd! zmCS!|P1XC+=KiB!ZVQ_#0j2de9y3`42g4y=VXc diff --git a/.gradle/7.5/executionHistory/executionHistory.lock b/.gradle/7.5/executionHistory/executionHistory.lock index 24a0c2b5e21d3fd47873634d5a76a8872a18b0e2..9bc67d4c338d1e2cd279f42d1168897551633178 100644 GIT binary patch literal 17 VcmZP$-?DYdmZJ^l8Nh&<7XUxI1wa4* literal 17 UcmZP$-?DYdmZJ^l86Y4606+i*hyVZp diff --git a/.gradle/7.5/fileHashes/fileHashes.bin b/.gradle/7.5/fileHashes/fileHashes.bin index dd3df14e2528719f10f5d915626509eb9e90c873..0680dadaaef73f2d1f4f27eef0c56d0661a488e4 100644 GIT binary patch delta 2473 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 diff --git a/.gradle/7.5/fileHashes/fileHashes.lock b/.gradle/7.5/fileHashes/fileHashes.lock index 456a9ddcf789d5b326747a3848e6e7a97f5d7d7c..860331c76e90e5998b58f7a3b628d93a06ed7e0e 100644 GIT binary patch literal 17 VcmZR+l)kXH?*5s#3}C=@9{@xl25JBR literal 17 VcmZR+l)kXH?*5s#3}C>z002YS1||Ri diff --git a/.gradle/7.5/fileHashes/resourceHashesCache.bin b/.gradle/7.5/fileHashes/resourceHashesCache.bin index a467f1a8608645e06b25e7790064c6dce1895eda..24ab66a17de994f8c970da3ccbacd45dfc7e1d4e 100644 GIT binary patch literal 23461 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 delta 103 zcmZ3wo$=um#tkMCf&vW_!}{z*-WW50ftUT{qml}feWfKP=gLS-j+K>|d=-dUHG y1>(8#5|f_-@mmFn$*#&0lS_fPRz+g+S0FyCs>H-Naiii7@r?!@Vw)X36qo?gwIUk; diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index d0fdeacf692e87f4d50687f8a0a98e7c387f8cc0..78e846f23e2e8936c2b2634267c1eb4a0115cef5 100644 GIT binary patch literal 17 VcmZR+`~LTaqU7^O7{EaA1^`S<2Fw5e literal 17 VcmZR+`~LTaqU7^O7{Gw%8URc{2E_mX diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index cdc500f5d3c8f2ce9633caa7016d40c0f030ed5d..cab8d2a892655c7185a55ea0c5fb98693700a407 100644 GIT binary patch delta 4128 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 delta 997 zcmX|;TTEP46oy#`xk%FpO@%YHz)(OsLz#2Vv`%5HAhhWm+61V^Hat+Ei8ke-7Zc;a zL#utjqz`uV4=#ci3RW4Yp@m&JLPZcwr9`c*u>lh$j>d_azyQ|DZE&{_?&N>id##oI zukXJUj_dv=?#d38c8e#}S4n(pD^ZZUxe)`KO{Au4s7Y_cOuC7Rj8QzEIf`he3YT5O zOZIM5WKD|VEro>Fvm@`nl@p8JyZ{bvjo`4uFJ>J6Sez~hqS#f30hfy3rBXE&d$n5p zpxF?w2gP+gS;36kFHUc-B(b`qh*06tM2p9vh&zQ2iqEKyiFxjO9A9dMXW77+Q!Ds~YaC+K>>{Q7Oey6<#v{~hz- zJYR#pcYZ<7yFoO(7lgAtfZOeUG+od!CY96?5d9sQB>w0;MmT%XMCf8r41G{YBB^U9 zp*r}6P`W=+aQo7v82d;P*wAa@TyGi%d+UY!aw{QpB~7IC9UwII2jCS!EQtU*uNwI4 zswUhYSCMENIH|xp=*Pt1EN%@o;>a~!^ju3I-1yXlW7xop!zwz5yHNkxQhdg#n3(+? z+~FiU&pD}_pUI~*?#m||hw@3|>TU9EXdCIQ6v#q(0U112Kq}7{P#rh8$j?hI*_^LY zs&z`Ev&8ERa`7>P4AC(1m_apYj`)RZPG)ds-o*60j=Tj8%?pOOxiC(+d{-0y+^tq{ z^xs(=Uo?cZSV_oOj^N;m4X>>PWg0KbBjWbz?} zB35lI*$F@I(s}wJ={YZsf*g*cSt~w)4iKM6Bpn$gDu)wEg{LHq4?j$e=q(BGbdnqo zucM=6y|A9XQ@A3T%8|M!V%gU@)s#i8#AVs?-kB{)xpT<0-pr8}yC!lemP1=*rOY8cDozS;k5dAd zAxv2k{W#s{9QYrx&#Km_?E&5MXc+PFq9GS7byK+rjU + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 3543ae7..36ef647 100644 --- a/build.gradle +++ b/build.gradle @@ -69,8 +69,10 @@ repositories { } dependencies { - implementation 'org.junit.jupiter:junit-jupiter:5.8.1' - implementation 'org.firstinspires.ftc:RobotCore:9.0.1' + implementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + implementation 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + implementation 'org.junit.platform:junit-platform-launcher:1.8.1' + implementation 'org.firstinspires.ftc:RobotCore:10.1.0' } afterEvaluate { diff --git a/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debugUnitTest/R.jar b/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debugUnitTest/R.jar index 786d516867fc631a1347cb02196b3c018710b6d0..2bf7cfe97520507e84f81aa6f6a234993bb408e4 100644 GIT binary patch delta 13631 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 delta 14328 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 delta 364 zcmex=gX7D6)(!8NHct*`Oxxb9#AqeY+rq!o*5@Gu0|+ZlpP9<}oDsl@l9b-BUlmW_ZXM4ri zW;NYFjY(?yG8HEE$sbaLr?;pv88F$fOjlHAGMs#&jAQzHkU*9KNFb5vzs2N*;i}UW zG?=6&Z|Gy2eo`GMX=@J?^kTZ~3t~^+u*_h3kUEptWY3iXJYd^^#J0w1Ay8SZ=}wwJ zojaqTe38ikt9T~wU(Ysuzb2EwbVY3@DW-=R(QB$nX3}CRZUS-SrZ;3UvP~Dz zViJ=<2@04MU|Xa+Kx$>DbL%h}FfYqwoP4lXMK(w;IVZ8WIKZ2g4WyVC2qRe;7+SL! Gfjj`CziK7` diff --git a/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties index e7d3560..3afc687 100644 --- a/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +++ b/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties @@ -1 +1 @@ -#Tue Apr 02 21:32:58 MDT 2024 +#Fri Oct 11 22:12:12 MDT 2024 diff --git a/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/build/intermediates/incremental/debug/packageDebugResources/merger.xml index 34484f8..ccdbe87 100644 --- a/build/intermediates/incremental/debug/packageDebugResources/merger.xml +++ b/build/intermediates/incremental/debug/packageDebugResources/merger.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/ParallelRunSM$Builder.class b/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/ParallelRunSM$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..aaf45f1f600f2dbd11b91e5b05bbf931f3567c46 GIT binary patch literal 5903 zcmcIo`Fj)B6+KTj9w86dEG9S<7{E@vB{qfzf{3XxCK$}p*fF)!hK!^^9vICinvsjs zw4rU5=S|x<@1+ON=mp)f z4C|?)J$16{aM83fMnORF%$(sAJ%L@57xV>vu;`iA;AqPA3VPZ*spq?<%v|0w#;JTU zDecBptVTkh&9OOX6vmufPPa2IMTi!MnKWH5nZQPLDA=Up0c_^HAAqIX*}>DP3r3nj zwH!2U(;E?J>gk=4-an{f3qB&S!S$Rxv9L`$J7K4-V#de_hzSMTI2l2rP|z2pu>`hC zTRQ~SRc4Rr?mQz+Kto3>y3noQAr%j!hXGfl8Z8PY_AO)nxCSfj27P7@0b31-1ZR90NaSRA-oRay~bgN+KnMIB0x}KXrFCLX(4E~pmDKf*( zCVOY3le<+6OAnj$OeT)KWnCG^a5dZU0%fgu4Eq%9SMfLw2&}1u!+^OsFFCWnP9Swc zs~uWT9v@Wk1elsNj_n6CHqXo%0#|w_SIXyPgdw%0>TN`C#Fa4?OiE8*Oe*-8z>W$6 zw<(VV4&ktbe@x)v#*pz7GOpq%o@6bW?szWmE&6Poi(^7yo9~XRrFC0oCS_=L(XuqB zpczt9!HF6^P8sCtah#NnoD%2^9r5dW%ps@zQX?0n)EN~Y$5R5$uK5C?XO&Dyikyk# zX_jcU@p*m0&@x39Xqwb>rQBH+pTI2FWeu{Sqi3SGHr0|y&q%pX3OrN?l{!n}cvfKF z1S{9nEzR|ro-4YZ=DVP4X{S&y+`MCF$Z9R@Lmc%RQ5??+^q-PEww+>jUV`O0j>aan zNL}TsFUh-cqy)B%vp;EUdSQdoe0#*(H9Q4u4MTU!$pq3kFO!fJc;X%?9rP_z#RXg> zN5YmaFx&{6tGa%&6*<@n9GMN)@RkarYl?+kp{Gt}6mZW78ld024m*xz=yn3n!&6a| zELKy&*ock%1xERP{Nia@N!KcjbK!ds4Mr1aVlZ&F;b+eg08dio6_>pq{+d=1&^lypwU; zTJVPi{)j&*__K<)@lMs{%d{7qi^kxjPbsd@&+|I$6nKnj%|+k-6{U5!C@^r0mtxCs zyCxmyVlf}yO#Ce-yp2WTs9HG99WyH4_+()6&TFHGx=^#c=S-QNk!;82HU-xbyeBWI z_z~XXX>P){dB?YO*EM)BP{I!f3U2WDRcUgOJQAVECj$k46X^B@{n)F5sfI|wd%W=6 zS(G>W08i|olN))9Y~hoi2_WzS-(vU-|M-2P{Qe@}`30i<{#m~BBwc?09N+mxz+cOc zDdq8(d>#C*z>&+Gwa~<0fY!H+4Sh{Z=-a|K-s_xdqCj`Wy*ESm_Jr;!{R21f(WW~7jnKbC z^lucqaM<@x3zU`p>kj>+0elnRqS1<{-INMEl~Q#)y+TjFjqik>en?29r{jII*U;Jg zoXp|>hV&Yg{=R{mNCIIH150R)AiWI=l^!Kuo@6A)$jsvyzzK}t490l9miZ2%8ZSpR zUXE%UualiYR28WpDk&wSqRW($%ndWKBh18iIr%+&KZs8Zk#I7;tEA(h+5UlLj4naQ z5dT4n@^J%4M43CsWO8od_^g~+#^iOJ4rHbTei9~dx|BdU({uwfF=8+m!#~6MPlfZH z&7~FR!jaaJi0%*ELVA{kV=Q5ws^%*+l>`Nz=KmRjbQXP>!x21#Q+O5`oP!M=3rMjL zG6ciG6=d-i<|Ck9ErWU$KVWncuB$}i%@EX})TERIRRS1Ci?({#_I2$cia%_R$!5ou zmpPl~I$3U=EHz8u13Z5n?i*00-%amg;jFCipvKnva8IHQC)p=XN9wDy>{O?p-=Mw% zSL9sD6;{>e_Beh_!~^Ste98z`NyH^gF~6E+Ujll33xSqZ_^Iq2T>LYJTf4ZmvBf{f zFX}8-8e9BJ{Ho4k(ZFH?7_{qO<2Qbgzs2wPl%f5ep#BAa<==IVJjk~gKO!u%g&xAY NxXI@&{2lM3^FMGxbu<6~ literal 0 HcmV?d00001 diff --git a/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/ParallelRunSM.class b/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/ParallelRunSM.class new file mode 100644 index 0000000000000000000000000000000000000000..c6f461a824da81aa05f1c12314a5c4bcd2aa2ee2 GIT binary patch literal 4570 zcmb_f>t7Vt8Ga5d&ayiQqL2n6t~Uy6bP2JV3eg}TEegg0rIlXNVRwYl+1bs^tbrs= z8gpq<+vaAHYMS(3dvBA8rJGqhZcc5t`*dl{RPX;n65y~NT*HD+tSn1 zBQVl6a=n)NxW*u9wwSu-+qCI$n z(2g2;h3~^Uy3j4qm~)04-*g9a*{tDY$Y5g#pj<5>ZPRfpwpSqCE+O4_gCGq|d%kO= zeIB-D+{)%{lZf1T1v90i2e%1mzLhm|14r|k*1m}hm@DlKG{8F z&iQifXLNiPpA(2U91vJnwi+r(Wb?kVKWcc$DP*M|hK^~ZiE_r|*3NJ^f>Ktl6xGH^ z>8=&j9!2-yEDNJK$QnCsq>smu!HkYs$!|l>39X1RcE@xamp-pe&zkAuLsi)xM;4BT zoJ34-+bgsz%X|&@QzL4D!o5G2W8j<^^6+%{@&tW47@IWgf>}?&ozU?B=E#IfjFv!` zRxWjzqVy?E)5wy=2L*1b*bNk0s?IUYLyzK%0&Rm5J++*W^(w)9EETLh3AyM|9bdv@ zEVBkR=VS!7hiNZo!Lr0C9m5hbkH@8nCj@Tknkq?1`B{ZWEqqGHm+>@J=jVdS%k@z@ zE{3n*l!mYB_?pbiwaUk8?_@0s9un$4qP2o6sHAh zvR(`?;}s3x&~ZkFb7Li(S1Cj!j3PZ~&dZ&z>iDMI7Uhr%p@!G1LO#qoJY%{syoPV< z_zu1+GtUXus-zrdg&4PH9K$cTlyfQIOBZ7Q#6;iTK3=k+3dtOo!z;OUL%J?2UzzI- znOi2?{!q+Il2w}yhBjS=oGWb&Su3%jtVITM89LlJ!v5z_Av-(H+OQ`L z*OK3*!H7RAi)-&noUZDm$X#o-!TEgI=O6U+vXD}4>Eo1VIcV}eW4;vf8D7$=(5k*}q7q8#BFvO<-{|C=$UfT%XQ4nNsIg?qqlN^ztsbb~5^=x~Eu2 z=6d80dzx+i6MI5}m-k!1)85c%=}IHW@m#@8oA+2s_f@*xAqx@jhhfKIBWD|)XHx%K zsrqVopS9wOwTj+`8ZK<)br$D8B^saXsv+<_e%0Xn{A07Y^!)>Vv$;V^%H#MuEp1)p`v^AJDdOD%rP-&Ja`4L{+#9xT95A?JTy zHS!C7u_9j4oOZdnjun{$d%R!L8;R~!K5O_)B`+YBtX+VXj4VJTw_QZj0$Sy>Z2=wf zxoH8N@|j$~jyJd^@M9C*1!;<4Em5wc=}l`*i~Z1M9v>wc_<8zQP>8SipLB3a-cPg}zSi%S4bmH>3ic%Cf*7*qgApWtZg zB8CL`(z%EOf?k%fv?y7qQ5d}GO?ZxV<$3ht1p$@VEmQ3kOlRB;*=gdpQI{9aWYSq%T6Ak>y}?vMDB+V>v*%x5z#tl{5Z ND1(>rSNsk2{{uzWyV3vv literal 0 HcmV?d00001 diff --git a/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/SequentialRunSM$Builder.class b/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/SequentialRunSM$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..d20f7bd6d85925f7a639f75a78110a6e1d3da97d GIT binary patch literal 5729 zcmb_gX?GLn6@FgXMz$=lF~)?XAp&gbg&?yu1mr@&F~ML%5;+h%E$LVq%Y#QVie}{E zq)ob}ZMv6qBW=2qgB(g>->*!f`1yvx1!xzAnRdHt{d zzV~+khj6*tmxnxea+@djO=-Cs6f|GPy&DHZ-X5O&$IX9C`>o1nL z!_drUN>+NZ_hiX1vwBgX-7RXCW4MNGISL&Um$gMLS#k|CIjI#=VyQKbHZjv-TVs~1 z7f0=UUbC`}thL7x$3}$>o;@n)3@Ml}95)q12RftJ97h+naNW~yYE~|Je)h7SaVa}u zScZE{p{al1f+*b@M-R3sY;jz>K)9A+<;JayS<32J1vMVUb}m+do+uWzB{3Gm17hn# z3Y)8|r!{AuuEg*VI@|FG5>f1oV;6QSY^v@OafQ~5ZMm8uOlLqEC-EaHN52 z^;2C;w!?8ejw4iUTb?tc^NgIXu-HGb_M}S|#O}@hDE!C1+Y^;*R08B*nPG_8?wf4UXDOFb@_JLw22w zV*-;3&5rRB$64%bL%!iezT~(G52%*N*u|pm z6l^QYLP!MNhO=I~X~icLhR#XqTXrcoFO<5ronR|kqOMA#DDQWoctPR7{by+mm!L^3 zW)+UFFT1>MmW@Nl95X2B#tMg4mHxF2n|<^W=HoDMSs|unGP>jR9vnX4)%X27nVK1x ziNQoZ3M&p9>=u5@^xEA?+ctI0BIZTSEa~TozNddC9MND$N}(-nQAggZ`q+1 zuM;So3m5a4Rm!ijUDwhSLLGb(c$wwtW7}c|@K9m9$}BJ;0+LSkb9!}WLt|rQSE51h zPAo13Ni@rvKHpY5gD*}aAgrK#Gug8Hhv9anAr?61Z?Fv=6uE3JOHh!9A zz0XvhbD;)Me{8esue9E{9VlG!$X&sM#)2ONt?i-nOQB^}zReXL>tBm*Qk7bhU^&L! zrk0=0YP}&$z5C@WpmG0iw0*dGL=6vfz?O3VM^vSQ1a>Q@3O$Tm37Ob0CMG{H6YNK{ zP(ET0i1MM4siUDoM4Fh-*0Ip6f1MH0v|TD@^izhM2HkgEy!J_g@fyT~$aPpvg-P9= zx3f;i2K+RJpW)|G{34ED;+>jnhG8w*3wmN@ zai^A~C~hk3Sa~aNuRf#LN%I}NF}3i?D={xBFLD$?k$=2CSH=#ntc*(> z^Y%;GcFyt6%-=_syM3Fc9BV;?{8lN=4>3RmL3YAoR;j$W>r`7}ogpTR2xCP2PQoe@5J2X7!Y zw2U1Q{0JNGpm(}!&u#SoBbXkF;Nsw4xUbnm(8VWkki;CKbC2=wa;?xb9^Tm+X99^oqivhehxYWcAeN}kZ0(koZc+sJ~%NTBIfG6eN0DD(x4>D%c>UdmNtWAr=JQiHf~PTxG^TKYWi%7Ysaz#y zxw@Q^HQ#?(D@Upsk)1n3N%bv!+YgnJ%8}x`CCK+`8J-sg)_d`Ifb`_j67d1m}PL*SMhXp`I&OUieS?+rXpnOVg&yT#Akx_ z?&h+>k9#wBaA}%tg3-xPGE-&o04p85NbbQ4to&J=L59rD@m86GgUd|K1zbfQZ^FVm zDBwETsP>0j0i)IaATz?F}lJ*P==#Eu%S394tcZzzS4e5>5>6IDL+lueu z`+?phpMtqX=ohFFua!yfmU5{Q(}EvJP5juy p`4hawr!>&FN${`mYyQdG@9+ow8KSX^YZ0cxbyD+J+`uht{~vuF5KsUB literal 0 HcmV?d00001 diff --git a/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/SequentialRunSM.class b/build/intermediates/javac/debug/classes/org/gentrifiedApps/statemachineftc/SequentialRunSM.class new file mode 100644 index 0000000000000000000000000000000000000000..b5631fe367b2254621fc6a6fd286d64d95ae3b35 GIT binary patch literal 5111 zcmb_g`*&1V75+{h+&nIi1Ol~Km;%LQ0!#=9g+yuyAgM_}5-7yy&CJc@!sOoRof%A! z+6Q7Ew#A~Y0@l*1#Yfc^NkU46DqZbbuH{<(;;*j$9bGJ!-@cETn-IGqxE9RZb7r6K z?7hEl?{jYc_V0JE1K5lYs!@h=4HY^nF;Ah@anp&kY3E&Q$TCwM*=#P6%Nu!f#7GWX zwmFnfCi=`r3$(C|%z=X4*P~Ev<@jV98#|2>2?I}27OWx5JAMlxyUa%);zS`>O4yYC#Ut;r9zkhe04ZY!7f zf?clTv$&4|cuCC_Q&O^$XjbZo;r^008^xQR|C={GM%Hs?wT?A-Kw+U{@3!-%+v$vq z7k$avz}J(@JL0$zpBD?H%M_4t~M4I8OD+X=vB+1yD^3N-m4H3YwMM zJ(A6jc|scy>o4l)z)p_SCVy{e>qen-tl+=93_A=;ORAE2!J}sqIDWjw& zn>AAs`~e+(vb-{xF%4HjI-uc@!tzoyLj^l2G$r~9*=)u#X>|~XCF&yzOB!d5>8lEL zCDwO34$~PbC5w`MTA=cn=Y?YW#>G+<+T$Oa}ykSZCe_vr)3BfP7pvTtWG#1In zvpSx`510aj^0Jw&_0imi*@~op8VrMeL19fS<&a~E+Z<)Z#wGtyX;P%V{_bIj89?48lmV^<%%IOG? z2{ysbX(xRBv|>q!{DEZeAdI3nPQ3+iwhJI8)#4B#q1=!?k1_OjhKFEgnIe z=M?Aks|a0MIvsK>8^Uh81H6!h%El%y-iPk)2xh0$2E&_1`yKcb-cuN7$6YKB!`gK> z;rJj;jH!~H)@5_zq2gU5I=llw;lVk%IEzvV#lt9hjDim}A%_rKMIoE=E|S%@IT~In z7neF-XIO6v_eGR`+nL1twSL;~v+JG}EA>m)|2JeKRwgGXZY_vr_HYzl?_ivBXvDBo$*^bC;&~AC<>~jik z(%fT7eJ+`C)!!h!g2!=}ZS%I6F>*PRm8u1u9ryEaUC7r8jo-ZGLg6PImEouS&x>Yp ze2!z@8H?ld9P@RdIKIF!Z->RPtmi9&hsC!Pev9qT@G9qj&QS+Pirod=*Q^aj$%@7{@C4UOSGaxEhBRzlL>3Cb3~0 ziFbi_l|{^qClw|x2?76+-l5jek(jMbjQ{A*}EQonf;TW&}YwVb_o3fmOUBN3ND`4k>1 z!~5uzAg(Yf5JJ`%SzSBr{#Xp=41`GoScf-r+KWEEn6Ai+g9+aHE&YV7?nBjp5eC-_0`T*Z#g}f2OnDk;~coiW% zJ%X&Qn}8YS!3t~=KK!vVJR(3O)CnHvOmy#h620Cd`V#7h62YvHg7T^73l5*3XUV_7 z9`YhK;0!y&OQicO4&!AEQIRft(n(xkVqfLVYfRupT;}IZwug_X=D)Md{y}B`i<-Si zv^cSE1`;VJLYh*OSBVYG^kw|XqyOUwF)?P{w~}7wTTvWD604A`22|d{VGRdwVYPT u9g?uJ$YECF0sEa+V@l*Olk@hvci5E&kT;klS@#$GmEUq!HgI$k)&BuA@i3YI literal 0 HcmV?d00001 diff --git a/build/intermediates/javac/debug/classes/tests/ParallelRunSMTestCases$States.class b/build/intermediates/javac/debug/classes/tests/ParallelRunSMTestCases$States.class new file mode 100644 index 0000000000000000000000000000000000000000..e5e0227529c674cca2052d445d8c604fb7efb7f3 GIT binary patch literal 1332 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 literal 0 HcmV?d00001 diff --git a/build/intermediates/javac/debug/classes/tests/SequentialRunSMTestCases.class b/build/intermediates/javac/debug/classes/tests/SequentialRunSMTestCases.class new file mode 100644 index 0000000000000000000000000000000000000000..312d64e72e7ec14afe8f1e432cafd09f655cdb05 GIT binary patch literal 12083 zcmcIq34GMW^?yS`b_oN76*&|%YLFx#fdtP`A;h5QawdX+ST~zrl7+q41Bi-8J*wh? z2cB4ZDPDl01`LX4y?aP&FWcI~*538si?;sT{=aX2v$Ma={&tP>`SbZ?cjkTPy?OKA zn>RCWdE-BQ`-y0Vc)6SgQHh62B@L!BK^3b5>jHJ*K(woFVf$(;m=aVrGZYP_P8U>C zU9;3fUO^+XgXY9yVJi?VCl8fN8cI@-XI&tiwib2@8eP4j#-BH~v7Cm}2oF_A8cDv) zl<8C`T-TIH1bUK~GLZC#l9+p9^-6~TTcbuTQ*rRH#vwF{4)@S#Nn>cNprcY&GL@`r zwbrJsXety4FG)vR=eL2_97tLa?`^lWMzg{e@04`}9qFO*k|xkm8Re8cT6>ZyD*`jb z($MU1n=urtTa*YzQ?03l6^Jx?sZ!99JXI*#RoNa$hJuyJR3K$lMgqa^P}C}?W9c{# zRY{si#|t`4StnNrEEs2z;V5RQb}S!rKx!j9p<2*su|!v07Z#WZb%v~trg%JAr>4>~ zb*6&-O;9x_9SV0?iE^66KA$Y8M$NBQAB;tV=|lno>jJ4*BowS`QeX3;DXWWlYN=!h zO{F>yO_Ma8>fxQ@hOTPmm9slr+nU;1rVEp3x zE1{NihNKpnE2un`2t<=19w2B<{)&ppIV80?>dulhk3-H5rFtK-)+s(Jq1g=1m$V=Y zHu$KN!NE4TL{ck*rLAoX7ja;nD`_bQ*3e`s7DsA`VpB2wJW0!G1p=;}cZr~r1{ejo z#)iqxr&S)hK+!N$nIAG$fSNs;WG^qMR)1^iY?iZVCyi&JGBdFaW$d`#0l@HY(WIYm+l7wKA_6#j+(}6H1oa77<+N zwMEQ@0Lx1~$fb4;skGJWs7$7VK`WW;OozigUb+~`K9g*-(OJ1ZltWbx7Em=^Vl1 zBgyQ;SkQ28jo?-Vw?@)zFWn+&Ook0Ag+oC;5L8<8&~1W_RXa!7bY3`Ybp^sriLP`6 znYd*`(2BGFeB`4olJ1~8kyfk?Rxq7{7emzpN+Y=eYO;a7C-Z~GWPuhnPoO<)A*e07 zThcvruW@r*cOtePZful(Dw*pT=0BEO$8oEQTN63jo)a{#*~w6u!gZuF&e7cAr5CWgHj~KtmeQGs zMJm+^-B6i|p|x<4mtI2rtHX;&*r1obCg`|Ay!AFO&iMu}y_&~e@1@uCh|_&^JnKD) zS5VEZ8gA8cYcjW{aO(t`%~n~P#NBJgfLxv%@Quixt)Z@HAeByF)2#XwB4!To-f}wT zn&>!C`F1+fk@NIzxsk_}Hpe=k&Imtlg$vS=b}P}wv5ze4j|BtarGZ3<`JDME zRep>jyjFJi9KLxXRj8wkZy+;2#i~uFz=0HurK8A+lO2oum`T32wHs-pNzxVnF>X$rJ-a9Hf@SVV@M13xj0_wke{u1^I;9c*__#+hr^iAn!P%} zVN5wAli2lHDb+BYxxj@z90^1_?3`-hdNF7v?ixy13#SkJoWt8BBOcEzZsu%doQL5+ zq`f0hl?PSLIFX+V&U~7QwxV1!ilPlgQQWGE=!5%y5p){t=2#0Gw5s7$H{vO7#FO2K zxYXs#gjw>5SoJu^><$l9HDJxN4((uFirbbsx|1G(Yq$N-Q)j$6=CCmwI@r(EpjFiX zvyRE0K#C{pN_Q66dN8wKX7>Rww<}N&le+^jyE_2Wk9X*u8~9cAa6&N{?kEPsF~wl` zrWg#%6@y`=VlZq}1fC8{6@y_fXGl3RMAdYdtRMz^6~thyf>^&0&Y2HpD#!;Ljdi#$ zo7$?T!#;%|*k+777tB%sfkg@+utxy|)^P4tb&gf_+rl;x>(3vFh36Bo;(Q|3noqqw3$6V>ISM$~%5WGSYI6LN0% zq3F8U8mrE)QaCsQoq=E~mgvE|C*thA<-AgBCVPUjaD;@dWR*V_Ta%7AI<6MFIOL$@ zFt*{)bq*gmXir(3*Lmt_$y^a>#Y42Qg34f(Y2`FZOqb#~DytCi(x{x1O1}j$?nEAU zk`%|%hZXc82&XdPG%1czVrFvhGg4G4Y!>%sOL4Tq=5ViBilY?P!o9gtOilDaB}ot>WGV zQXHB$oj}#>eyO?{INFl@^NV$}Imr43xHNzF$`<$eYlrC3s?`lc^ zQc^z8y=x`?Q(@P0ZhEUTe)|iq(3Wc8~45_>37-k$|9RDITjoKug+F(+}xg^oV{0wFa?T;xg3aNp{d)#7`~{K>oNgkEaEXCJSqml{=b7B`!B)0ql8vyaZ!7@Fs3 z%&#ziA1%}vnu|2HxR=_NP41;-3m|lU4x#G5rK)9!tCEJ^Crk+k<(2 zh6pL4pF@+;pxC2+fl)U04zTxuag6*D-$cJMj=4!Y<^V74qJEAk*+ZA)c;+%~VL0h> zZDHe?D>Merd`@G=GgoR1p1De6pU^XfTy-@Z#6I0k+ErKQ`{)Af7^1oG(V4K#S*XO! zqXvY}sWcxkvyjfECA0>fT1(3)jbiUbw1O_Bm2@@AFE`LCl-Dkx`%t#sP8ZTn3eaBE zUZ0~Ny^iYF+tlgs(*fhB7qy?p(bL*b7twine&SK=CmYN6(+9>+tKg>+tYQx@?^=hS zoEztQZDzP2|t;zJLh3ACz5)re3&-b5Esh9^-)R+5u}JnYYIv$M#^1&2D4w0L$GTzs{H)dT|0K zn!sk?>@d6U*2#U)1+j3~vh3pcCkCQxvAFB7xa(2U+oqJ`T?rvZxnWv4-m#oCD^Ml2 zRmxT5HyK65n~==153(X#9f}NorW6Uj4cWcTu~nz^!AK^Hen~r32Lr$_YY@@!6%G3B zGz##m8uX)mzeY_wI1}lVk_L{7QhcU$4t0?76RZN$YCOPx$<_fP&-P2aSre~=83{^z zp=Jft8;{g^GChR!`3Sb~PHf%BDM3%t2Ds)D>O-{bLxenojr=U#iqv`+w(d519-J?L z<3$u#Ujq6vT3@5rkaiEyt8m$C*tD-BS-yd5$D6p$yye*B2aOv)&~6-$^X|9wJ2?3Y zL~s9O%%eEkY%G71|32g7+-Q5y;bawU54%U(H(`oz!4z-96bB9|+WwGHL`>7C!e)-P zM;wZ{9oIW_xFGB7)X`$H&Mu81&K}d4jZloA9jJf(!OmT)7{>C42|2<$G{Z-;ay@E4bQoKL3BX_*9hhBLX{- zFUmD4B@+$f5Pu#^E5)@KF$&mRZ3XJCVi4Hy647iEHQNwodr@1&!9xG#{|N&YJZ0Qw zdf9y@yu!TnZ?NG# zeh@5p%4wE?SPUuCOTPje-h*y4xmoNNV0j-bcu=~{RLEjK1>4WShF7WEOl}tY30U3( z3!b%_rKrVzgrRs3yGeJm*bgE7U9jLmjUeF|n+8@keOWDDAnKZ6znfSjAz^3VOl2zV z5cUk=m>2ZligJFYqs4NXk&c;TWF}T?aoT6%)fPEiU4Nc}3ca{d>~V-5sg5RuBv%2n zz*$T7lb_q9Z;ok(}BHJTUwf@ z!=qr^0UdU_>VN`>7FN`c4`W_bPTb~YKh~Dy&$}J-K8SfAa-A1N8SUX$wIO?I9q-pS zbUH>Fe^aMplg8iD7}EIHHD=QIH#CMc{>}c_x3bvV8dE7g>$F-t#|d}NBXHHJq?_>8 z+>CeSZFt*k!OP<=isEPb6y7l#a5KyXUXM%Qq4MG8+5$3#x-|>nP-#^24MaLwW=(sL{HuqmaeU1=~`vq0s9#lbgj_ z!O{j6REphZVvCjJUoKFi^3r0kq1@~?lbgjBfMp?AP_Nc3MJ?vXP!zh|q`O({Y)C%` zEU1*bt)q~|>cQ3kHk8}lW^%LGG_Xtu3+nZ5GZl)l6TmhVY$*D>&E#gW$zYiR7W{Ca zS&CY$21D^%gqw6Xi%o*`YAO*`d~}M5;&@yizd=(4{vWNFD(djZt$Hy-oUCc57+RyD zoo;ANhIWRbooQ%i8`^wBTV!ahhPKqumK)mnhW1%QYd18@(7H8ks#s&ts6p2nTFTJY z8`?#Nw$Vtr+@Mz)^cq9E&d_c!w3`j>RzurjXm=Ufy@vJ$L;I4Uebvym8`{H$w!_dK rGqfiRt=G_=1`UrZoT(-F-$>_+XYt<{jR delta 64 zcmX?mi22MR<_-Vi7!@Y}kCSF(*eo5t$3w)Gft7)Yfq_9#YZHUSE~aG+4ALc&-z-<; T7GyfcbQ~xFl-ew@!qgG~w>J{X diff --git a/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/BuildConfig.class b/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/BuildConfig.class deleted file mode 100644 index 433d3fd3baca398fb1ffc76be22414389efa05d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmb7=%T5A85JhkC7C{j4y>q257){(^OooSqI3nSd;D$6qGc*}y$T0X{u1s9`0e+OR zh8RV6Zf^If>aMy~?;o#k0IqPHLBV?!INoclkEbU=9m8MUKT`NcVH-zx% zSuc(Rq2PL!W=Y5Q)L6-pKA$hNg)e+L6XrxYa_pO0X{qc{*>%RsB19|IQnyB+M?#u| z{Mhk(!d}WSy8t0?)JrYB)gLtV@||9*4jTG>m5?)j?6kR?V-*v~5>D7a;kSXp9|MGB zsarQHgHFF$O<;!*_oOYwLJ}fncf?1=V6TnkY$&~s7}^}k8Llbpp72z_U%`k!Q47L_ z@xQ5y?4a!~JyYJQpmug`BZXirTq4fP2f{eS29msnO{Nf1%xP?WbB1|)jdPsgog&7X j=O5aNf#~@Q=y_FQmo-QSy2qMY-J{sY0TXe-pwZDMmos;C diff --git a/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateChangeCallback.class b/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateChangeCallback.class deleted file mode 100644 index e5ce3105b3cad05797ead06e38d2aae3032740ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmYk1KWhR(5XIjZbC)QAl(9;iG}$KDScxD6gg^xQxy{_UW}TJ0y?nS7egHpIa8D3z z=Fj8telv&vzde9=40H4d<4{+o5{h`u3*qU?aE^QHk_e-(R-@a>$~CU= yGF1%;?SeLh=f#CKZ`F1(`wxv$muzK{5fUza22i@~7Fn8l$WQeS_o-*eF#wL=)JTi~ diff --git a/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateMachine$Builder.class b/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateMachine$Builder.class deleted file mode 100644 index aaf05c62561e69e5de34358d7341b83a5ccb0d43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7123 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 BU)cZv diff --git a/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateMachine.class b/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/StateMachine.class deleted file mode 100644 index aaa9e0be429ffe483b47ee3dd9093e22860c4bdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6210 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 diff --git a/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/StateMachineLocal.class b/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/StateMachineLocal.class deleted file mode 100644 index a8381eb00d0d88fabae6ca1944cb946fd67f7f28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3637 zcmc&%TT>KA6#kmq$TA9U1Vu%oK?PAq5GA_axEYO$7$6wU#mw#w%gF4^I2Y8I#3Y*g z{a$&?TV4|%Fh#2J15)`nc}*qxdUn7?5Lc6`P_@&2PJey++`IYhui0M#bmQ9uDp0AQ zN<}ql1iG_MLAxC47RQ3-ITbj^k>MTX1rQmNsoe_lDge5&|`cP1_8P z3RJeWk1JRq(BpV{EzeD!Ibj;PUf1cOI<__%x~^p!9(PorQO04biYL%2khn5wT1Mn5f$taFw4AX2!{AD^NcDH9XhS>I z4?NxWO=+Zn`EcqFJi6m$y>+PAC5x?c@XSCGRcK7IBeWz@BWDU)B&JKnK8dLs9UDF? z_1>@IfK2~7KXBZU(6&uGFZoZZIEX_mi;S#lfqf5=u5nf{PY>gWf}<*q$GWur2*4Z8X(> zLF)CiiqlB5r-p8h{W0pPTsVVa1!q+}gAsw%cbiO~<5-5ybWx^tD>Q~D1e)3|#AOq; zp%{^3-1?(#T`!yWnXr&CyfHmv@rY#9DaUoslyuCj3MNfo;8;0zasT$qV{5(8p1UcO zxc>`umLs>+>y*^AP|s`boUT_NR@mWkHr(H;;-!*0N}X0x$L!RQ?#}tr(hHfK-a2n| zYmY$VTqCIpQn+5@v-jGMm6lPUzE-U1e_@FnyV)Ic{oTb_YJ& zraNQ=lTOaBuYsL_16RRi6&|S1*1OeW+SASyUoTOJxI>@Nvw`DXV+$*kQoon>-gr~- zfRnnN<2$33r9Kt9sgmn{ly4n7U&>jqag5peXp6-om)~1j@bR(o#ve5UBh`Q!dSzNR z)GI0`P}2Y!ykKzrC zXze{oy{|%#);^TfM=D;9);^Kcrz&2;MKeioW<@K z%;_Ep)?zT}y>sBs8FbH}C(TW%ju{;9;AHSS)Ny|5+z)^MA$6~cbnin0=S?(pEgG>7 z+pqzhRG^0sq&~D_1UndmU5uuNJP(-Ss)H{0yxOnxKZ2XQ(WTu@McZP#r_hY^xIp`# z=bFl~$a#UY7s;tb#h>sM^wu{dWQfU@{%zqX|EjBg#?X(Ph!X$qCX~4mLz^QY5z>@W zSO;NDs2H}a#5O{ii4T&voiL_vITE)J%DjJ&#La}UUdoZUkx-W4gCwqJIP>&G1twu~ zl>et);yA^h#oq{4pnysQ2>FwNqC-#1L*v)%F8_-me*p-C{rbi|P$S==e^GVGQ5 zP$w@6sXCIPkSYzKi90)6SQ<+U0F z_QY~qynMir%k)HVx>gY6dkiLBrdQARRuBnf{#hM&F~^W7IGz)(F^u=7>P8l`6%}!f zc$!s_RH3UF5?WTrB9;Ve5=p@DK9lVaZ-nqqjo4;$pC}tDQ9JIm8a3|kS~Zs}&Na}p zeYr)3bg5}uZpHE)QM(Hu=2;EGk-o}3HGX*L5J5@Pse4w~^2sln$yTUQ3%1+kzTOik zZm7@~@N0Pn&1|-Oo4<7gZ&TL~@3QDO2EFKc+?P$o0|ftglc@nC zV08Ug5s_9c%@)rwaRDa$Bmek6CX3$j!U~?qbD9_O5*1evr58{Zm!{8f=d(QSEq58N z;HiL4dsdXlr8F@)T_8Ec$O_CT-@&TUHlk)V)`ntM<88XBYNCw+^Xk8-c!pdzh22e& z|3(?o_o8Q*KSfk3_hV8~r1Bsx6-_D&38@U6BXf$BK;I#2oQMT2$N{A2LWZ$GbgyEN Zezk-CIbP6t1TXQ5q*w$DdAweq_zmCAmxBNR diff --git a/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/abstracted/StateMachineAbstracted.class b/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/abstracted/StateMachineAbstracted.class deleted file mode 100644 index 7ef37f24a9efe8544604b6d3d28f71f335f51d4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1458 zcmbVMUr!T35dUo{94&_^AW;4&Dr#Gl6XeB|5E~4MNh^spnDDl}F0k6WJ@@udzku;8 z_z8UW1&t4W0Kbl}MxAX7*2IT{hn?A(+4;@v%w5m}Qd$Hk01l&I)lzroS;tda?wun96jE&~L5v{&$qt4*;PBYvu zmTD;=8#Y9}8={iO1&lek=;D&SWj%%e|5ED5te$4d;J)V4Y%5K6ZSt7Fq=U;Yrfe)P zMXY{YhQas*X2wMUvkb!lmtl>n&+wpFJ5P%$r9GS1yo&`~p?)P%i^|jK*B(Q5tJB3X z+tepX&=mR^Z??%iUQ<4A?{Y1z+*4-Fp^O=J(sUtx6)OxmorEV7wVDRKzi#9|^>4Os zqmzu^pA~E)jYImoEm22}sBBV>qm;A%vd*JkG4l2@6{sYpY}Qh{J(95{G|QNYt7Em)tDv9KdzlAc@WA234ux#u5$|FEE0EE1h1M_`(y8T#A`1U!pL%we9M zlMOW01?vUM(uon=q=2``W|Qb@Zqu$vnjA7e;X0TY!vIR8$e@g6;`TGXL;NnSm5xmR K2VH;lVc`$$b*M7{ diff --git a/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/abstracted/abstractedSM.class b/build/intermediates/javac/release/classes/org/gentrifiedApps/statemachineftc/examples/abstracted/abstractedSM.class deleted file mode 100644 index 3d1410791d516e31355b4a94573bce1732ea1ae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3521 zcmc&$ZC4XV6n+Mfg*ZrzfJKX_#fr2wDk_y&DsdNbmbgR;beF2Gtb<)_wK!S=C6NO{seFuKgQ66 zW&>Ja)rCo4|8p~NTd*8e@N>zGmZxg+z@@5X=amz#f4e;ii*=>GkMMIMq_>Sd_iD zic~7WuhT8jgS`SBt`l&^7x-D|(db}wy|p#trfp}<++tvMuf#s=7cg9B!ts?S@Swr) z$aZhiAKkD`sX>PY`XmmZpNUpf%)5TN8N{>dTXwQgb#lJtI>}76T(&LcaYYll^>;Wd z@d5?}Vs{oSTLqyK_@&XO$0_?i9BxLRHvg!^Adb;|rnXbDw37nX)0uyH`+?W>_>#oS zx)_@$rY|SZg6;&nL07gGtK5UT`gsmH*aQbB8jw{GwmCuXK6VETl@v9A}|pp zr?zTs^?Rr2XxLRb3L>g2_FNR*TQ(MkYopEg%Byz&yj`W|qb%IY(|QXxH}TX3`re+g zijL`5J;wT{r_ZBjXIR`eOWC|R5PqA15rOX2ezhSBd8BTlo^6EAG(x8vq2Wg8R3mh< z5jw%Q_32ukQvQOQuXMKJy%^rd2L?Wr_z2`2UN1w- zS#lRuG95&LE6f6qW!JmMc2KI9{;uz1;iB3GS4}6+GkqZKx{K9vs_y8_@Lu5*>yZr$ z=b5qFo2+g5__g(&B-~b?o*BzmsW@60m3$0iP!eyWHIAY{*M{$2yEUcAvo!Cv#0|{G zF-xGN0Y~C`pr)*)k0s`Vxr&y2iA*rJq@_C&bHUs_Eqx;KRxtOOmOhu5!K{G1<~Yh5 zx6MjLRSbM7kc`mq>dTH@CA^&(cpxwpVR`gQHt?;$k%p||%J3f`d9j;k0YOE3P149zS3 z0psQ)v`-E_L~I#xK3C8MEaSOg_&l(JgIYcm$VY%(%Xsl2h63`?3SJ4x93I!?WJsob zVwHSy8K;*q@+&uN4vajD4vyRS-%cZA*vmurC@;yw*uw+0hn&4kmVGS6eiU#R7H>T^ zxvNgKLE#$Sq>f4cw3{^~O=*h1CQQd;I&CSA?}ROVYq?d7cg z3qo2?J3tzfG>XRkq%ymoq_LMYmP8bdU8J&>o}@8B8f!3$#!gaM)=$#d!7ug>!_kDB zxW)GzBmFM1EOPwmQ2`5B3^98RbJs9$4XdtUch|5_iG4x6`>4sleSF2Qyc1s|aj_TQ K;5+<)-v0onIL2xK diff --git a/build/intermediates/javac/release/classes/tests/StateMachineTestCases$LargeStates.class b/build/intermediates/javac/release/classes/tests/StateMachineTestCases$LargeStates.class deleted file mode 100644 index c679401a92106e9024d7d3cf0ba73956eb10c1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6471 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/Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml +6-->/Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml 7 android:targetSdkVersion="28" /> -7-->/Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml +7-->/Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml 8 9 diff --git a/build/outputs/logs/manifest-merger-debug-report.txt b/build/outputs/logs/manifest-merger-debug-report.txt index 6e3db5f..729ef9e 100644 --- a/build/outputs/logs/manifest-merger-debug-report.txt +++ b/build/outputs/logs/manifest-merger-debug-report.txt @@ -1,25 +1,25 @@ -- Merging decision tree log --- manifest -ADDED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml:2:13-3:63 -INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml:2:13-3:63 -INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml:2:13-3:63 +ADDED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml:2:13-3:63 +INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml:2:13-3:63 +INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml:2:13-3:63 package - ADDED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml:3:16-60 - INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml - INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml + ADDED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml:3:16-60 + INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml + INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml xmlns:android - ADDED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml:2:23-81 + ADDED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml:2:23-81 uses-sdk -INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml reason: use-sdk injection requested -INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml -INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml -INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml -INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml +INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml reason: use-sdk injection requested +INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml +INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml +INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml +INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml android:targetSdkVersion - INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml - ADDED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml - INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml + INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml + ADDED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml + INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml android:minSdkVersion - INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml - ADDED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml - INJECTED from /Users/gradengentry/Desktop/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest11121576163084389438.xml + INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml + ADDED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml + INJECTED from /Users/gradengentry/Downloads/Repos/StateMachineFTC/build/intermediates/tmp/ProcessLibraryManifest/debug/tempAndroidManifest7491562204287475936.xml diff --git a/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin index 5af7c06b783b3436efc5e5f0d1c0613677669827..71589adfdd79a73973785a79774102f3cdde6d5d 100644 GIT binary patch literal 4591 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 DMoval delta 3161 zcmY*bc~}%j7Oz(b2ujnU;&7-aBWer+1t zksOk+(nZydxDq$wu4qp@ki%%s@X&HFDp^{5A;*{Ck4m@qr0nnD0`}cNH65H@)oOw@n(A?2c?2h z9%rF@$|;(&_&y~SvcM2UUu8d4fASG=9e|3sX%?%Q%e3+us`Rnw4}tPfB~gWuj|MOd z8&t9_Low}Dqqnl*3X{`|3y&Hok5G1H8F4iD4~}3zE>E0N-_0e?EAr_)UGViggH-{2 z*z_}XIa_Ala5hiO_MKt&**hfqA5p$TQJzgFXd=a2EVB=jhxo9kS`r2&EzY^H>Z={k zy&jb812%YPK$pLsJl$jpV=GU*4&ejY>ow^smsfo+%kEuN`*GfpY<76e2=Y%dl8hpw z$r$9wH0l+oV3v&&D5Z}=g=XV4qcziL=A%&|Kbz)7Fd9uUDBoz(8#O!=i*+AM&S z(#{BgKKy{1Mj?PhhanUS5Q5O)R@MYX{6th}vG8WA&SbdW6qKK3G-e6>XDBbrVl*%r$U$MMnA=Wf=M>Y_neiGqpR847 zk?CZVjwZ&c6POvu$(wbYFcUd#`f0qG$q zfmum4d4bpSR&#bSpnTq9;j(!4xAYx}C(G9z$j{z?>-PTnM@m4k3e=MYJu7(hAwfMa z|5Wj6(jTFfak51s#H@ydd{{%ResE!}nB?YXAI?5lyzACk&%Q+mehj#EHbS$t6k^vw zY96eI)|d)>86~t@KGVupm!uzibItou)^~gRxp5y|-T=zguo2J_&cwdI(M~gOtX>$o zsb$&v@oCNF5Vr|pHiNtZ)LVdT1!CDI9b;}=OzD}J?SR_n>ntXL%ibYAb@TJv3DLWN z?3SeWP+6_bkSWy>vsX-U58%}7KHmR%)t}l?2^+Vtaj}^>pM!cIB;~<=>LH)SWo8R( z&&G*w0*hyk@ApgD?t|zH{s1H&1ocsP`}$s;#=`j`vAKW z*w-EjpN)2#zp)1)qx#G})^r}me+N+)Aoe1V?`b(+qAt@C5@`CQj%0qITg}$dg(2%Q zB?V*VOiKO;w4Znz&)$i?J?`piSD&rg!RO)?Z}}^rz6#2pKwbyTHJWHkmcS;z%{jp@ zHZ-?HAICJO`CgT?n_j}0PnjkjqHi#EI{08vsAn0>uWBL|sSTU(FrQc0$G8-9xZMQ<^ zvZ1_2djKEVJNgbJZHBubvYuVF_aypPKn^R{^=nAiwUL9F$Zxj%!bI`{*`+n&Dm=b-!( zV*U;C4Zy607gD*IOf=5yggx&DY%W_e+{bs&jil<4&tC#bd_`ZII5VfWuzTu~-soF; zwj>TO&-ij{Z2fB>Z-99GM{?by%d*kd)o}(T8eN;>yTzpy@k}j zfV`uV<2~4sv-Ok0{7v&JeOtU)pJ&D^p;H#^Kfa^1i|gakJ1vm15XUUS@;g!=F2*R& ztf3XHuN*z(YDeD_zJHZJ&U4>(Y6(ts;Bk3a;l$)MF!aYh^qCa9a(2~=U!Dz&bg4Z$ zJ0Hhwfu$HZXt%OEh6;Bd9~Pf<@N_G{iIq?&zUvU+S%g)~uzU$-mW#bQ`pFX6S)R&J z#M9ZpVL zFL@{k?1|u2UDk}cT|Vzz_v3Sq%sV}SWz*{3{~8$8SY8$LXn9fc-(@&)Gi;#Z^e)8S zJ9EF!KNHIK#QyL@%ffvp-A@DC+~0TTH|`NhxsBt`)%d4g-iYatFUM%{K(_jB_fh`A zKDqrTM|t&h+B8EZ(XVh53y7o0BLjUp0nHaDdWG6^>7sz{LO-YyvydXrtprpeF*qbj z>kaT6Q0WJW4HD@hy^Y2}X(N;0OEezW--=g(T1bC_%jJJy>2WttOzgZLm&)CO~Br+svK@bd1^w z7C<*f&b-QmChQq=od4+&5ve8An%O^%kt$idEZiSTE_C8@!!1+zf6uM`c_B{RZ#A zWG7bc!m8akY!43Gi^D$0Vf(ORKMwQo?9kC`0KL{y6?$c0HCEL<{xlJQv*l|ow;OLV$`Vj6WYg6ca b3X`vJ(rK)$!Kzxx6ROauO@W@AdVu~5)4LMr diff --git a/src/main/java/org/gentrifiedApps/statemachineftc/ParallelRunSM.java b/src/main/java/org/gentrifiedApps/statemachineftc/ParallelRunSM.java new file mode 100644 index 0000000..66e168c --- /dev/null +++ b/src/main/java/org/gentrifiedApps/statemachineftc/ParallelRunSM.java @@ -0,0 +1,153 @@ +package org.gentrifiedApps.statemachineftc; + +import android.util.Pair; + +import org.junit.jupiter.api.DisplayNameGenerator; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +public class ParallelRunSM> { + private List states; + private Map onEnterCommands; + private Supplier exitTransition; + private boolean isStarted = false; + private boolean isRunning = true; + private long startTime; + + private AbstractMap.SimpleEntry timeout; + + public boolean isRunning() { + return isRunning; + } + + public boolean isStarted() { + return isStarted; + } + + ParallelRunSM(ParallelRunSM.Builder builder) { + this.states = builder.states; + this.exitTransition = builder.exitTransition; + this.onEnterCommands = builder.onEnterCommands; + this.timeout = builder.timeout; + } + + public static class Builder> { + private List states; + private Map onEnterCommands; + private Supplier exitTransition; + private ParallelRunSM machine; + private int stopRunningIncluded = 0; + private AbstractMap.SimpleEntry timeout; + + public Builder() { + states = new ArrayList<>(); + onEnterCommands = new HashMap<>(); + } + + public ParallelRunSM.Builder state(T state) { + if (states.contains(state)) { + throw new IllegalArgumentException("State already exists"); + } + states.add(state); + return this; + } + + public ParallelRunSM.Builder onEnter(T state, StateChangeCallback command) { + if (!states.contains(state)) { + throw new IllegalArgumentException("State does not exist"); + } + onEnterCommands.put(state, command); + return this; + } + + public ParallelRunSM.Builder stopRunning(T state, Supplier exitCommand) { + this.stopRunningIncluded++; + if (states.contains(state)) { + throw new IllegalArgumentException("State already exists"); + } + states.add(state); + onEnterCommands.put(state, () -> { + if (exitCommand.get()) { + this.machine.isRunning = false; + } + }); + this.exitTransition = exitCommand; + return this; + } + + public ParallelRunSM build(Boolean useTimeout, Integer timeout) { + this.timeout = new AbstractMap.SimpleEntry<>(useTimeout, timeout); + if (states == null || states.isEmpty()) { + throw new IllegalArgumentException("States cannot be null or empty"); + } + + if (new HashSet<>(states).size() != states.size()) { + throw new IllegalArgumentException("States cannot have duplicates"); + } + + if (onEnterCommands.get(states.get(0)) == null) { + throw new IllegalArgumentException("Initial state must have a corresponding onEnter command"); + } + if (this.stopRunningIncluded != 1) { + throw new IllegalArgumentException("Not enough or too many stopRunning commands"); + } + if (this.exitTransition == null) { + throw new IllegalArgumentException("Exit transition must be set"); + } + this.machine = new ParallelRunSM(this); + return this.machine; + } + } + + public void start() { + if (isStarted) { + throw new IllegalStateException("StateMachine has already been started"); + } + isStarted = true; + startTime = System.currentTimeMillis(); + } + + public void stop() { + if (!isRunning) { + throw new IllegalStateException("StateMachine is already stopped"); + } + isRunning = false; + //delete all actions + states.clear(); + onEnterCommands.clear(); + } + + public boolean update() { + if (!states.isEmpty()) { + // run all states at once + for (T state : states) { + StateChangeCallback onEnterAction = onEnterCommands.get(state); + if (onEnterAction != null) { + onEnterAction.onStateChange(); + } + } + } + if (checkExitTransition()) { + isRunning = false; + } + return true; + } + + public boolean checkExitTransition() { + boolean exitResult = exitTransition.get(); + long elapsedTime = System.currentTimeMillis() - startTime; + System.out.println("Checking exit transition: " + exitResult); + System.out.println("Elapsed time: " + elapsedTime + "ms"); + final boolean condition = exitResult || (timeout.getKey() && elapsedTime > timeout.getValue()); + if (condition) { + isRunning = false; + } + return condition; + } +} diff --git a/src/main/java/org/gentrifiedApps/statemachineftc/SequentialRunSM.java b/src/main/java/org/gentrifiedApps/statemachineftc/SequentialRunSM.java new file mode 100644 index 0000000..ec9a6f5 --- /dev/null +++ b/src/main/java/org/gentrifiedApps/statemachineftc/SequentialRunSM.java @@ -0,0 +1,198 @@ +package org.gentrifiedApps.statemachineftc; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +public class SequentialRunSM> { + // will take a run action and transition to the next state on the next call + private List states; + private Map onEnterCommands; + private Map> transitions; + private T currentState; + private List stateHistory; + private boolean isStarted = false; + private boolean isRunning = true; + + public T getCurrentState() { + return currentState; + } + public boolean isRunning() { + return isRunning; + } + public boolean isStarted() { + return isStarted; + } + + SequentialRunSM(SequentialRunSM.Builder builder) { + this.states = builder.states; + this.onEnterCommands = builder.onEnterCommands; + this.transitions = builder.transitions; + this.currentState = null; + this.stateHistory = new ArrayList<>(); + } + public static class Builder> { + private List states; + private Map onEnterCommands; + private Map> transitions; + private SequentialRunSM machine; + private int stopRunningIncluded = 0; + + public Builder() { + states = new ArrayList<>(); + onEnterCommands = new HashMap<>(); + transitions = new HashMap<>(); + } + + public SequentialRunSM.Builder state(T state) { + if (states.contains(state)) { + throw new IllegalArgumentException("State already exists"); + } + states.add(state); + return this; + } + + public SequentialRunSM.Builder onEnter(T state, StateChangeCallback command) { + if (!states.contains(state)) { + throw new IllegalArgumentException("State does not exist"); + } + onEnterCommands.put(state, command); + return this; + } + + public SequentialRunSM.Builder transition(T state, Supplier condition) { + if (!states.contains(state)) { + throw new IllegalArgumentException("State does not exist"); + } + transitions.put(state, condition); + return this; + } + + public SequentialRunSM.Builder stopRunning(T state) { + this.stopRunningIncluded++; + if (states.contains(state)) { + throw new IllegalArgumentException("State already exists"); + } + states.add(state); + if (!states.contains(state)) { + throw new IllegalArgumentException("State does not exist"); + } + onEnterCommands.put(state, () -> { + this.machine.isRunning = false; + }); + transitions.put(state, () -> { + this.machine.isRunning = false; + return true; + }); + return this; + } + + public SequentialRunSM build() { + if (states == null || states.isEmpty() || transitions == null || transitions.isEmpty()) { + throw new IllegalArgumentException("States and transitions cannot be null or empty"); + } + + if (new HashSet<>(states).size() != states.size()) { + throw new IllegalArgumentException("States cannot have duplicates"); + } + + if (states.size() != transitions.size()) { + throw new IllegalArgumentException("Mismatched states and transitions"); + } + + if (onEnterCommands.get(states.get(0)) == null) { + throw new IllegalArgumentException("Initial state must have a corresponding onEnter command"); + } + if (this.stopRunningIncluded != 1) { + throw new IllegalArgumentException("Not enough or too many stopRunning commands"); + } + this.machine = new SequentialRunSM(this); + return this.machine; + } + } + public void start() { + if (isStarted) { + throw new IllegalStateException("StateMachine has already been started"); + } + isStarted = true; + if (!states.isEmpty()) { + currentState = states.get(0); + StateChangeCallback onEnterAction = onEnterCommands.get(currentState); + if (onEnterAction != null) { + onEnterAction.onStateChange(); + } + } + } + public void stop() { + if (!isRunning) { + throw new IllegalStateException("StateMachine is already stopped"); + } + isRunning = false; + //delete all actions + states.clear(); + onEnterCommands.clear(); + transitions.clear(); + } + public boolean update() { + if (!states.isEmpty()) { + currentState = states.get(0); + Supplier transitionCondition = transitions.get(currentState); + if (transitionCondition != null && transitionCondition.get()) { + // Check if there are at least 2 states + if (states.size() < 2) { + throw new IllegalStateException("Not enough states for transition"); + } + // Get the next state + T nextState = states.get(1); + // Check if the transition is valid + if (!isValidTransition(currentState, nextState)) { + throw new IllegalStateException("Invalid transition"); + } + // Add the current state to the history + stateHistory.add(currentState); + // Remove the current state + states.remove(0); + // If there are more states, enter the next one + if (!states.isEmpty()) { + currentState = states.get(0); + StateChangeCallback onEnterAction = onEnterCommands.get(currentState); + if (onEnterAction != null) { + onEnterAction.onStateChange(); + } + } + } else { + // Add the current state to the history + stateHistory.add(currentState); + } + } + return true; + } + + public boolean isValidTransition(T fromState, T toState) { + if (fromState == toState) { + System.out.println("Cannot transition to itself"); + throw new IllegalArgumentException("Cannot transition to itself"); + } + if (!states.contains(fromState) && !stateHistory.contains(fromState)) { + System.out.println("Cannot transition to itself"); + throw new IllegalArgumentException(fromState + " does not exist in the state machine"); + } + if (!states.contains(toState)) { + System.out.println("Cannot transition to itself"); + throw new IllegalArgumentException(toState + " does not exist in the state machine"); + } + Supplier transitionCondition = transitions.get(fromState); + if (transitionCondition == null) { + System.out.println("Cannot transition to itself"); + throw new IllegalStateException("No transition condition exists from state " + fromState); + } + return transitionCondition.get(); + } + + public List getStateHistory() { + return stateHistory; + } +} diff --git a/src/main/java/tests/ParallelRunSMTestCases.java b/src/main/java/tests/ParallelRunSMTestCases.java new file mode 100644 index 0000000..9f77100 --- /dev/null +++ b/src/main/java/tests/ParallelRunSMTestCases.java @@ -0,0 +1,281 @@ +package tests; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.gentrifiedApps.statemachineftc.ParallelRunSM; +import org.gentrifiedApps.statemachineftc.StateMachine; +import org.junit.jupiter.api.Test; + +public class ParallelRunSMTestCases { + enum States { + STATE1, + STATE2, + STATE3, + STATE4, + STOP + } + + @Test + public void testParallelRunSM() { + + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> System.out.println("Entering STATE1")) + .state(States.STATE2) + .onEnter(States.STATE2, () -> System.out.println("Entering STATE2")) + .state(States.STATE3) + .onEnter(States.STATE3, () -> System.out.println("Entering STATE3")) + .stopRunning(States.STOP,()->true); + ParallelRunSM stateMachine = builder.build(false,100); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertFalse(stateMachine.isRunning()); + } + @Test + public void testParallelness() { + final boolean[] map = {false,false,false}; + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + map[0] = true; + }) + .state(States.STATE2) + .onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + map[1] = true; + }) + .state(States.STATE3) + .onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + map[2] = true; + }) + .stopRunning(States.STOP,()->true); + ParallelRunSM stateMachine = builder.build(false,100); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertTrue(map[0]); + assertTrue(map[1]); + assertTrue(map[2]); + assertFalse(stateMachine.isRunning()); + } + //Test for the stopRunning method + @Test + public void testStopRunning() throws InterruptedException { + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> System.out.println("Entering STATE1")) + .state(States.STATE2) + .onEnter(States.STATE2, () -> System.out.println("Entering STATE2")) + .state(States.STATE3) + .onEnter(States.STATE3, () -> System.out.println("Entering STATE3")) + .stopRunning(States.STOP,()->false); + ParallelRunSM stateMachine = builder.build(true,5000); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertTrue(stateMachine.update()); + assertFalse(stateMachine.checkExitTransition()); + assertTrue(stateMachine.isRunning()); + Thread.sleep(5100); + assertTrue(stateMachine.update()); + assertFalse(stateMachine.isRunning()); + } + @Test + public void testWithoutTimeout() throws InterruptedException { + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> System.out.println("Entering STATE1")) + .state(States.STATE2) + .onEnter(States.STATE2, () -> System.out.println("Entering STATE2")) + .state(States.STATE3) + .onEnter(States.STATE3, () -> System.out.println("Entering STATE3")) + .stopRunning(States.STOP,()->false); + ParallelRunSM stateMachine = builder.build(false,1000); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertTrue(stateMachine.update()); + assertFalse(stateMachine.checkExitTransition()); + assertTrue(stateMachine.isRunning()); + Thread.sleep(1100); + assertTrue(stateMachine.update()); + assertTrue(stateMachine.isRunning()); + } + @Test + public void testStop() { + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> System.out.println("Entering STATE1")) + .state(States.STATE2) + .onEnter(States.STATE2, () -> System.out.println("Entering STATE2")) + .state(States.STATE3) + .onEnter(States.STATE3, () -> System.out.println("Entering STATE3")) + .stopRunning(States.STOP,()->true); + ParallelRunSM stateMachine = builder.build(false,100); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + stateMachine.stop(); + assertFalse(stateMachine.isRunning()); + } + //test comprehensively + @Test + public void testComprehensive() { + final boolean[] map = {false,false,false}; + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + map[0] = true;}) + .state(States.STATE2) + .onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + map[1] = true; + }) + .state(States.STATE3) + .onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + map[2] = true; + }) + .stopRunning(States.STOP,()->true); + ParallelRunSM stateMachine = builder.build(false,100); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertTrue(map[0]); + assertTrue(map[1]); + assertTrue(map[2]); + assertFalse(stateMachine.isRunning()); + } + @Test + public void testTiming() { + final boolean[] map = {false,false,false}; + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + map[0] = true; + // delay + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + }}) + .state(States.STATE2) + .onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + map[1] = true; + // delay + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }) + .state(States.STATE3) + .onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + map[2] = true; + // delay + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }) + .stopRunning(States.STOP,()->true); + ParallelRunSM stateMachine = builder.build(false,100); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertTrue(map[0]); + assertTrue(map[1]); + assertTrue(map[2]); + assertFalse(stateMachine.isRunning()); + } + @Test + public void testStopRunningTiming() { + final boolean[] map = {false,false,false}; + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + map[0] = true; + // delay + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + }}) + .state(States.STATE2) + .onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + map[1] = true; + // delay + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }) + .state(States.STATE3) + .onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + map[2] = true; + // delay + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }) + .stopRunning(States.STOP,()->false); + ParallelRunSM stateMachine = builder.build(false,100); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertTrue(map[0]); + assertTrue(map[1]); + assertTrue(map[2]); + assertTrue(stateMachine.isRunning()); + } + @Test + public void testStopRunningTiming2() { + final boolean[] map = {false,false,false}; + ParallelRunSM.Builder builder = new ParallelRunSM.Builder<>(); + builder.state(States.STATE1) + .onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + map[0] = true; + // delay + }) + .state(States.STATE2) + .onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + map[1] = true; + }) + .state(States.STATE3) + .onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + map[2] = true; + }) + .state(States.STATE4) + .onEnter(States.STATE4, () -> { + System.out.println("Entering STATE4"); + map[2] = false; + }) + .stopRunning(States.STOP,()->true); + ParallelRunSM stateMachine = builder.build(false,100); + stateMachine.start(); + assertTrue(stateMachine.isStarted()); + assertTrue(stateMachine.update()); + assertTrue(map[0]); + assertTrue(map[1]); + assertFalse(map[2]); + assertFalse(stateMachine.isRunning()); + } +} diff --git a/src/main/java/tests/SequentialRunSMTestCases.java b/src/main/java/tests/SequentialRunSMTestCases.java new file mode 100644 index 0000000..5a31945 --- /dev/null +++ b/src/main/java/tests/SequentialRunSMTestCases.java @@ -0,0 +1,274 @@ +package tests; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.gentrifiedApps.statemachineftc.SequentialRunSM; +import org.gentrifiedApps.statemachineftc.StateMachine; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Random; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; + +class SequentialRunSMTestCases { + + private SequentialRunSM sqsm; + + enum States { + STATE1, + STATE2, + STATE3, + STOP, + } + + List booleans = Arrays.asList(false, false, true, false, true, false, true, false, true, false); + + @Test + void testBasic() { + System.out.println("Testing basic state machine"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + AtomicInteger count = new AtomicInteger(); + builder.state(States.STATE1).onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + }).transition(States.STATE1, () -> { + return true; + }).state(States.STATE2).onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + }).transition(States.STATE2, () -> { + System.out.println("Transitioning from STATE2 to STATE3"); + return true; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + return true; + }).stopRunning(States.STOP); + + SequentialRunSM srsmb = builder.build(); + srsmb.start(); + assertTrue(srsmb.isRunning()); + assertTrue(srsmb.update()); + assertEquals(States.STATE2, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertEquals(States.STATE3, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertEquals(States.STOP, srsmb.getCurrentState()); + assertFalse(srsmb.isRunning()); + + System.out.println("States updated successfully"); + } + // test transition with a holdup + @Test + void testTransition(){ + System.out.println("Testing transition with holdup"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + AtomicInteger count = new AtomicInteger(0); + builder.state(States.STATE1).onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + }).transition(States.STATE1, () -> { + return true; + }).state(States.STATE2).onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + }).transition(States.STATE2, () -> { + System.out.println("Transitioning from STATE2 to STATE3"); + return false; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + return true; + }).stopRunning(States.STOP); + + SequentialRunSM srsmb = builder.build(); + srsmb.start(); + assertTrue(srsmb.isRunning()); + assertTrue(srsmb.update()); + assertEquals(States.STATE2, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertEquals(States.STATE2, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertNotEquals(States.STATE3, srsmb.getCurrentState()); + assertTrue(srsmb.isRunning()); + assertNotEquals(States.STOP, srsmb.getCurrentState()); + + System.out.println("States updated successfully"); + } + @Test + void testStopRunning(){ + System.out.println("Testing stopRunning"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + builder.state(States.STATE1).onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + }).transition(States.STATE1, () -> { + return true; + }).state(States.STATE2).onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + }).transition(States.STATE2, () -> { + System.out.println("Transitioning from STATE2 to STATE3"); + return true; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + return true; + }).stopRunning(States.STOP); + + SequentialRunSM srsmb = builder.build(); + srsmb.start(); + assertTrue(srsmb.isRunning()); + assertTrue(srsmb.update()); + assertEquals(States.STATE2, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertEquals(States.STATE3, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertEquals(States.STOP, srsmb.getCurrentState()); + assertFalse(srsmb.isRunning()); + } + @Test + void testDuplicateState(){ + System.out.println("Testing duplicate state"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + assertThrows(IllegalArgumentException.class, () -> {builder.state(States.STATE1).onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + }).transition(States.STATE1, () -> { + return true; + }).state(States.STATE2).onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + }).transition(States.STATE2, () -> { + System.out.println("Transitioning from STATE2 to STATE3"); + return true; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + return true; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + return true; + }).stopRunning(States.STOP); + }); + } + // test that they are done in sequence and not in parallel + @Test + void testSequence(){ + System.out.println("Testing sequence"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + final boolean[] commandExecuted = {false, false}; + builder.state(States.STATE1).onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + commandExecuted[0] = true; + }).transition(States.STATE1, () -> { + return true; + }).state(States.STATE2).onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + commandExecuted[1] = true; + }).transition(States.STATE2, () -> { + System.out.println("Transitioning from STATE2 to STATE3"); + return true; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + commandExecuted[0] = false; + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + commandExecuted[1] = false; + return true; + }).stopRunning(States.STOP); + + SequentialRunSM srsmb = builder.build(); + srsmb.start(); + assertTrue(srsmb.isRunning()); + assertTrue(commandExecuted[0]); + assertFalse(commandExecuted[1]); + assertTrue(srsmb.update()); + assertTrue(commandExecuted[0]); + assertTrue(commandExecuted[1]); + assertEquals(States.STATE2, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertFalse(commandExecuted[0]); + assertTrue(commandExecuted[1]); + assertEquals(States.STATE3, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertFalse(commandExecuted[0]); + assertFalse(commandExecuted[1]); + assertEquals(States.STOP, srsmb.getCurrentState()); + assertFalse(srsmb.isRunning()); + } + @Test + void testEmptyStates(){ + System.out.println("Testing empty states"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + assertThrows(IllegalArgumentException.class, () -> {builder.build();}); + } + // test stop function + @Test + void testStop(){ + System.out.println("Testing stop"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + AtomicInteger count = new AtomicInteger(); + builder.state(States.STATE1).onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + }).transition(States.STATE1, () -> { + return true; + }).state(States.STATE2).onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + }).transition(States.STATE2, () -> { + System.out.println("Transitioning from STATE2 to STATE3"); + return true; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + return true; + }).stopRunning(States.STOP); + + SequentialRunSM srsmb = builder.build(); + srsmb.start(); + assertTrue(srsmb.isRunning()); + srsmb.stop(); + assertFalse(srsmb.isRunning()); + } + // comprehensively test all the functionality + @Test + void testComprehensive() { + System.out.println("Testing comprehensive"); + SequentialRunSM.Builder builder = new SequentialRunSM.Builder<>(); + AtomicInteger count = new AtomicInteger(); + builder.state(States.STATE1).onEnter(States.STATE1, () -> { + System.out.println("Entering STATE1"); + }).transition(States.STATE1, () -> { + return true; + }).state(States.STATE2).onEnter(States.STATE2, () -> { + System.out.println("Entering STATE2"); + }).transition(States.STATE2, () -> { + System.out.println("Transitioning from STATE2 to STATE3"); + return true; + }).state(States.STATE3).onEnter(States.STATE3, () -> { + System.out.println("Entering STATE3"); + }).transition(States.STATE3, () -> { + System.out.println("Transitioning from STATE3 to STOP"); + return true; + }).stopRunning(States.STOP); + + SequentialRunSM srsmb = builder.build(); + srsmb.start(); + assertTrue(srsmb.isRunning()); + assertTrue(srsmb.update()); + assertEquals(States.STATE2, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertEquals(States.STATE3, srsmb.getCurrentState()); + assertTrue(srsmb.update()); + assertEquals(States.STOP, srsmb.getCurrentState()); + assertFalse(srsmb.isRunning()); + + System.out.println("Comprehensive test passed"); + } +} \ No newline at end of file diff --git a/src/main/java/tests/StateMachineTestCases.java b/src/main/java/tests/StateMachineTestCases.java index eef6770..66f2750 100644 --- a/src/main/java/tests/StateMachineTestCases.java +++ b/src/main/java/tests/StateMachineTestCases.java @@ -15,7 +15,7 @@ import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; -class StateMachineTestCases { +public class StateMachineTestCases { private StateMachine stateMachine; @@ -1556,7 +1556,7 @@ void testDelayErrorRandomNegative() { .onEnter(States.STATE1, () -> System.out.println("Entering STATE1")); for (int i = 0; i < 100; i++) { int random = new Random().nextInt(1000); - assertThrows(IllegalArgumentException.class, () -> builder.transition(States.STATE1, () -> true, -random)); + assertThrows(IllegalArgumentException.class, () -> builder.transition(States.STATE1, () -> true, -1*random)); } System.out.println("Delay error tested successfully");