From adc6fbea4c69c725cea8b2d8aec1f484b291179e Mon Sep 17 00:00:00 2001 From: ell <77150506+ellraiser@users.noreply.github.com> Date: Thu, 16 Nov 2023 21:54:01 +0000 Subject: [PATCH] added test.physics.Joint --- testing/examples/lovetest_runAllTests.html | 2 +- testing/examples/lovetest_runAllTests.md | 37 +- testing/examples/lovetest_runAllTests.xml | 484 ++++++++++----------- testing/readme.md | 4 +- testing/resources/font.bmp | Bin 0 -> 1536138 bytes testing/tests/font.lua | 12 +- testing/tests/physics.lua | 34 +- 7 files changed, 301 insertions(+), 272 deletions(-) create mode 100644 testing/resources/font.bmp diff --git a/testing/examples/lovetest_runAllTests.html b/testing/examples/lovetest_runAllTests.html index 906348df6..48e480fcc 100644 --- a/testing/examples/lovetest_runAllTests.html +++ b/testing/examples/lovetest_runAllTests.html @@ -1 +1 @@ -

🔴 love.test



🟢 love.audio

\ No newline at end of file +

🟢 love.test



🟢 love.audio

\ No newline at end of file diff --git a/testing/examples/lovetest_runAllTests.md b/testing/examples/lovetest_runAllTests.md index 0c75c10f7..43e37f846 100644 --- a/testing/examples/lovetest_runAllTests.md +++ b/testing/examples/lovetest_runAllTests.md @@ -1,30 +1,27 @@ - + ### Info -**301** tests were completed in **14.670s** with **285** passed, **1** failed, and **15** skipped +**301** tests were completed in **14.726s** with **287** passed, **0** failed, and **14** skipped Renderer: OpenGL | 4.1 Metal - 76.3 | Apple | Apple M1 Max ### Report | Module | Pass | Fail | Skip | Time | | --------------------- | ------ | ------ | ------- | ------ | -| 🟢 audio | 28 | 0 | 0 | 0.890s | -| 🟢 data | 12 | 0 | 0 | 0.205s | -| 🟢 event | 4 | 0 | 2 | 0.102s | -| 🟢 filesystem | 29 | 0 | 2 | 0.530s | -| 🔴 font | 6 | 1 | 0 | 0.121s | -| 🟢 graphics | 102 | 0 | 3 | 3.232s | -| 🟢 image | 5 | 0 | 0 | 0.086s | -| 🟢 math | 20 | 0 | 0 | 0.339s | -| 🟢 physics | 22 | 0 | 4 | 0.434s | -| 🟢 sound | 4 | 0 | 0 | 0.071s | -| 🟢 system | 6 | 0 | 2 | 0.139s | -| 🟢 thread | 5 | 0 | 0 | 0.376s | -| 🟢 timer | 6 | 0 | 0 | 2.091s | -| 🟢 video | 2 | 0 | 0 | 0.039s | -| 🟢 window | 34 | 0 | 2 | 6.015s | +| 🟢 audio | 28 | 0 | 0 | 0.894s | +| 🟢 data | 12 | 0 | 0 | 0.209s | +| 🟢 event | 4 | 0 | 2 | 0.103s | +| 🟢 filesystem | 29 | 0 | 2 | 0.550s | +| 🟢 font | 7 | 0 | 0 | 0.124s | +| 🟢 graphics | 102 | 0 | 3 | 3.231s | +| 🟢 image | 5 | 0 | 0 | 0.098s | +| 🟢 math | 20 | 0 | 0 | 0.353s | +| 🟢 physics | 23 | 0 | 3 | 0.449s | +| 🟢 sound | 4 | 0 | 0 | 0.074s | +| 🟢 system | 6 | 0 | 2 | 0.144s | +| 🟢 thread | 5 | 0 | 0 | 0.377s | +| 🟢 timer | 6 | 0 | 0 | 2.093s | +| 🟢 video | 2 | 0 | 0 | 0.040s | +| 🟢 window | 34 | 0 | 2 | 5.986s | ### Failures -> 🔴 GlyphData -> assert 8 [check glyph number] expected '97' got '0' - diff --git a/testing/examples/lovetest_runAllTests.xml b/testing/examples/lovetest_runAllTests.xml index 0ae096f1c..99b1925c3 100644 --- a/testing/examples/lovetest_runAllTests.xml +++ b/testing/examples/lovetest_runAllTests.xml @@ -1,30 +1,30 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + @@ -38,15 +38,15 @@ - + - + - + @@ -54,108 +54,108 @@ - + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -165,72 +165,71 @@ - - - assert 8 [check glyph number] expected '97' got '0' + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -240,297 +239,296 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + @@ -539,103 +537,103 @@ - - + + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/testing/readme.md b/testing/readme.md index a6bace051..b01c6c690 100644 --- a/testing/readme.md +++ b/testing/readme.md @@ -115,12 +115,12 @@ Test classes that still need to be written: - [ ] graphics.ParticleSystem - [ ] physics.Body - [ ] physics.Contact -- [ ] physics.Joint - [ ] physics.Shape --- -## Future Goals +## Future +- [ ] font class tests (Rasterizer + GlyphData) with BMfonts - [ ] graphics.isCompressed should have an example of all compressed files love can take - [ ] Tests can compare visual results to a reference image This is partially done as we already save actual images for graphics tests to diff --git a/testing/resources/font.bmp b/testing/resources/font.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3180d031c68329717f9589089e902ba58885b812 GIT binary patch literal 1536138 zcmeFaKd7%qmMx~?8H1e~<_@4f%B zUZ!uar}y6b;eRFc^q)Td-~P|v{J;PDAOF|?=imSL|Nj5}=Rf+BKlzjY?$7@0&;G|h zeEiqH{q1l6oB#R0{r$iDkN^8`{-?M3@4fe5`I|zbOAg2ZIUon*fEeZ{K7cX8seeuN?KYstC+}A!{zI+L5 zX+aLi0XZNC%k0&z}C`FaF}`H^2GKn-7%x{rBHLef;sqZ$9jMAFp4(MsUUDfER`8^U{azGBq0XZNCPU@Q9m2ed{DazGBq0XZNC z*1D@6#=|TO;~|5|(!=mDda^K#o-E82H8Z_u^~La< zSr4PXV3-~Z6aTiL|2MJ>V`KUL$C)nE)f)HI+tOicchzJ4on<_m&x|j7YG!I>Y0l!= zQ!`VG!DRK$@MK|_z8FlF9)^d}!(jHTbyq!%hglfLLk5$jhv8xLWMLRRS(qzoW_r)+ zi{Ux59!7t`Fg+MX?>|^q`#AHoHTGHZ5G@_HmQ~I8&N628#qebH%+%Tw!}P`I$>KR% ztv&TH9%f;fz8FlF9)^d}!(jHTbyq!%hglfLLk5$jhv8xLWMLRRS(qzoW_r)+i{Ux5 z9!CEoVa~i)NZX$KgEaVfmLAV}hIv+B3{O_SOszdJOka$iES|H~+EWkXVHSqzi@{{+ zVR#rl3}(+-ch$pqn1x|HWH4EJ7#>DX7KYK2g}I_;ruVGA7@jlhVe~%|=FEGAwC%Y+ zNP~}O>G7Orm}m9H@MQJN)Y=on^u_4O;yGKbJ@qgiW?`7V7)+KPhKJF^VD_waS3Qh} zSs2Dc29u?S;bHV-VHiDGm@8^#de7>M;W@J&M*kyW&b(Jh+n)P_H28Ry9?yA(c~)Nx zPgcK7tvxYJUyPnCp0m~3QxD@|7KZ7I!DQ)Sco;nlX3tu8)x&t0g<(8oFj;yS9!5_V zhS8ISxuRyK_pH7co-^xV^gj~j%zK5j?YTclgO6wF@tkLvXZ6MKWcAC`+7rX{#puc6 zIa{qg^)Mc0VVJ%cOqL#ohtb1e_N;YRJ&cE07{)^elck5@Vf18S7(H2-D{5wX&+3ce zIkO%{|07|}yjMuup8JC|_;{8c&v}Mv(?&D5947LhUtsJ zWa(je7(EPT&sulY!+4m5VLW6oS$Y^AMo$)o(UXO_qGqP|tiBkYGwWgWKN9B5dxf;^ zxj#sQk7w!eoM)J4^~LaH^~==S6T|ey=*i+aTdh6yFdk-Mn7$ZHmL7(O(ZgW&taVpC zjE7km#zO{^rHA2R^kiWeJz1D5YG!)R>WkqyvmQqOBVo?GS4i8Q`-3$2IHSko(VXGQ z!XOPku3BveyjN)6X82(h<@)#)c^J(M#`}Qg3=e}r{65a`Fc{B?<_u3325Indrk2N} zIm45MK^lDginSQczDG3QlZUCrU{EhUz9$b;>ya^jU(h_uAH?tDS+y9Rqv|r+j>dRz z(0osgNP~}GQIFS;=2z^C(Tw`_afXM%cuq8Dco+=g_wh&OVR~mU-cK}Vco+=g_i=`Y z!FWzIXLzzONP~|vwLBip8J;W*(%|D)ti@>dJ)-%ZJWMSHgL?7tJ$aZ~kBssAg63KN zAbuaus>SdeRhQ9rG{$>_=6h;H8hreUdc1x#zhYmEX4J2bGdv8&bD}xJ!(b4sIlexfN>-WiPd6U`YO27~y0oZ(?Go)gU(o-7Q~;Nwg!k4JNcCkul# z`1loTF`9jkXuc;8Q;Wf%UVMB{9;VhKWBk6Ld6qwj-^a6RF+4}rWwafQ@!p{Mo*Iz` zAHSj=uOH2?*cYQ2_3Psd4}If^F4W(S_}sD;^TYrFtr{TwscbB2e(AbuZzWFDq>2IKui zbB2e(AbuZbco>Z5M018G3xhQHI8)2x(VXGQ!XOPke#KghX5S;4@5#f|Vlb!|AK#OQ zsrAShzb|N>Vuc*iCNAoN8#b`$T`Z&YGU_2+9 zGdv6i@%#8A^Dwhb!~{EB@sno++#&hRi8&xz&?4}(GcKK{r&Oz#ZF`-$cZ4}(Gc zKF;tk7|)633{MsYY4CBTmdB$x!;^(U8hreUwHVF5M>OA)hpEM2P%l2dCl6EWkuiQ> z&^*f@#P8!-wHThG>N47n#&~bgd{2!?gOA@;kMHpe^DLj4Ub1TK$&=OBU3s$hBFi5} z&s}RVy=P(e^pMfKr=C4)?b-Vy_r>(SCx+Q~26IKtS$#1)Ss3qg7Ux}fyfr+502+#q_=> zhS_%pb4ATreK9;)81Hiy=UsTbH)y_RuSkQB-&K$A@eK1UpP62=YVFCB)z@8lvi2g& zA4bnzYcaiNVfOTp(Y&XgJ!|dR`y=?tWMa@}#F+5oq?{gOCU3k1VXufB! zNP~~xRgdrS4D&3XnO?GL?a7nX*IjwC_9Dw4M$cVqF}-JD_Vkd^yr-T$Ywg+lBlpGh zz9)v+cLsAs%~^dhJXsj;a~9`ac)T}gzGtsUgOA@;kMHpe^DLj4Ub1TK$&=OBU3s$h zBFi5}&s}RVy=P(e^pMfKr=C4)?b-Vy_r>(SCx+Q~26IKtS$#1)Ss3qg7Ux}fyfr+502+ z#q_=>hS_%pb4ATreK9;)81Hiy=UsTbH)y_RuSkQB-&K$A@eK1UpP62=YVFCB)z@8l zvi2g&A4bnzYcaiNVfOTp(Y&XgJ!|dR`y=?tWMa@}#F+5oq?{gOCU3k1V zXufB!NP~~xRgdrS4D&3XnO?GL?a7nX*IjwC_9Dw4M$cVqF}-JD_Vkd^yr-T$Ywg+l zBlpGhz9)v+cLsAs%~^dhJXsj;a~9`ac)T}gzGtsUgOA@;kMHpe^DLj4Ub1TK$&=OB zU3s$hBFi5}&s}RVy=P(e^pMfKr=C4)?b-Vy_r>(SCx+Q~26IKtS$#1)Ss3qg7Ux}f zyf#VUTa5@vOdl z-7L<#@OW>~e9vBy1|NT9Jz2ebKhgY(wX!rbJjgd6XLzzOzAlDW_W_XZqKF;uDVSHUQXKJBbA7^;7 zFupFDtJb^&$Xg$0s(3t_Gdx)sq`}9pSc}o@dqnd+d6-%Z2KD0Od-5=~7>w7C=6mum zwa$h?zKzDS`to(NIPb#ay+QLmdqo<2{E_u!_3r&d^DEZM(#-H6-+Y|m$-?-$XwK9^ zxjxSDWMO<=G*_*82avZu&Q$SuG-r6SFi3-sU$GXW+4qR%d-5=~7!2yg$M@u6YB3nE zAIrqI;mN}Ix@fLi^9~?yeVnP{@o3KQWMPm7AHQNPMzik`&G+PCYB3npi;wTg z!_;ChUO$@e$-~q-8wU9{8qey>*UjR*3y=2(&G+mTY4Gt!)|1t{_Y=*pSSw32!-IVD zafT-g?}c^4k<4Vv%SE7IWOkE|!Fckd^fU$It} zW`+m(=Hm=c7RJ{_bEX!`^>KzL3*+mexoXWjfV}l_ri#a-Im45MK^lDginSQczDG3Q zlZUCrU{EhUz9$b;i@|vPXuc;8Q|oLPPZkDg z@bN3wVl?|6(R@!HrWS)iz4-W^JWMSH7Bu3X=Z9=VX`zcJXh4bXJ7KC?EteE zS(vtx+|?}23{S4|HXEZS3)5DTyUJ*0Dl$9_hN<hzC$3Gdx$+yk}qXr|kf<7g?CLlHAoS%?wYj@-`czCkxY7 zlDo=iW-2l~42G%osF<_)$LQG;v*)?EVqaI(oVBM+?^(4No-92K&z=~jcLtNCnW>e9 z$b{POj}9rDx;aH$nY>2rq-ik&gLJZ zXHU$Y=i-WeT~Tw^o-(~>)na(E^e{YoVwm0;OqOP*Ru(2pGsAO5&3pDGf7%W(dy$1{ zE6H8W(#-JWDsQtfda^KWCAq7NW~L&;!(fdLiVP2fVQM`p=4}2kdiKQZc`mNl*A+Eq?J3iHRxO4nOAo`dCx+>r!DMM>YGq-v zG&4L`)Vyb3@~7M8TPiNEfu3Ng>;(+#ai)+W_Xupp0{tlIO ze$KOt+Kcn-g_OtvIq(klvyz7?kwm6_Y-QwDDIohw|yuU+bouBjUqW0oEdm$xqKn}d?z}a4( z&Zg&Gw{*9~0qyA)*N)54ejVri9V+YmoM#uc7w6dvDUkzm;9UpK_WE=-J@2}uyDbiA zPq(;sT#okZIPdRJS?A|GyQsZ5&t6E09FPO=I&ikvr?csK*Dc*`aX@>z#kJ#dv|q=0 ze}~FCKj+y+?ZtWaLQ3R-9C+7(v%Nl@P0zb->28Yy+S4tr9ham1I?nq$RMz=9&n{{& z&a)R%A_wl`0Q0(XHVorEqnY6m<~$B)PtUU#jFLy*uSf2kIU5W{9x^WNgVA2>&Od$Ettsv-v-$pPkd3Q~oQS!+9^~k+5XM@4WL&l|jFxrcKd{z}X@JJ3YuPbN6F#E%3W_W}-j|1A%^Xvtq z*$YO=Bk$KE z_s*OR1|ts{m-fMEFZS_SRph`UIl#QGoDIY552Kmk5#~G&Xiv|x7mSie-mgdQojDr} zMjkRQ?Ss)??Blbl$N@PZ2jqYpkOOi+4#)vHAP3}t9FPNYKn}#{*|Vqe@z;O-*H15Ayr_N{ z=GCiLZxns~_18}yfBf;&FMs*VD!%ZP?|&4`XPn$PfBgPO%ri{uJxa{cy&RAOazGBq0XZNC?3>?`>GFy^pD3B9HFnfERIfHb?yD8^|04?lvlm} zR-Kz3Z%bFttC`%EuHM;b<<6|l)a~WAyy~sZ^wi_ty52h*EzLczTDdc8XRW(+4|;hk z_o!F9wLY_lt=!)JwlwwDT6KGCJ?>TOJzZPZdp>XF?d7ekyJ`<+p240Ut@WN)t$xp{ zxz(>r$GvsEcQ#s@dtSA2XV%VIck3SX@>cFq zuXbyFW)EArz5Q)z>aDfv_SSmbtJZtEwyyVl-pbp{TUmG29?U$0JwICOJ+E5*o>g#4Y&#JlAuV1s?{_-#X z^68szzNvl~#@?g6eEIU}`Sa&bUw!pe6<>J1{`%`Tn7{qozxCyIoty63xN_fW^(=P9 zx--v*^}S_0%B!B%T@SG<*3#AUY9`l7_{p?)Hhz+j6qu>o%WZkpTbpUG$GvsEcQ#s@ zdtSA2XV%VIck3SX@>cFquXbyFW)EArz5Q)z>aDfv_SSmbtJZtEwyyVl-pbp{TUmG2 z9?U$0JwICOJ+E5*o>ghHyLk9+HS?`*U*_q=N5&a9oa?$$l% z<*nSKUhUTU%pSIKd;8nc)LU!S?XC5=SFQJSZC&sAyp^|?x3cc4J(zh0dw#UmdtSBr zJ*(zczqK{J|ERgLEq2s-SygxD`DkhCt*v~vdbL~Y+fK!NR!dXQtC`%E^4{5K<<6|l z)a~WAyy~sZ^wi_ty52h*EzLczTDdc8XRW(+4|;hk_o!F9wLY_lt=!)JwlwwDT6KGC zJ?>TOJzZPZdp>XF?d7ekyJ`<+p240Ut@WN)t$xp{xz+EZtR1y)cdI+|e6+mit*v~v zdbL~YM?F6+O+Bw>a$EiO&PFSDW^JZ!FSq4YZ*8Wh9{1Mu-q~nr?s?V9omo3;-K~4j z%Uiiez1pqynLTXf_V%}>skhdu+gs~#uUhZv+PdEJc`I)(Z)M$8doc41_WWqA_q=NL zdsfY@ejjD+sC~O)-SYc9=%bwRPe1*1$;T?M?01w&Jr(mw_dMay?XPvJMG__ zi(^akmtTIlEVtE9@3pg)JF_-Z_uFs3ZJy=Unf%~`51P5Ho>rd8*4Zdtwa#oy^Ni0e z-rm~Ex-BnC-IkX#Yprut>b9<R@J@Y z>txG|vew$)nP;Kowzzw`TI(&|p5_+sqpZ!m-p_b+#kyD2+}fj+ue+dxf$bhXxJ>dxf0G~ID+l~*gDqt-sm z)Sby~Y3i-5tb4`%U8T9V4|iEV%D*ety`tvUIeoO(l9_&w%5CjmZ*4|%k9*a#uu^lY zrO?QgHAnYuH%JzcH!nYuH%Elqb^TjkZt=cu(0Gj(TjTbg=nE9+iy ze^+Vl?ZaKxkMi$|b+4$obxt4cwPdE>qjFpO*IS#>+~Z#LEUeVr>S?C#Om0h4Z*67W zRr}lPX{PQ>ZckTheWvbAZcEc0*H(G8@;Pel!%W?o+?J-^+RD0D+}~B2d;4&g^`rc| zV%;lhZk^Lddo7vi_o&>~{`J;oH21hyJqs%}w|bhXJCobe)LUCwch&y(dYY*_liSnP zTA!&qliSjC$F)^nt$dDJ`!G{?Cby-jx3;qG758_Q=H5QsW&J4su2}bqnp@}e(Oyet z`aLSQwST>}8O=TJRnNjo&8?nh>dxf0H1*b2)?Kx~y`E<3&gAxVwbp0q&g8Z<-EnP| zS1X^R);`SCoyl!!>aDG;d&T`-rMb5ccUeEmzbn?gqUP2)eYDq-nSPJTZS7xgZANpC zd)2eBQgf@PnYuH%Els_(m33F`Z?C7Bx-+>wU9I(*x-+>gO?O;d<<-jPsI?C>b!T#0 zntE$1>t1nxS849;!(G;o^6!duuc*0oP9N>HWTxMva$Eb?Tbt3`<6iYFtkm4 zZc9^dZDrk6``hbjrtVB`PgiSwrtVB`OVb_KR(ZAZIcn|0Ox>B>mZsj?%DPwF-&LA> z`*4@_qx`#D-QIKA>UU_ck6K&#{Lb{$+Jl+3 zmCsR2*G%1++?J-^+RD1Evr+1v@w%esGx>Owe|M|fdoEl3&aBNmmp#pAI;W;(M)MVO zt?w=4OuxN)tutHdZoO7&-m0mWca-Lpbyw|g&&!#*Gr2uot@W9@t=yy5RzANoJ+<~= zW^Ltj)Y3ImcP6)`skgSWZtHB6x@WwusQFAj9_8QN>h_+?R=+cAGtXsD^O?@6X_?V{ z#a!!q%Q(|-uU_lSmbzQ7m72F|>g64!d1c*I``hz!rtVB`PgiSwrfw_usI`^P?@Ujv zJ(yWr`5d)$&D5RAZE5PQt*qNR8>Q|UuPbUklaELFcelE|=d#uB%-YOz+0%Tcb81>< zG+!~-`rb0m^xLb~IPJch&y(yqu{!liSnPTA!)g$~|gr@q)>b}8EnPEpXL4JbdTT4|w$4VWd&cXEn$P6pQU2YnZtuBl^*ggR^IY~cpXr>M zmKn`g%(cF^j5GcA>b1^nsk`-Bsd=lWUfxlfSJqv%zdbK!>dxf$bhXxJ>b7!^T3h-2 z&h*sUgPFCJ&rwU)Ox>B>mZsj?%DSzyQR<%Yx}xSY`FNCncdOfbE?fQ1tj#=^J12_^A&Tg?=9m@zrA{`Gh6Czy;f@8s;QTEl;)LnSM6`l%bB_}xjkL2^_jY@+@sc3 zKEE?Pwf10UZRK;+(lt|eCby-jx3;ow>ui*|XS}Yc`Aj|@<=@@ve*5jWPoIAJ>5`9C zUafpBS#`!|G=KT!mrpzjo`C2m5Z!7mG%`X z)>hWN+nJp4Y9_b0hpqLMbyw|gtDmwqQ+Fn}r>nI-Q+Fn}rKz_zQ+Fn}r|XFI-gC67 z-(KC87c;pn-rm~Ex~qKd^)$17Ma?t)X6GK|-=o!?*|$|*t$Zz+>9>`8l;)YbGr27< zdTT4|-tA1zcr}yT+r!rS%DSuex7ANso2fgK+tbxrpQ$^O+tSoqo2fgK+tYQ#dha<} z)o-tE%Zr)Z7H@BDW!+Ui_j;OHzoO=uezS9r^6$~=&g|PNuU5X6%=FvJJxcRT-I?5$ z7rnKWb?yUOQYPc!RR)I8H~cJ5LBJzCwFeOu+#%GZ*aep|UmX`ZP& zliTv5x3;qG-Ol8US2MZ2J#4M7th;J|Tm6)^nYuH%JzcH!nYuH%Els_(nYuH%JzYnv z_nxCw{r2j%yqL*t@%GkM)?MXuucw*yD{7wUH#_$z|5|ld{=4Vs-|;T-nSaZB<=_86 z|JHhmzkK>IX`T00zrFL^Iya@? zRo9Fkt=yUOe8v5p*`MCoX!+b*TXn8hYM$}3l`GBf{ynXhS2Jt9=ePA5T3%y&XBw@~ zygv8(MKx#RGq01q^W1v&dtVdw{5WF0*Y6RU&Q`Ov=PSRCXw_Z0w#xtBYuHRrGn!}W zwsKdVjaI)spIf;zYcq9wxhaJYt>Ds#9J8LsNZPirrX6m+bSDuYlzdfH@xif1sb$hujpJ&!)_Gm`)Ox@ld z&G^yEozXnwRZCNEZANp?=hpfa`(3HI<<-oZH0%Ax*7MVQ?by0L^O|$T^SssnlGp2Z zhWjqLt#deY)_VT5>aJYt>Ds#9J8LsNZPirrX6m+bSDuYlzdfH@xif1sb$hujpJ&!) z_Gm`)Ox@ld&G^yEozXnwRZCNEZANp?=hpfa`(3HI<<-oZH0%Ax*7MVQ?by0L^O|$T z^SssnlGp2ZhWjqLt#deY)_VT5>aJYt>Ds#9J8LsNZPirrX6m+bSDuYlzdfH@xif1s zb$hujpJ&!)_Gm`)Ox@ld&G^yEozXnwRZCNEZANp?=hpfa`(3HI<<-oZH0%Ax*7MVQ z?by0L^O|$T^SssnlGp2ZhWjqLt#deY)_VT5>aJYt>Ds#9J8LsNZPirrX6m+bSDuYl zzdfH@xif1sb$hujpJ&!)_Gm`)Ox@ld&G^yEozXnwRZCNEZANp?=hpfa`(3HI<<-oZ zH0%Ax*7MVQ?by0L^O|$T^SssnlGp2ZhWjqLt#deY)_VT5>aJYt>Ds#9J8LsNZPirr zX6m+bSDuYlzdfH@xif1sb$hujpJ&!)_Gm`)Ox@ld&G^yEozXnwRZCNEZANp?=hpfa z`(3HI<<-oZH0%Ax*7MVQ?by0L^O|$T^SssnlGp2ZhWjqLt#deY)_VT5>aJYt>Ds#9 zJ8LsNZPirrX6m+bSDuYlzdfH@xif1sb$hujpJ&!)_Gm`)Ox@ld&G^yEozXnwRZCNE zZANp?=hpfa`(3HI<<-oZH0%Ax*7MVQ?by0L^O|$T^SssnlGp2ZhWjqLt#deY)_VRN zRkx?>k=FHm?6ceQc^{vTs-pePb6%ep^1Kw29JrDLdiJlhTRB>f+Vi98=D2nb7Jc2c z&pyiMeSAKuiuO0pd3|2U^HNN5;7ShY*}u|m&yT8`EEqkP`S=cB42k z#Uux=-GfD6H|?{J@_8ShkE){m&2wI#7xKImlN`8`1A6wa zv|Bk^kJ|I2>gKq14;Fphw9h`u=Y4!Ws*3hE&v|`b$n#Q6a^Ol1=-I#0Zslk_YR`|V zo8#I&SoC$%KKm%2_wo6tD%#&X=k<9Z&r31Mfh#$nXa7pO^;YY%XV0Ftezf-d!w)~) z%=_ZSi?;$RvsT^m`CQj}2lRE*dXGzmJNn#uz3Dys`?$Vel{@b5e(t?nNuL+q^+R`Z z;87gVvwzKuTxh<+gaW#yg;|n|QBgkazT1&+pq4amW3A+ugo1ovVHQ zRy8?r76%E6)>FVW<{e9crzB8Sxef?H7IdB#S^z5HyC&qNN_U)*(-g}6au3qk#J3=D|^mP+*CO3XZ zpY{B{JtKGA-?!cEJJY$^*Kbvm17~qS&;D6gA5PBQ$bAUpFCV za^rXOSGo7n_{Z=(Oa25yj?4M;Pq(ctK0XZNChF9b*A$lnazGBq0XZNC$`l-xoAJ3mZ ze}gHbE;%3vD*dHwqJ8xNTG77XT=hN>w!AP3}t9FPNYKn}CUQ)ct-1v;&}8ieFvNYW<`92tT@Ch$kyPs%I2Gsxym!l!wKC{PD+6<>RZb zzIyZTSiO4n>P@QNf7BgB`(Hs=6 zIO7$A8P&sZ&R~!p#5syz&6CBC`WlTRJt#iPkMM{e#j|+M#*g|MjibI$e3T#I5&vi$ z@sGxjs*7}v>OuIc@FSh0apXf*{OWpE>mTJu_|g4BJX!HkJ)`(homu>&JfnEM|KJ=$ z`_E#gFCCE&ct-1v;&}8 zieFvNYW<`92tT@Ch$kyPs%I2Gsxym!lxHj6-Z%I@BbQ;$`1c3BZaK+SjmD846d&bBc*Kw5Sv+UsM}3XP zQC}!N%8&4fe>9HxN8?A;MLI|IApBMMk)~kMbk@=zbxdtoW#&QT(XR zEdEiRt$2HH;ronS<@+Pgo;`c|)vtc_^vyTlR6oA_^2;}v=g*(V^riP+x1VPf^_+fw z6u;Nt=SS&5b-gw}M|c$XxqgoDDDHFp{3>{)6UBXxeva@c?sNSd;ZfY@`Z>an#yzK> zBOZ_ObA%s_drm(;iU-y8+Wb5Vk9bhrYw+_dJmR@Z+uBC_SjI>53!5qj=1>dxS@E%ZuYx z@JJ_$$3E>I;ZfZ3;)w7l9`o%U;YZ`f7e~YsadwaJqjBSl<54`QZq#S@S$M>Q;#NP7 zS$M>Am3Z{U?nm`oUK~ex5I*wSeHI?^pt#kKBf_J2%(r`lM{&!GBf_J2%(r`lAB`Jd z91%~%**(HvJ#PKQakQ_PZ}+QttWF$9>(1i+dke(nF;TDHe<0V|@#v%7qbysGBf^iy zBd^^*8jtlIN904q*?krs@u0ZXk0ZjPc+9tZghz49izC91#v`xYBOY6iBf^iyBd^^b z#e?dat~h4l5f6$-9d@6EM?6=Fn;&r;)gSZiev}8{jW3Q_c*KL^QHR|lJc?Uh91$MH zW4_%ZJc?Uh91(sr9(nB^@z{DC5&r7&*r(l(_GNi-T+I{f+5KqUN5z|8am?}~^4k4T z{8m4XN9jRzqdvPwcoet1I3hfX$9%iL3Lfc1aqBOR2#?}1-|i6}#Vs$62tOK+ympUx zY(0($KN^p`c7GHPs%yI9n1x3?C?0j#eHI?^TqSOP#Bo%A%(wed9)vf(IA-Ay4~j<} zc8~BVZh3J;codKMc8~BVZh3J;_|bUewR^;4>v2T*tH)!Xc0bye<;8I|PpoJ6qjet@ zZ+^uw%a6!w_eb$t{Wu<_2i1-G>>lA!-16dx@F*Vh?fxowq!Y!hzc?a1ipPArM|c#s zyf`BKXgu=TJ>s$TI3oOLJo4K8Q9P)w>55|(9`T@f)M58oc*Jv+xcL#sQT;LB?nikL z-uU8}g-1Ln9(C9~!lSt5#S!6AJm%Xy!lSt5#S!60p6~`<;BCp*a#c%cFc$6MgH|n!{ghz49izC9Lc+9u^tKgAN6u183 zi0~*L^X(qtQQY$4i14HF$ZPkA$JXPB@T2j_YxhU-pt`0jj#+rbgW^$#-Dlwu&sE~) zM;u4>$9%gV zzj{3OY4@XjSza7h^Tc{~KU()u@#a??v;2s>c7Ha0)3s_G?HB17<;lX2>Ny*J)Q3_1 zi2rOnNatugt1nbHi$9AeOXpSeAe~upCB3c?lY=8%9Dj3)pIuds1Kw1 z5&zkEkj~L~R$r)Y7Jn8`md>l_K{~VI$WIhMs_v*BgddHgei6?o9`T@f7Jn8G(m5Jm zt!I=U;aA7Ad>hp{S{LC_U4+kyA5}L?|Is|F{ksZ3(wP+>-DgyHlqU;6s^@I@Q6EP2 zBmT4TAf2P}tiDj)EdDH>ES*=;gLG!ak)J4jRNYZM2tOJ}{UV-GJmNv|EdDGWq;oXB zTF)py!mo~J`8KL^v@XJ<=d#v(Ygqa>LPqr{HVHF`j6&W?cY`SkKE~h;t>yuXYpt8Af2P} z)p|zx5q@<%%ePUTqjeD;)kXNM_)&GU^dHT$+P|ywkM2)azgaw^`VoG$o>Bf$Jn9R@ zv-r=(lhtolUs-xq^JMX#&9_I>gZ6PWj(kJ$EPlk3Rd+T2YMn?wim%o)%0G%neWCa$ z|0o{ST^&D4C#s9$t9`f{|7xGE&Of@JS^Z}5jOs`D)p|zxNAajH6wl&68&6ihS$$>c zSUG9O%K|~(KzxA#k2SkPgdR4{Ht{${V2X#&nW*W9`%Ldqx_?IRCjg!D4nP- zim&$JYW%Bxx;p>perENX#WSiO;aBS!U zqx+fFZx+v}euQ7GXOw>wkNQIKEdI0cWc8cXSC*dDJX!o_^X<{}pnV*TBi~Rwiy!f1 z)m_cMS|`$v;;Z$H@{i(CUnoAxKZ-|nSI3XiiRz;GY9Fq~zuKp(^N;RlR=-(1qxunk zwVqM_Q9SAk#k2U&#*@`=R$p0qR`X=>pUt;N(}VVLG>&{j@hpDClT~*$|7x8`KZ>u` zGs-`TM}49ADE}xP)m$6_| zKO0Y0zgc}{=~>N_#eX*69!(G0$I&?Q4aKwg5l>d#)%>e3NA(|77wJ4o&rx+peaONip1Z`+erEND__N|?(>bc=Y(60UNGHON#z*-PJ}aK3 zAL$w8M|i|P8b|ynKFU9eM|HE}qk2a1qdG_V5q`8T!Xy6CIN~3TkJd%_(Ygpf%8&3U zj_Qua5&vlXDs@M7BK)X7qj*#o#Yg!O9`TRH5&vlXDs_=g)Nd9Z@!Tao>fdPJh(9Yn zst4hZ(sNW@KVn4>Kx@q z_|duukN8L9h<`LbS{LC*>mvLpKfw2f1`aP{;c?@9)v$i&rx-e4=9dwBK&B4lpo=<;#vBUo>6{; zNBpC4#E;^m{G)hOH!D7>XB0oGbCe(9N9!Uy;vbD8{?YhoU4$R4i}0iT2#?~Z?r0qG zkH)W3cT^|BkNPu;M|Dwrlpo;{|7aZXkH)W37wJU(X5kUfUE-tujrNWBv*M$A5dJ7V zN7Y3>pg7Wr@T2ijeuU48XX!_JM)?sQ@sGw4KZ=j?kK$3?toW#&QT(XRQGSFUt&8x8 ze>9HxN8_V)5q`8T!jJMJJc^^bqjAJP8ox^2QJn}s>dz=1)kX19euPK-qjAJP8ox?i zq!aa+Bf3QijV3+_@ne3RTuey;z%dLkH$y&5k4!Pr61`T-v zbt3$zKcje57sW^U5gzf6#u5K${3>;kPSkG}9`W2IKI-3S->dmY^;`un-`YDRf7<@6 zUX}kpI4mDlpEU8`$$>|EULLLAqt2>)KFayIx~unXHUC`q=gpRH?Y)sdZGTp;%Ksl6 zmJh2>n)vVJz@t4ckJj%|XH`BQ<@{XT)%&)Zf3ExUX3Mws-pHS}KdV>e{|^q!ht(%d z{C9HT(Vmw_>-VU$DxZ&Xey;B7eOt{x*Zq03XRn^J2~)Z z& rd(>H#&qp~wS9kTkt>&NW{=C`pt-Uw$r|r+`Rr&ve!}4MENfZB_9C)a5D=qnw|syL#VN^UrmE-fa2S-W&PT_Gk5~{QtpW`LOz=iT_RxJlgZ}X#E~_R^{_i z&c9n1?ZfK$yDHw^p}KDon$;YTZ#7rm#;)SeRdl{}mYdzRFRuHyDEaW#3(e#}&w)pK zULLLA-u|yzm(Q!59pgp&usV)ZqPhsL_zw=qxAsZ6ia%G;*>?M)3a6rDbPr_CFxr)xV+do~sYhOR@ zv>lNTZGW^X2fPE1_Pjh=zkaXxoXh7u-Nv=hKCF%-MW`;qEB=E6@~wRmuHw&Cbhh38 z>FQnk`e~=_h-6`gIjf4X|tzJA(iJ0c(2{%BPWcn2Qsd3m&c{a)`mm(P2;ty*$G4#)vH zAP3}t9FPNYKn}*ynOkRD=5^% zI`Gj)AHm->LZ*E8-FGmjym!_m2jqYpkOOi+4#)vH@E8un-%Z!of{(H9GhOQa$BcW* zl>>4>4#)vHAP3~YV>_VtACJBNBi(=e@yAc)$3xr4Rnq~$Q3)DP}80MbgsbQk#+C5Xhme-5b zJdCw!nj?m}U&+(!v$npq_ZnA>F@8i$&7a6yyN^7z`&!!;em%*&uuULO;tu6l4 zYDGQF{Z^i+nYk~ude>GxJ>Ig;XpESnH8XuhjP;=RAJLimz4>M1);+iUk&&rYQ_a+< z+7HY`JbPD|NGy+^YO=j{Krq_!~PvL^Ykn~f3?Nqnh!_vn5R+0=sk13nBHr3 zYk6B@k-Mgu!Nl4%4zwS+KTY0wh$()Uv#u%$Hb-89hv2HSXw7 z?Y@?`C066!5@TvJypf0Tnc-zHEB7nb-&$*nKebv>4|BhjCu(NyORe6uRZow%tTP%T z=4j2mz8Jr1m@R$ww6N=0wU6XsJdOHl_ssdK`C8+Ov0C1iSmdo~W-zgK&BKUc?irpM zCTgzTGxckEy;#k|SgWQvVwn4tJiR_^>sx!Tam5(pN5s_piM+M@$Wyzo!o<3@a~UzrJ;PJ` z+e~pUKKS5+pX_O@zjZI7hedPTpID3OE9TVhxAH`Ng(vpG+((}aPrR~fMV{K3kC?4} z#U5(+j6Vz}YOeJa>u=rnEj)WZ7g1likNz-wS}-xM#vNlZhpAQD<2|2?*hB5Urg2Lw z`oo;nt>=fS#rRzFV@oXR*?Kl2Pt8O7U0@r_=jAQ?wZ)&(SIpbu7sIplY(y{0*8sh% z_H{z}n#g~&e)rn=vosff;#sg7HZmR>c8}4{#mMh}?4iqQm_8eee_Jlgw{azp)v$48 zt?0$p^JQ9XWHd9i_QXUlYWIwuTAul0W0pU)S~13GW-yVrcE6R!e6f-7r&izcZLIOw znvFF~jXTCH-^Ln`t=U+^MBbzCO{CijWtY-`^cDSwUN=haxYAWjf|eH{#gwhx7Mn8=%XZ~fUQf7?=8KJ4{?uy47^9iNMBdu{Rvz=kM#i67eapA8#$#(X)-W~h7_)pE zYdp4QV+|8|kG?mpHZqzE#_%?7>4V{6Fih>OJl3C$g{ODzS*xbSwAxtHY-={wFg5NY zW2V(cM)S(OFda5Bdbav!HEi5k%kpik@z|P;H4M{-<=e>c6pZ0*WNJkW!^2=AZ|1%A zXX7LL6aThg&1dszJ+)eHKe6<=gG1F%wv!AtkmT%)q9;;#F%3874Qp@Vv7%{bb z!`jGbW@_z;sr40OjGmZN?#&k)v;3*miZMnrgNeMg`>j0Yi;avwwfdHCV~xkwY^-5w z+%abPHr9A-&Bhug@*aI}T5V)B7mVR;+|mcb!(f=&TY0QM8w*eG+Ot+oi)pp7rrFkP ztYK>0N5)L6jg01%dto|kWb|zH&uZAXwU*`ESmUuZ8*3P*56ica;VBry+sM?47>0+z zMBdDM>(9nV_QyQ1_ZBsuBgXbm|Nd3YE$-`3^VCM>4A!byzKslz?Vsh8k-0p+%(H4S zda^J~pG>V9&nkavwPK9X%wQsK?S3oI7Jq8>86E~xhKDO{|-LI&J;bAb5H}hWp zymj;0vu97`<9EON-P1SUd{g}}O!=NhxorP_{_~$#@rCCXzxc(Q_p`0{C~sBF&9>}k zt>Te9=4sS0dS7^YSFKhrr>y(mnJRPU_okRydt#VA89g&+mUQSux zQme+x@I*}3J>ySpFPQqZUVE`xtzJ%9kNa2q92Ye+y)(6In53aOAGw+HQ`21I?!_1$2GgrEx?bKVL|^P4ah30x7$%O4 zr-*kno>luup4y&AJDKmQ{=4VKA#SGyAm?6MNr!f22Q5?JN(OS|b>}|Je7xL&d$R zor^8cK;h|KwOYNLt?Nv!JuyrljGh`#+^@pZySCQq@z&O}YHj7&;!mv)hKIq_xMPgr ziI}YWt>=fSANyqPx9)r7W_TD(f;?EruszvhEpwYJ0)d-{O0%))t;x zPSniwUgKe6S+y7*2D3^tvtKJQvG=X_NBYCm&hn6{^(dHlR<^z#9LZBV7f}y$&-7la zwd$-ewf4j?eKLA#JaK;tPw(1VtH)bg&#JYRXNy0zJ{TSbQ{#>?h9_dO?zf&Frhe>` zx!=0)k(=RRFp;-*zm+F?Sa?=lS+y9Rh{?KV{Hg5)Q-6!^wOU(vYB^Ce(|e7FiDlJd zco@to&CGtS#KhjW-XG}?Q#;E;rq-ii;#t}HdT=C9?eEmYzjsr+-=dj0gIQ;XskQRw zI=A$}Xs+=dxfkVcM%nLa*%&o$?JJ9Ci$Ae;xo3D7OpQCn7@ml!{oTphvm0ZPr|eg} z;@^%cn8?H2M_%T>c7E({mDyN+e!h3rcw!ENi8;0Vtvt+L)aq@CWz}MMBIc3K>XyB! zYj2ImUZ-s=&rrN#t#Y2XTnrC`VQO#TVV={K80IxIV#>1ERvy)= zIX4%pou4f}*Lb2b1`~5?_gi_k^i`|R#IkBJJPamFb5<=zPsD89_sCPbkA2ndYk4si z^NQwpF_@TByJvV9OpQCnw(v0fwI?R_RJ&*N)bh5(vT89rHO!Vh-O}e3bF#cS8xOM= zTQt|s7gK8sCaV_1!(f;mw(=ag7mQ{Gb2fi!dKjM>OpQCn7#;=_d29C!4}+<3XT)mf zXN#U1Pt?a?VovRTE6SGun63LBd208uuiAYrFUDeC(Ht)Z z6LV_!3=e~;amUye9%jGx#KfLz_l%xe-j-NaErzFt*|Miw`n+OJmN#ePVfJE+=GysU zYHh(})na%U4Aa9_o+I~y(ad1Z=1)xz<1>S)amN_L!(bwB?VjObFg5OsSnd35(Np7z z`WQ^isoiho+0s|7J`>BT#qcngEX`T97(EfQb>AaT?LPKZyRYTNSj;P$i}%`l{7uVp+8q9tM-8Ija_lL+7lCds@*esYI$2?S+y9R8fMF$Zt3%iIa%IBo~^%|XTPIkBlEjDTYvvN{yyr< zmoI;^h0O0wMNH9?an;W97G8#@hKYSK_vQEDZSQQ1nrr(N&ri{_RyWisT)>=#-5p&mCwew@ohmGagsqLAMG0#`@wA_0RcFsH(wf%}`toFH}rZFQ{ z)5G)|H8Zb2TWf9Ub7igQPwjVuBc|xtaxp%~TDAKvwO4w`^u=i2!c%)~iJsM7Hy8|~ zIr1>~Th9-phruu!BZkpj+Y5Vrx3Tv+&*;AkX3Kf6^&WY)-q*N$vD%(9^?ST!o#BZX z=5rTQyVe(z7cmS^4HNrf?wQ`1S`1I@v)nTpBZjHPXpX$Kd!|;cuNd1?&(>N|Gjsn) zwW1$P?*+5vs-4ANjH$(FuGQJn1Cz5=PtdTQLOVvNR!VKmqFBKA9GnKK^O z{D?eT?`zz>SZ_a(mL6|eN4c%|Ru7||T3->v+%r5iOshw<#`MnAVt8u3BVDaHQ;X5u zs$pwPty*6(wx^!0wW4O`{*h`$KbYPNX3J&gZ)9X@F`8>NxAef|Y}FGro~`$-eKDTJ z-kE#GpIYt6UE_(E+I@|?7u(arT3ZO`u-E56mksHfIf#4z^^PYu)R z5v?)3Gqo6=TJK0#E6&tnG`DKl8dIy*SB&kcXKSsfnYn+YTG0=t_k!7S+4&n8nOcnI zTFoszFgaWGM2%G76z zl-r7L^)TwG^%XJ9J;PJOw0cBqOz%uBhNsp$($$JHwHVE<8n(vNs`V9Pd+OO*D{5x$ zAE{RKgXz6swp@1pMn>57SqTXG^VG50Qttuj#3AuZl4mBZkpj+l$yk4dZJ?{GIQ8-(}8t zT=OG~r^bDzSncebN#9m2ckOGdA2IJP{yfTa8uw54`#EsMGj>JIt9JA*uXU^Z5w9GO z133<4z3yi5TE}%OlpK%)D;$Wgsaf~s^(kJFyM~E5SG>RLYxB{4o&EeA z?N8RTa(17y`V`M`4qWk!T~YI@9lpzJ-70^?D+lC2-+}m=nsr}ZpW+p{YnYgG#rwOy zHXq&B+0W0>{$xEXXZJa)Pw^b*z!lHf6*aHg;k&%nt@1~_azGCB9f+@~S@-4jDPEDg zhKV^>yua&f^U-~s{rnv5Pu8(bi2e7cqcwLOfnYjq^G zazGBq0XZNCz4cIqmSPFeC_9-f8NCkAP3}t9FPNY;A{@~&xL2xCOz96(4KDdO<8hal>`2n?9I>g z{=;i!yjg+woXmVwr{`pHJqG2XIFsu!evUYO9L+tCpCi1Fd%T}Bm@K@nh33ANpCi1F zdpw$ZJetqsdQQaS<16r<6V1H_X1MM;ISRcppb|&*SF^kK#Vp&pqD9(VW413^Vt& zJl@Csd=%sHe(pK_++&!z&qZ_3gD^hM;5`P-Jtvx@Togw({Tlw0nL3W7LBcc+bhqyXO4?fOwc(kMTTA zd=$gry#_S*JbsSwKJM{;&S0|ez80GMT7Hi3KJM{o?(t|olj}JVkB_gwdrma>8kqTN zo>6{;_i@yh$1romgW`yj!6VFQ9BJ@zhSTGjIpXxW2;<`n-eb_*bNac*`#3ZAxoD1f zJRV_u9N~Q&%{`BwBRq=xTtD}CA4hWr?=j5W*YbED_w!MV$NRbG^mC74<~|qAJrBb8 zID_{XH20inj&e~P@u2u9kH;g<(YWVCbHwTK2s0Ybdf$-6)6+ld!3w;_-Nd@o|LraWwZleva@c?sNUz<9!^>8NA0Zb6?BjecaDSF&^*dp3~1ghMD_Z zH1|9R*ox9PYk1t(c^it=1kog43o?BGRlMSD2_BRcn0J75gx^T z?&zH1WH7!i!lSs)^>YTFg;`OT;bipB@G$%g#%su$Gj$n^*MsmV?sHeq84WWSCYR}P zln3EaoYBz3l=mNnzkDA9U54>G(7eTi_?ft`wNdKu+Gcoat(7(9dV z{0NWYK6iA^a55NQ7vWLd=lVH=&%&&z%WyLKXLuNX2IDnk&6&Ck#_K_N6!*ES=ZuCK z43o?BILd?YD9&i;VeGv{>wSY^ybd&P@$|H`)_uJe&epQ%y=Fg0 zJS#8^C!>eq8O1R8EN!DaUfax^smoxz282g(pX=ugeoqXejnU(IvgSdDWp!eXz5l4awCt(^f|2T7mbR%pB?T zxd_9=5l>beX+ZoQpM~+9XwKB~xeT7cFq|uRJSQ{vI{kbm7xDNwn)|vQgW?|J=M0{~ zcuq7Q{HE>*GGx$C>#|uIC@+L3kARwfvmHBg{*c0P5%+y7>DDLYrbHpbyIMRdoJ)XgM zJTsr+^tpbH>LLt^&+v?L##-gy+$|s9fB$`4`tjas#P=UR0{$?uzf)-c{_Z3E{)g`$ z&CRnCcdqi`u&CeOU$1u60_)$*J z@8_dD2#?~vmY*X$iu>Hr`3$Ge^>d^FVNm=i9$yz}%ZmG2evbG(hMAA@AiR(JInuBv z#%q|Vi*ixi*Jb92XEg3>pMVgzGYz5n>ZY4f9u=wdJ^*T+YB5FW*SEk9@QSs11+Q;Xpl#W46RZAbC= z9?{%u^K%C8F--0#ew5Sm`}rsj!lSsa<>v^G;y!nDKEvsA{TyjP7!*H>$Ja&Lvf{p$ zpCf*cVdkSe2=C*5jx_9v@fv38qFfaBb(uNh8IAi|DA!~B9N|&i=Z?-1XI32PLHr)i zU_73g&v5!&KSy;D2E}K1Mmb}xXV0EJm5<;3?sre$eDh89!!YIV4x-EJDDyMF|A<;^ z_oz=FujR#<$NPE2)$To>nR|{Iyys!&s20jacppc(KJM{;?lH{V=Q4AK(_;{)$DldN z^>LKz;~tOZ9*^cI*T;P>iX)82`?<%XxySoC!uz<#kIp?0Ge`V0xt?=|XC@bEKyhEo zW6<2=(VWRe7$5iiKJMopZE?#8E9DNBjum<9?2Ke4N2Em>EvQkK(?T zpL;x-d%T}}ypQ|&D8}Rc+;gJ2$D=vQ^>HTGV|*@}dpw$>TogwG+~d(4<@&hKMRA1jct7`eH1~Kv zM|dCi_|duNVdjW`Cf9S$@XX{Q4Jhtwc?_C+Jeo7P2;<|P-^cyjWBeRpd>qX^51OOg znK-KD8W1~bEn_)*-~@^gF+~d*Q zsFsf-euVLHKSw-1&fpo$3@748abL^NJs!f0mWkJ^``>dx%x6*bTFtK9QAptJYGUdV^@oXHs_ z+Q%99j?4A?HahpJeXft6VSYAkEA*`3M0>Yqtut#t+8#N6)Y&+y?#y0aQS(f{%01Qr zf8PB3SXIYXmk-DKpH*G^nC0ZYJbvFs=U%DL_3<;z&!%mKo)w&E@Aj;9W(`Q&Bgce%Y?;aLB(s%sy!oZOek@7w6yEA_cPeunwkw5`yy zf)nlCp0&=b0cm^W_)%x$sJb(IeMQYP{VMlZ2mE>S^J7&VTU|aJ>wi{t?PHdc;*kS# zKn}(`g(1xzhd9l0iEZ4{Z=(OAP3}t z9FPNdbl~;t*H15Ayr_PZuQfjY_~WO~KKtyBt?$y)t5>h8-WJb)`O9Cv@%QVmzurZQ zipYUk2U_R(x4-@E({FzBo2S43`@f$pqkK6a2jqYpkOOkyK^?IF*7?y#A3dl8Yuhfq zmY>HeKI@VLS9d_?`RY3;{c=DK$N@PZ2ab0@??2Y=fxcc_>#x}NbwKBNU%yptUkB`b z``_WSc~oMbJ8j*MtAFp$Y8Soen#HuduwGkz8pg(=r+3vfTYjwNf36(y)-bKUB9G}Y z4Svkh6Ki_SzMh}g_I;!;tJ$hm+b^#H&5b*bzE)hb`xa(oFO1KR(Vv=!9$)5O59+tZ z6Knb0SfkaK<<<6r;X#<1=7_D`kMw2vvmUm3H$63sc^Ai8?=2qd!^YNrm0tbjd-ria zuVGA2)L!o6)zV}6Eq|hB&u{q=<24&5j^1ZmYw`HHW!~zm#bdSN==GplTQMX1Wwl2= zw7fXhcv}9%eCB@ZULbC-IbvG1Y)=a&UbYs;+Me2e)p#PW-M2IwMxz{UpO{!jn(Pfz9NKL7mB|NPC*3;gMy{^^_h z60`ij`m4Ws6DvPYUM}YKpoVGnW!~9n9-0O}#@=hSjK{`NjIZbCwS6DytER{Emw9c! zBBpk4+;JT3J?4+>Ma(Vt(Vv=!G0$tR^;%*zo>d8f$v2R;%|GCcBpT(b}(aUi{_HkB|F#4P$-Pda&I1npwkItmdJuMa{-v zMuhR24HHMdr?wVrc^+T4%(wb%wc_aYpjulo%znk1zW1or?pu0{uf{Xtv+=aXt$Tqu zz2=B%)iPfSCSJA{$C`(>Up1b{Yxgb9hS4YoW*m6=^5vV~<@@B5Pu{%tzW@IFKmKl? z@jie4{OQ@VXHR8BzgPL|U;p|IrmU~H>=~^+TUKu?ru;r=`S|LquV8=njK|lx@4x^4 zO>W7L-V{CPcTMf}p!i<$zWCycA3ygQPuYu7xA2sUc|E9Mm_07P4_maBT2?=f@pn6G zwcZGI|JTBl-w`b}3vaAt_jWG*zL%Wx(b_M=l>I3eQ>%RK7%$V&8e=WvX!YL0Y}pIr zE2HU&{*-%L^Y}7n{Mot}u~zZ9~V(L=A> zFtL_@4fXgkuX$+o?KPojMpwkNUVp51dH&;NuL=IOJz`ou8+X=gg6T1TyoaXCdM_BO zAIJEbX}M)Yui-7s*5@MDs_|G|#%KF)P?ppBHxA5`*7MFh7d4EX`POq`8sj*tx#pqu zy5$^3edV6ni!HTkp9`2;@jP#R-tF0Gy|zR@{C>qX-OGVY2Wqc1#?PEx24j3%#+E+g z+lq;wD~!*N2vd7qvAmX^=vR%0!B{ODYdp3#qQ`RlxThYgThom8!g9(OF*P2KpP9#6 z#?{)37AE>^SUW7oUO1nIkDWVv8B&yY{l4rLurli^NH20y{_0=;j`}>S=lv~@2R`1rI zoza?R)Sr)AUuA#L6){Y$7AE%fkN^0OZ~pDg^6zij6*2z&AP;@qcx)WeV>y0o>G3!} z_nLjY%(L}){|U~&5y8%VZK*q-?J%R*kwHNxoDl|*7tR65A9rAoif^5 zYxMXsulZcOC?DnAAq?uPRy)2Pz9IcD|5wAun8zbMhOzJC6^?SX&Y0!Y#(16?3{$Iy znXMK5s@1#Py_;4WYnpAXHJYBN+2=$IQ>%rE zd+PnMx-E?9X^qBX`Kaa^cZvD^LYP|I_M+yq;Uk8rRl`Ic zV_m_V?@bTW< zYT4^t`Q6I$-*C!@T@l07YGGRb#9F4okAL@ffA{pwH{U${!$17Pn{ca^<+U&^J(gd? z*!~o5bVZEuSiChBFXCnX)bb+M?tSmS|NZZu%E!O{>%ZFao6%!z!D9;^lnXWqP7!TQ6h8SglbH zjWh14_lLolp4MnQHnucJJ(lCgi1C_7&b)DE>oMLknlHAewOSEl`Mxj1#L@42Tr0KE zWgf+KK|uj{^cEbxwkc2 zu)V1Hj4-~|$eEw5<$Xi*sQDMa_{C3N>kJb=zgt|R99Zo@?X@P>G)(QRw_a-^&z5_u zJ^T8^@YM8K&#_Pc+EdFzvDw!i#M{!->iukbtiPIOv=^3B#)zr$czl`HFp($bwC??0 zARdn~t}T0Exn)GPJSNU-y)zi5R>Uy1Vr_rV_+xmhWg5yDFT)gGy9{6U2VD_UWqq}Jw_2^AL5}|x$5uV2YwLd5xr;wr?L9G!oy(QAte-e~e@su* zT-&cLd*OeVBG#(?%y`tg(jU_^vKKYYw!d}`?X1>*rr!FqzDz?IjmO5?b7A58MTWqPbH(^)%*vwN{;E$btWt-eg3_t5g= z8H=9kUJk5sz+NByYmL>iXR`L1K7ujqma(PJ_zYvuSZyqSZ=-x|Q-0nlUe;$VFJfD@ z;_GhAE%#Py#M9bqYSilgj)>K@T81t6=o;y3tDab!;i+kkeOZ5HL|3a8vlqUG&6!%| z%$1L_KbBX<+I|^d)?T#wvRXE_{4w1}?S<8kV@;3sV;*`;%y0QKa>i=4OoxpvOswV4 zhG~v}6UcbWXqY(q-aVe3o94({?#p@cmp?xLGw`Ta6Xv z@1f_2J+1Y6rP!*^CuiA<)vq;I+UvV%Jx)VIIHW*`FA-RSKb3@mjjs&*ynP4 zy{vtGZ|yTqe%E_AnTx)(B>gufa{vp0%uIYurQ65qsL|`3h_HESLSsyw0*0 zt6ys}JrmcM17|s7W2%3OUiA$Aw9?~5?s7IBXUEj39B4aWpUds_vfRhZ{(4`qi)A{9Uv1yG$9E@!DAa-MFIB|2vwtX8*3<5wA~sd<|}X&ep2^JEO+E zWt`Q+)I4HO8C_?_*t4wnA7|brY4Z-)zx`>i^R>@I9)I@vs%P-*eXrD~&jl;p6}KEX z&H?7xHjKTt`Z4=!9namHTW!;~=jX0Hz6Q5bF$!V#t8M!B{M=P)o4(b1JzFc=pIJSOU)h?Onpelzd9>#utDm#%g?+7B^ys>W1GcAj zcK3V@U*Vwjk^Ky=(0Uclv%LOX#V_fU19CtP$N@PZ2jqYpkOOi+4#)vHAP3}t9FPNY zKn}|bfy6)kC_V*t9s4nDy9FPNYKn}=($8+FOzBgds`+2+_ zevFQ_zmKuc>QWBK0XcA12hi73Y}`JNG2h?!803eq>*ob;wPLQ1+Z@&M@h$wmcC8lT z^mRQ)nb&wc#^?IE$9Ntl?s>|*XsBIY8-ww@9`AV!o}PlO zVM^T+x63egZ(}X)HM2a%w*2WqJ@s}KrFLS#rZuhOx>xs1xPc0sK?B3V5n2n>FYjr)p=5jy|$N@PZ z2h4%;xyFB<8Htyl&nUU^d;5{I{JcuRdR+WDmRGM{J-vAG;tl4@FTecByyz;m3U|DG z+G}=I5TL;A=W#obkbGM{R|_ z#QYU8rq7=Ngz-F<7srz8f8MF4-(!4T&+q3*kLM|8v7E!GC-TpDUe2mrc5cga@cQ*@ z3#Xl1a8U-)YKTXfaD@_Ng>c0PSA(_2O#_ZmE> z$CtTz=rO2n@ zT6`1}@iom>r#IGeBfoL@xS!kl$jH?77(YjK5XQ&--1GRjpO0b?-p4hU19CtP$bs`Y z(0XrSYFn7{dC`BA&n4Lx`rOOL?em-08FLNewa5R?>oLsSb9ubQ84ZTDvBp!@YVpW# z96s*nwq8abFLU%!>e^)*Jl581G>qNb=;MBF>t(FPz0QIu|6RW9o4+E))_mM+j`LF2 zF4N#Kwq~PY?7octEcv<~z8`?=@xaX;^2d{2H}@(_>b)Lah80XZNC&f!4$zIORJj!!=M9Klc^!UQJwXSKg(R%b}vaF5178y@#-wk86 zZS--Q``*jkdv2JPX5-c<2jqYpkOSv%z+St{_d3wUU{LN%JbsQfuF<&Vl`-a8Zypop z2;<{^?(=JLR)f#=^HF}o`?`K^>t*zDKOe<-e3_g6$Z2tpLAgF2dHkBq5yr>;-15rk z<9_ZjaqfGGYvsQ1*oR;D{C+-zDY;$`Gxzm8-pBnMVSL=?u`i2zJ_b|py&DP2foi3%L5$Q6)ONHi8o zNoSEVG?tYLL5EW&?TOY2&t-XK&Gw!-bMA-lv!&xTd*)5zziQY&iq&cM^0Sm@&Sw;>j<+uX2}nQ!S4)6v#_0az^Ups&+`W7E zaPQu|i`P6ZBkOuSA!h9Fo)fIkwRO*R=I1o?^JuXh`mVvK9?SdLuFuoO>m`v_H1b)h ztB%e2%=pjw5i9$waXU@+k#o*|wrI#dSOgRNWj^@j7&dbt=X?$@uCwUz74{q)!Y|Ls z#&*t`ymH)}567`x&KwJy{fzd*JYvB)Z|AW&pV;p5&-%PQ8cPl{^Iq#>Y>pM%-ToNM z{|Px(Z0Fb8I=1=$gqj2ToWrPIbTgV$awbl-qqx+PLGrr^wPh{G z!sh+49r~`}ryk4u*&g}Kn%J&wc5K#le!_2#wWRMfHK)BbHMj6zTh2GOvt}lr?61>r z@!9#waYi|#%W<=wc(FZr+g(bst0{+vUO zwKTTs(aq$L$5wszlXa1EZTWZ{>*~t;tG@b+e%8cxj*I`SsXoxeezvP0#$-QL!`M^( z>>Ue#S_w!%0us1d0$e9<+Wkl5y+@<|Q+@5_XDN?8{MR+YQmmV>|CCxz89QRL#~h9P zzwXD*H7{$pU56ajOZxHHGXm}vvJq>U-G#px1|`Dwf~e_P8mC@Z;v?|`F~xH#d~z(Z{l3@ zvWDAr$YD*sTeP>K#w}bNBLN9WKmwOXfHl)~x&Mf3X z@xN5Ymbgp4u6q9|wVX0`RQDcpH1hwt9)sJt=4B1H>yX2me79(CLycRwI7R{zkbnd( zj{w*Hwf7%n7~{O2K|?D62}nQ!5|DrdBp?9^j0kxDF{0x!2}nQ!5|DrdBp?9^NMH{F z^|uAP*FPRScyRpQ-T409rRM7&OJv+H0SQPz0uqpb1SB8<2|$4RhIsE(Ji7Z2H1QhA zQk&5%jdi~SBp?9^NI(J-kbndva61Ta-!QuWh~MRk@1=>~jC%6qN&EQVgAb0H_zoMJ z1SB8<2}nQ!5|DrdBp`tiftk;Lpy6I6+r7Vkca*EgBp?9^NI(J-kbndvAc31rfP0JX z{Z~|mCf|3k?fnOov=Wej1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- zkbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(T zKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ zNI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndv zAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnw zfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz z0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8< z2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J- 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 U>AsQmCIJaZKmrnwz-=b*Um(%RQ2+n{ literal 0 HcmV?d00001 diff --git a/testing/tests/font.lua b/testing/tests/font.lua index 695da4120..1e6597c4f 100644 --- a/testing/tests/font.lua +++ b/testing/tests/font.lua @@ -19,8 +19,16 @@ love.test.font.GlyphData = function(test) test:assertEquals(128, gdata:getSize(), 'check data size') test:assertEquals(9, gdata:getAdvance(), 'check advance') test:assertEquals('la8', gdata:getFormat(), 'check format') - test:assertEquals(97, gdata:getGlyph(), 'check glyph number') - test:assertEquals('a', gdata:getGlyphString(), 'check glyph string') + -- @TODO + --[[ + currently these will return 0 and '' respectively as not implemented + https://github.com/love2d/love/blob/12.0-development/src/modules/font/freetype/TrueTypeRasterizer.cpp#L140-L141 + "basically I haven't decided what to do here yet, because of the more + advanced text shaping that happens in love 12 having a unicode codepoint + associated with a glyph probably doesn't make sense in the first place" + ]]-- + --test:assertEquals(97, gdata:getGlyph(), 'check glyph number') - returns 0 + --test:assertEquals('a', gdata:getGlyphString(), 'check glyph string') - returns '' test:assertEquals(8, gdata:getHeight(), 'check height') test:assertEquals(8, gdata:getWidth(), 'check width') -- check boundary diff --git a/testing/tests/physics.lua b/testing/tests/physics.lua index a10f53bb7..f978eda12 100644 --- a/testing/tests/physics.lua +++ b/testing/tests/physics.lua @@ -22,12 +22,38 @@ end -- Joint (love.physics.newDistanceJoint) love.test.physics.Joint = function(test) - test:skipTest('test class needs writing') + -- make joint + local world = love.physics.newWorld(1, 1, true) + local body1 = love.physics.newBody(world, 10, 10, 'dynamic') + local body2 = love.physics.newBody(world, 20, 20, 'dynamic') + local joint = love.physics.newDistanceJoint(body1, body2, 10, 10, 20, 20, true) + test:assertObject(joint) + -- check props + test:assertEquals('distance', joint:getType(), 'check joint type') + test:assertEquals(false, joint:isDestroyed(), 'check not destroyed') + test:assertEquals(0, joint:getReactionForce(1), 'check reaction force') + test:assertEquals(0, joint:getReactionTorque(1), 'check reaction torque') + local b1, b2 = joint:getBodies() + test:assertEquals(body1:getX(), b1:getX(), 'check body 1') + test:assertEquals(body2:getX(), b2:getX(), 'check body 2') + local x1, y1, x2, y2 = joint:getAnchors() + test:assertEquals(10, x1, 'check anchor x1') + test:assertEquals(10, y1, 'check anchor y1') + test:assertEquals(20, x2, 'check anchor x2') + test:assertEquals(20, y2, 'check anchor y2') + test:assertEquals(true, joint:getCollideConnected(), 'check not colliding') + -- test userdata + test:assertEquals(nil, joint:getUserData(), 'check no data by def') + joint:setUserData('hello') + test:assertEquals('hello', joint:getUserData(), 'check set userdata') + -- destroy + joint:destroy() + test:assertEquals(true, joint:isDestroyed(), 'check destroyed') end -- Shape (love.physics.newCircleShape) --- @NOTE includes Fixture methods too enjoy +-- @NOTE includes Fixture methods too now so enjoy love.test.physics.Shape = function(test) test:skipTest('test class needs writing') end @@ -45,8 +71,8 @@ love.test.physics.World = function(test) test:assertEquals(0, world:getBodies()[1]:getX(), 'check body prop x') test:assertEquals(0, world:getBodies()[1]:getY(), 'check body prop y') world:translateOrigin(-10, -10) - test:assertEquals(10, world:getBodies()[1]:getX(), 'check body prop change x') - test:assertEquals(10, world:getBodies()[1]:getY(), 'check body prop change y') + test:assertEquals(10, math.floor(world:getBodies()[1]:getX()), 'check body prop change x') + test:assertEquals(10, math.floor(world:getBodies()[1]:getY()), 'check body prop change y') test:assertEquals(1, world:getBodyCount(), 'check 1 body count') test:assertEquals(false, world:isDestroyed(), 'check not destroyed') test:assertEquals(false, world:isLocked(), 'check not updating')