From 8fe66b993524e14391b3391220deaed6ebc31b02 Mon Sep 17 00:00:00 2001 From: Casey Klein Date: Tue, 26 Jan 2010 17:33:38 +0000 Subject: [PATCH] Somehow managed to copy the tests instead of moving them! svn: r17837 --- collects/redex/private/bitmap-test.ss | 167 -- .../private/bmps-macosx/extended-language.png | Bin 1989 -> 0 bytes .../extended-reduction-relation.png | Bin 394 -> 0 bytes .../private/bmps-macosx/language-nox.png | Bin 3006 -> 0 bytes .../redex/private/bmps-macosx/language.png | Bin 6006 -> 0 bytes collects/redex/private/bmps-macosx/lw.png | Bin 1232 -> 0 bytes .../metafunction-Name-vertical.png | Bin 4823 -> 0 bytes .../private/bmps-macosx/metafunction-Name.png | Bin 4440 -> 0 bytes .../private/bmps-macosx/metafunction-T.png | Bin 4705 -> 0 bytes .../private/bmps-macosx/metafunction-TL.png | Bin 4667 -> 0 bytes .../bmps-macosx/metafunction-multi-arg.png | Bin 8456 -> 0 bytes .../bmps-macosx/metafunction-subst.png | Bin 4418 -> 0 bytes .../private/bmps-macosx/metafunction.png | Bin 1076 -> 0 bytes .../bmps-macosx/metafunctions-multiple.png | Bin 9319 -> 0 bytes collects/redex/private/bmps-macosx/red2.png | Bin 5232 -> 0 bytes .../bmps-macosx/reduction-relation.png | Bin 1801 -> 0 bytes .../private/bmps-macosx/superscripts.png | Bin 944 -> 0 bytes .../bmps-macosx/unix-extended-language.png | Bin 2109 -> 0 bytes .../unix-extended-reduction-relation.png | Bin 507 -> 0 bytes .../private/bmps-macosx/unix-language-nox.png | Bin 3129 -> 0 bytes .../private/bmps-macosx/unix-language.png | Bin 5597 -> 0 bytes .../redex/private/bmps-macosx/unix-lw.png | Bin 1181 -> 0 bytes .../unix-metafunction-Name-vertical.png | Bin 4545 -> 0 bytes .../bmps-macosx/unix-metafunction-Name.png | Bin 3738 -> 0 bytes .../bmps-macosx/unix-metafunction-T.png | Bin 4027 -> 0 bytes .../bmps-macosx/unix-metafunction-TL.png | Bin 4547 -> 0 bytes .../unix-metafunction-multi-arg.png | Bin 7208 -> 0 bytes .../bmps-macosx/unix-metafunction-subst.png | Bin 5287 -> 0 bytes .../private/bmps-macosx/unix-metafunction.png | Bin 1158 -> 0 bytes .../unix-metafunctions-multiple.png | Bin 10731 -> 0 bytes .../bmps-macosx/unix-reduction-relation.png | Bin 1956 -> 0 bytes collects/redex/private/color-test.ss | 69 - collects/redex/private/config.ss | 5 - collects/redex/private/core-layout-test.ss | 82 - collects/redex/private/hole-test.ss | 32 - collects/redex/private/keyword-macros-test.ss | 46 - collects/redex/private/lw-test-util.ss | 43 - collects/redex/private/lw-test.ss | 282 --- collects/redex/private/matcher-test.ss | 820 -------- collects/redex/private/pict-test.ss | 53 - collects/redex/private/rg-test.ss | 1081 ---------- collects/redex/private/run-tests.ss | 41 - collects/redex/private/term-test.ss | 177 -- collects/redex/private/test-util.ss | 132 -- collects/redex/private/tl-test.ss | 1850 ----------------- 45 files changed, 4880 deletions(-) delete mode 100644 collects/redex/private/bitmap-test.ss delete mode 100644 collects/redex/private/bmps-macosx/extended-language.png delete mode 100644 collects/redex/private/bmps-macosx/extended-reduction-relation.png delete mode 100644 collects/redex/private/bmps-macosx/language-nox.png delete mode 100644 collects/redex/private/bmps-macosx/language.png delete mode 100644 collects/redex/private/bmps-macosx/lw.png delete mode 100644 collects/redex/private/bmps-macosx/metafunction-Name-vertical.png delete mode 100644 collects/redex/private/bmps-macosx/metafunction-Name.png delete mode 100644 collects/redex/private/bmps-macosx/metafunction-T.png delete mode 100644 collects/redex/private/bmps-macosx/metafunction-TL.png delete mode 100644 collects/redex/private/bmps-macosx/metafunction-multi-arg.png delete mode 100644 collects/redex/private/bmps-macosx/metafunction-subst.png delete mode 100644 collects/redex/private/bmps-macosx/metafunction.png delete mode 100644 collects/redex/private/bmps-macosx/metafunctions-multiple.png delete mode 100644 collects/redex/private/bmps-macosx/red2.png delete mode 100644 collects/redex/private/bmps-macosx/reduction-relation.png delete mode 100644 collects/redex/private/bmps-macosx/superscripts.png delete mode 100644 collects/redex/private/bmps-macosx/unix-extended-language.png delete mode 100644 collects/redex/private/bmps-macosx/unix-extended-reduction-relation.png delete mode 100644 collects/redex/private/bmps-macosx/unix-language-nox.png delete mode 100644 collects/redex/private/bmps-macosx/unix-language.png delete mode 100644 collects/redex/private/bmps-macosx/unix-lw.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunction-Name-vertical.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunction-Name.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunction-T.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunction-TL.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunction-multi-arg.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunction-subst.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunction.png delete mode 100644 collects/redex/private/bmps-macosx/unix-metafunctions-multiple.png delete mode 100644 collects/redex/private/bmps-macosx/unix-reduction-relation.png delete mode 100644 collects/redex/private/color-test.ss delete mode 100644 collects/redex/private/config.ss delete mode 100644 collects/redex/private/core-layout-test.ss delete mode 100644 collects/redex/private/hole-test.ss delete mode 100644 collects/redex/private/keyword-macros-test.ss delete mode 100644 collects/redex/private/lw-test-util.ss delete mode 100644 collects/redex/private/lw-test.ss delete mode 100644 collects/redex/private/matcher-test.ss delete mode 100644 collects/redex/private/pict-test.ss delete mode 100644 collects/redex/private/rg-test.ss delete mode 100644 collects/redex/private/run-tests.ss delete mode 100644 collects/redex/private/term-test.ss delete mode 100644 collects/redex/private/test-util.ss delete mode 100644 collects/redex/private/tl-test.ss diff --git a/collects/redex/private/bitmap-test.ss b/collects/redex/private/bitmap-test.ss deleted file mode 100644 index e5f73397d9..0000000000 --- a/collects/redex/private/bitmap-test.ss +++ /dev/null @@ -1,167 +0,0 @@ -#lang scheme -(require "bitmap-test-util.ss" - "../main.ss") - -;; tests: -;; - language, -;; - multi-line non-terminals, single-line non-terminals -(define-language lang - (e (e e) - x - (λ (x) e) - number) - (v number (λ (x) e)) - ((x y) variable-not-otherwise-mentioned)) - -(test (render-language lang) "language.png") - -(test (render-language lang #:nts '(e v)) "language-nox.png") - -(define-extended-language lang++ lang - (e .... number (+ e e)) - (v .... number)) - -(test (render-language lang++) "extended-language.png") - -(define red - (reduction-relation - lang - (--> ((λ (x) e) v) (S x v e)))) - -;; tests: reduction-relation -(test (render-reduction-relation red) - "reduction-relation.png") - -(test (render-reduction-relation - (extend-reduction-relation red lang (--> 1 2))) - "extended-reduction-relation.png") - -;; this test should fail because it gets the order wrong -;; for the where/side-conditions -(define red2 - (reduction-relation - lang - (--> (number_a number_b number_c number_d) - any_z - (where (any_x any_y) (number_a number_b)) - (side-condition (= (term number_c) 5)) - (where any_z any_x) - (side-condition (= (term number_d) 5))))) - -(test (render-reduction-relation red2) - "red2.png") - -(define-metafunction lang - [(S x v e) e]) - -(test (render-metafunction S) - "metafunction.png") - -(define-metafunction lang - [(T x y) - 1 - (side-condition (not (eq? (term x) (term y))))] - [(T x x) - (any_1 any_2) - (where any_1 2) - (where any_2 2)]) - -;; in this test, the metafunction has 2 clauses -;; with a side-condition on the first clause -;; and a 'where' in the second clause -(test (render-metafunction T) "metafunction-T.png") - -;; in this test, teh `x' is italic and the 'z' is sf, since 'x' is in the grammar, and 'z' is not. -(test (render-lw - lang - (to-lw ((λ (x) (x x)) - (λ (z) (z z))))) - "lw.png") - -(define-metafunction lang - [(TL 1) (a - ,(term-let ((x (term 1))) - (term x)) - below-only)] - [(TL 2) (a - ,(term-let ((x (term 1))) - (term x)) beside - below)]) - -;; this tests that term-let is sucked away properly -;; when the metafunction is rendered -(test (render-metafunction TL) "metafunction-TL.png") - -(define-metafunction lang - [(Name (name x-arg arg)) - ,(term-let ((x-term-let (term 1))) - (term (x-where x-term-let))) - (where x-where 2)]) - -;; this tests that the three variable bindings -;; (x-arg, x-term-let, and x-where) -;; all show up in the output. -(test (render-metafunction Name) "metafunction-Name.png") - -;; same as previous, but with vertical organization of the bindings -(test (parameterize ([metafunction-pict-style 'up-down/vertical-side-conditions]) - (render-metafunction Name)) - "metafunction-Name-vertical.png") - -;; makes sure that there is no overlap inside or across metafunction calls -;; or when there are unquotes involved -(define-metafunction lang - [(multi-arg a - b - c) - ((multi-arg a - b - c) - (multi-arg a - b - c))] - [(multi-arg unquote-test) - (,@(term (multi-arg with-unquote)) - ,@(term (multi-arg with-unquote)) - ,@(term (multi-arg with-unquote)))]) - -(test (render-metafunction multi-arg) "metafunction-multi-arg.png") - -;; makes sure that the LHS and RHS of metafunctions are appropriately -;; rewritten - -(define-metafunction lang - subst : e x e -> e - [(subst x x e) e] - [(subst number x e) number] - [(subst x_1 x_2 e) x_1] - [(subst (e_1 e_2) x e) - ((subst e_1 x e) (subst e_2 x e))] - [(subst (λ (x) e_b) x e) - (λ (x) e)] - [(subst (λ (x_f) e_f) x_a e_a) - (λ (x_f) (subst e_f x_a e_a))]) - -(define (subst-rw lws) - (list "" - (list-ref lws 2) - "{" - (list-ref lws 3) - ":=" - (list-ref lws 4) - "}")) - -(test (with-compound-rewriter 'subst subst-rw - (render-metafunction subst)) - "metafunction-subst.png") - - -;; make sure two metafunctions simultaneously rewritten line up properly -(test (render-metafunctions S T TL) "metafunctions-multiple.png") - -;; Non-terminal superscripts -(test (render-lw lang (to-lw (x_^abcdef x_q^abcdef))) - "superscripts.png") - -(printf "bitmap-test.ss: ") -(done) diff --git a/collects/redex/private/bmps-macosx/extended-language.png b/collects/redex/private/bmps-macosx/extended-language.png deleted file mode 100644 index 448f4f9bfb08c89fe4ec8b812451030d4c194ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1989 zcmV;$2RitPP)d2$tOB{Qh_wV<1GoAZhve>)G?1^SsY<&ilRxzJP)d z0$-xDvy(!h;PLpGE@T>9*Jd;t(P*@1uc+7S0|NsQ+t0J9f1jeFqBn2ecqzF`r4oz9 zO-)VzZ@RPEj7DQgNr}m1`n~F=VQ_FzBoZOE&ux`g2?z)%D=TYnZ}(tMlgX5uo6BOc zuvn}I(;~#j#~TcW+qZ9ne{HMqc)Uy|OG!!bV9u(ls<^l~0)b%lw70i&xm-`>XD}EQ z6%`W`6F=Fi%F4=wgak+XFGZzNNu|=Hq$E!zgb)@N7jNCV)z&#MFi=}t>#0kiP^dL) z)(8ZGA6q4rO1WGvm&+|KF18&P8ymZ0#|}IDC>m9qN0>a<@fL3Pn;^P@@i{q<#IWj&1Ntda=AP=H#Z?60Yb>*@s=)K+Sb+v z01%7Ct5>gXX=%yN&tJQC?aLRC`R?7jE^7Py`Lj$WBa_L$ z)RD8*b{1W>Y?)Xr_6GonM50TVE;TeX+`4t^!-o&H(`YmrjYhMx*=+Xi-Mj5BFmK+x zUnOsMb#-+t7OS$dQlrrT03JPh1R*4o$t5KvnVFg8<>lwkpSNotkH<$uL{O>J zfq{XmSFe&tBp0;}4Go2chN4g?0KohA?~zkbB9SPS$~$-NAj^`Pnrb`6#cDf?1_uYf zeft*3Lg+f7`6bhxVu+U<$T)TE{`SRs5nM|ovVlWu3Rtq7FjEv;*c*sZwgTd$X zr){6bVlkOai^cNO+Uo1;=g*&y*tNB_WHOmdCWnNCU@#cO&dSQN9q)RzokgEKd4j{? z!1e3bqobpno12YBqnoSAhJGoGMV}L`4Gb4;bA{NKdDp-A>6WM%eiysAcWP`)$7)+gAn%j_Y(*Nq<@)A z78Vxv>C-32_NS(%LPA0wJb2(vZLeRy_Ve>Io6WY)8#itwCMHhXo$J+h7OktRqf)8< z-@bh#5C~~$X#jx1!NCO!7GN+K>+>j=%lrEJkdI7OJ2^QyA|k@>$&HDLvGWK70wR&P zZQC}rT7CKQ<-L3NQYaK>wu_fcOG`_9e0*YJBJzGHEG+Eq?$&5D(b3UUQ&XLtoeG5_ zCnu+`ukY#8rx_U;R4UbMHn+C6mX?+R0K{T(Mn*<=cXw-RYkGQmU|^uxY-Y3BWo2cN zk&%w=zk2m5C@2W={FFtD7NODTv9YnRurPPVyIyT)(b3V-n3xzaIy$;|@#5_4Y@tvn zkx1U7cN{t>?KQgz(w3XR)!d$dt6Sw7k5$k&zKTpP!YLB^HZM zojTRg(SbxA+vjjN1qB7ub~NqFxu~e9v9ZzCI5yN7!C=?3BM$RD@Q>>@X&rPtM@B~W z?b`<-1pm9lS*-N*^myv1wnM2@78Vv73x86azt6jVzG|OI*~{$FE0lGh(w|zM~)N} z6yWjr(a}*mWj#GT-AjG_G7!R=nwrg9+S=OM+Pv{q&V77YS)W<_0RSWtX=G$X zrBcacvYk73{&aWweE$9W_wAeq4jkCCXOA~-CY?_A{Q2|Z;^KgS0Fg+vY11YEfWcsp zNF>$O)l#W+U|;~b_usvHH#|Ii=+Ge)3f0`)oSB&!6%|!eQULirB<0DzE?kgs3A3WY*8 zn{5}KRn~n72;tb+SW;5b#KeT-LpQ6e`wl;ZC6md7JpPUt3zT diff --git a/collects/redex/private/bmps-macosx/extended-reduction-relation.png b/collects/redex/private/bmps-macosx/extended-reduction-relation.png deleted file mode 100644 index 46e14cf70397c41c828ae06d48432c0ef290fe3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@X~P)HEGAB93Dk>nN_ON(d1}5t$VLH~_3x zD^*pWdoE*aD&n_D&-G0pB4g|g;#poO9)kWU?xoH1IB!e#eku7<@#B}W+&3|%y6^kn zp1Xtx*OdUEu4~tI0pNH%=6U`UJcez}K@%?@$5K92yd7cnLQIzZT8by)s`xL1T of4-7&x-}DX;4gdfE07*qoM6N<$f>_b7d;kCd diff --git a/collects/redex/private/bmps-macosx/language-nox.png b/collects/redex/private/bmps-macosx/language-nox.png deleted file mode 100644 index 083d80cc662ff90c9748380ba1ad756aba9c5dc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3006 zcmV;v3qkaWP)000YxNklzWOfb=yYNBqee}BJ_fLJWX+cY#ZELgBWb*Os^jjc5` zHH#K4nsPBF3J{4z4h|0Y@88eP&OUMC#Ms!FLB_pz@1DxvSdkOVq$rD`HL4X)V4!GLBYa> z3yEcYNKQ_!uC9g<>YhSd>y8~e9zT9Oojq&{00<$9qEe|;n}tH5&{&?5;o;%<_;{?W zdkSLf*RNmq?%k{ZTqXw~b@cZ3_Oi0FU+pE4NVr_?`1m*(OQHxgNOD}PzrWwg%F5Q( zR{t(<-@awBSadp_yj2+;!}z_mwbj$plfhv8`=S023=^M8PEP*t;e$bj`a>W$4m^W4 zX8dj(X8dj($nv{Vsl0#xK9k853WX0IJXp1ARc~)ENpqPZWci&=r^m*|Zr;2(D=W*= z(z30s4IdMpf!ym%XlQ6pPtT@Jn@F9-6d~8|5{YEy{!$|(`u*9nXW`-DR#sL*q453t z_vB4vijd-Wfk5Ez?>{jyv0}xFZQHh`rly*i&D=Qs1G3^X!^6XK=gtKHpeU+TDt}40 z^d~@iTxLu*wzkUUa&4^$g2-etg+ig{Xb6I+)#%?>e@o*+Zah+@k34kf zkfWpH)2B~$kE2abslQ^JUK?D=Vv(mKJS;sM)K5qG(7+$jHdZl#9{d z(uk1ty9x>V$mh?WkByBL78dGhuZI4LNt4i4lI3@zK9a}dg@uJxR#s~K1;*QJi)DIy zd-M5xV&Bfr&g|^$?Ck6d7cO8m+AOI9S$^;C?sjl+pwVd9p*9 z#_a5D6h*b!11+&kqGD2|tu!|`@9OFrA0O9dNi|4(-o)W>T3cHI06ZQqARu7bvSnD) z`Sa%+8yioZI;GKGM=Vny5U|;7e6L-*cJ=r7@7uSpqM|}3ld0scL`%v+-YqI#ANfo6 zGMNmknVg(dsr9reCQVdZNiBV(HhcXQlcu7rq?|rdqrLu$NmJ2Q&gdhJg9+#(rBW%M z&wudX0ZHQ<1rvDgVQy|-SXlV{`Ez40#E_VP-x&->Z*MR5j@5623HV(qm3DS^1_cEf zdm)B|#Q01`M#h>oYlen~&YU^p>gpgn z`}S>caPW;AH%K}!LqV3`84QNCwY86rPjz*5dV2cs@UToKn=@yQjg5_;pC15VaBz^v z-#Pc2z-5g*REX)0I098 z-@JKqTU%RGQCb5dgsF^P{4o z+S=M4J$e)w8996QY^74k;cyBI3te1Xh+)Whw-Q8s}*|%@s3JMAm5)%6Q`g(eL+}+)4Yir};;s5|mO-*iYZrB_6pFe-@>+5rH zaG=xa2!aR%f{cuew6wG>TebjAVaVFr+U?u7n~)0gztHK)<#H^903no0rC0{0k&zJ_ z8yg*6Y;0_>$9@WhVsvy=EpHQqaA;`A1g_&+n9)ZX2b0;DzZt*3->IqHGy%W=%XlO; zwVNj3cQWFU_}rG|<>krA$;XZz)6-t9N&jq@|FAUf-v>Qevu2GzAedfXYHByh${%S! z3?7e!6wq#(wYRtX`}3IVqzkKAg^D)_VDn)D#OCUZr!>CAxutA_Vo0`Dm^_txm+%aqJRDM7xoR3 zNF zqB%J^zP`T16H&8=5SEpdZP>5@Uqj4xsXH$wfDpcT@xsr~Pa=_AzkYpccS4w#mlsMv zP4_~bcqGy9@87>SGc!{vmDpimVBqP~ry+#jzki=KYZfu%pPD^{FefKx{`~oPo2sfR z7K??iAubYcNe2Mf+1Y*n{=K}soWtR$?UZTfk5r3Ca=F~LwlTOtk4NHjTVmSH($Z3Z({5H)R^mf!czf`-b~86O zS11(H>Gb8xmjj*JO`tI^CWKHd76%0djgF2Izbwulf1;adB~c zK0hrjt+}}wYbBtfs@#@Gj~>N-$uXLno0&{zN=k}Gdp@7<=jX@g z^C5&>E;lA7rmL$9GazQW)SVae|M%}|djZe1^GB)}9v;RDD2l3H8^f;MI=ZN?)MH~~ z#Fx!;IK AvH$=8 diff --git a/collects/redex/private/bmps-macosx/language.png b/collects/redex/private/bmps-macosx/language.png deleted file mode 100644 index 1275c7b26c55d8302e3a19fd7a03b2ae2a86e8a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6006 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 Kg{+W&9{xYJ4^3DA diff --git a/collects/redex/private/bmps-macosx/metafunction-Name.png b/collects/redex/private/bmps-macosx/metafunction-Name.png deleted file mode 100644 index e4f7dc5331411cc3d70ad2ac520c16b4fd70e938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4440 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 G;r{`2*`}QU diff --git a/collects/redex/private/bmps-macosx/metafunction-T.png b/collects/redex/private/bmps-macosx/metafunction-T.png deleted file mode 100644 index 23606d0bd557bf61c3efc56bcf6a8d00c535c1b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4705 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 Uvvc7u!J{KUM?+7&Qq?Z>f9Z_+@c;k- diff --git a/collects/redex/private/bmps-macosx/metafunction-TL.png b/collects/redex/private/bmps-macosx/metafunction-TL.png deleted file mode 100644 index 1b0410ede7f8c957006607bac0a4f4a11825d2dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4667 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 Pg`nG-dK!gl7XJSMoS8#V diff --git a/collects/redex/private/bmps-macosx/metafunction-multi-arg.png b/collects/redex/private/bmps-macosx/metafunction-multi-arg.png deleted file mode 100644 index 0ae325b3b04c5e9e410aae691ebec93a43c5526d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8456 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%0AO0sn_OvrXz<4EHPdzac#Bj-%?(?9|AVKhK7c4 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 diff --git a/collects/redex/private/bmps-macosx/metafunction.png b/collects/redex/private/bmps-macosx/metafunction.png deleted file mode 100644 index 5eb6cdbeffbaa9e4488ac3e2e9f6afd316a1eb7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1076 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 diff --git a/collects/redex/private/bmps-macosx/reduction-relation.png b/collects/redex/private/bmps-macosx/reduction-relation.png deleted file mode 100644 index 1da77851c26e875dbfd20794e8aa37abe62f8493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1801 zcmV+k2ln`hP)oL+}q~%Y&ZxemM7X&pii_t5Wy=zWAKS-{X1TXYj(~ zVIYLyFE9+_a5(<>$B!S;(b3V-(GUjYT7sWHe}-8b33E|k5B)-Oia*=$-d9$Yiw*>xpL*FPoE41!uzJC3R5PJ0J(cZm#>9yV6 z-IbMf?%ZhrjuF+DxKp`igG)Y;joR4Rj+^Con6nEn0z0)c?RU;qF)1^} z9*<{ma8NFnhcIETBR1GOi(E+U&f2wWIUJ75jA4LJo%`Gcywa_S3~J3Bik zCx`fy@%en^<>ed>$7;0_hC-nrn&l6E87h^ks;Y_{{9;%D@b>N7lP6EEU%wszSS(g) zX(^Y>#W3tQzp4QMfc#zd*WaB50K0eZzIpQ|lgZ4@&6UYyQBhIn&!7MGOZgAN1c3YZ z@2l17yLa#I*s+7p=jZ3=zj^Z}blJ?z%#$Zi5)%{6X7kghPq%K}Iyg8;*GwjpR4Uc$ z^#EWr8p-n)ozI^?>vTGuPFGP;v49;dCQJZ`kB`4~>z2deXm4*XDJgmJ;)Oz?pifm~ zf=%QUf(_Yp0#5C}9j47@d+^`^LWslR?A*EY>eZ`XzI=&^i3#{G3kvj!oKCdu*$WuF;&HlH0h#X9@SiE`j zW{pNOG&BSNIF9S}`d6=BWo2cBuB1=oZnxWDFi_@r`jAc6f=%te9VUy#s;{s2`Fu%9 zNeKxFOP4M!D=Vw0s5pH1aIl)^&!0=BQlHP4nwom>;K9<;QYMoL01XWd`}gmE_Usv1 zj*E*+Nl7U#E+(9ST3%kB!{Io7{CHhm-T3%8m&=XJX8$!T0NA*3V@F5Fz`($_Z{NgX zu|OaQU87VgTU%S>;^F|{`t|EGGc&|7?e%)o($Xm9 zl%ph|#$YhWtr;C1wOA}xt95E>iU=04$NBU36dH`4o}S6cNdRE8*~A0SO`A6Hc)W-% r%Wk(14-b=Xnw*@xV#SJx-jvQCDjvs}SOm{T00000NkvXXu0mjf7chxx diff --git a/collects/redex/private/bmps-macosx/superscripts.png b/collects/redex/private/bmps-macosx/superscripts.png deleted file mode 100644 index 69484218f2decdc0365848277dc928f7cc4c18c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 944 zcmV;h15f;kP)YD6?l8alP2{3(=0l3lo97gL&&T5h?P3vxjTS6GKKiO^aZn^vo7 ztuafpwIpXXbJ$kH?Ah_W7kgV`?|R>D@AvNceV^aw`Td^r^y>ihMIRp@=+A->s#L1i z*Vlxu%jGf}jo*S+tM%#WDG4(jxXEOS!!ZB=03Z^HEH5uZ2*IDlX0r_j1DDH9=-%Dk zJv=;ojVvuK;W!=&g_1DSfj>SzYBZYP=>Px-;rRIY{QNwQ<3ADW>+8kE#YUrXW@aWB z46dxK1OkDnsj024EeyjdD=V|IvbguXWrMkJfaXOv1x3?`VEhi@@VzIcUrY1@C z>A)8j7Tj*PQmGsn8NmPmBuO?lHWn2X{X9mkR+pETb2yyp>S~k8#OL$na=FD~(Q36k z9&d1PkRXWN-Q9tK0UXEk^71w}H^bp@XJ;pl<2^k+b#-+~dPpDM*VnhPu@MS|Foe+T z?5sp0NqEx1!9hnyhgz*}Zf@3UwZp^1I-O1|7Vqrrw70kC9x?)Fu~@CGt!ry*n8)L}zrU}jr~m*&qtTTsQ3xS~FlN2KzsI-5$66#3 zVHhSFjmClu!@Rw{EiNu5oH-eXYcv`@pAQZX55KiRl4M(3Tf!p#Mt;A4dwZLv>4a{^ z;pgY)xw*MmZEda3=VKTq{`F~^b~>HOpLG)D=jThM(!#>Rgzh&uNs>C9PN7hw41a!p zE-Nd;s;a88v$K6ZUo2`c7`nT=IUJ7NZg)5wsrHgs-{5Am830gHQc_S*kTTQj^$LYT zjLl{%6bg&Qa&~qm5{V#$LZMJ1kxWldV;GjH1`@)RN@ah4|Nj1dS65d$ zgF{0@2%$hA5PNV8!zBMPNkKp1GMQ{|Z%-?l9>YkS{D}=b8~Z%NF;?^o6Qy<*1rHx&>Y4f S+EAqc0000wIGRtm=eGUZE5Cv7{7JD(k|^6dL#RLIV>csMjP)G47`TU(`4si&u> z(P&&3hxB7vTwKh`%F<{w>k^Beva+(y&Q4^r9T0EBP*6}XF)`8I-OXaL91!mG>C;(R zSt%(g_6~$$*rP{}5)u-kqoZXqnfvV%&V?X|#Kc4g1R5F|>hA6?DJgM4EC7JNzyHyr zM{8?q0rlC@*VmVxo}Q7BA(zWlDwShyWqr}>^&TD`7>21-s^a2eZ*OmjL^3oq1OS+w zolQzg!Z7Uh>(>B)rlzJXTej@nxznUqVPT=Sx3@x}`0?Y%y?gf}BP0F%{O;bpONPL4 zJS;3MKR-V@I$9(W_4M?RRjVhE>bbPE)X&ck!?2N&5o^ZM-rl}@_ihe{L%pcgYQKN~ zPT$d*bu`;1H8r)PqeHLP0|+66@bTlvLZNVSauPx~Gc&{Ga=W^^AO+N5Vq(H<@#4jc zEDQAa_rrB%XlO_v5Ll|!>-8KCCo?ni%a<>6b8}HqQD@GaK~;l;g8+bEzkZ>jQmH(3 z>J+tCR#ui;t)8Bq4hjlNPfu@aYg=AkE-EUDiHSkYrl+R?069513kwSn!ph3ZkdP3) zUJor#Ao84%kufqdqSb06A|eb1gEeDGOG_&&D>J#++}vDVUQRPPYpx?r8+35NaeNa1 zU~zG=w6s*EQVE4Z005uQ4-XIj@ZkeBvvfM$@87>yR#waw%gf7$E#R1)mSl8vRHxHj zx^yWjD$3vAUnCNd&;G%|L7`9>6cj`j6$%BlS8Z+W)~#Cw0s)`TmrA9%xw#w;CpI>g z^gs{?NYf@DAOOW>0|1^qd#2TDo0^(hT3S#~gTW9I5<>NrpP!$fpKqzi=kxh|zD)zL z6F82GM53gmBvc$9A6F`s$R-GaOoD}l1+`jD7I7RGi^ZsDFc`jm{d)7}O;q*y^XIs@ zIMPF6Vq#=uBr49&&jSEB91hI{BG1Xm$>=)ScTJX;m#xem5^L6xrp@Nfn*jhzOG|7t z)X>mS9LH_C11dE&HJ2}6He2=f?c2S3_x|6WZG|9+UAuN6dv0z{qtTEHPY}exg9k~Q z&1Ub|v14_w(a}-8UQcEfK@dld96>gYe(iQLZMcxMfRROd(eZprluw@FAv#;g@qCA%yeu^Qoz+PoF+DIheG!w}*#^lZQ%^qOCMEG~B;`-+G%0 z&ACjc(|LG!^!E0m;*~2`6bc1d%jI$(K75EggocI|7Z;oDRaRD(o12U5j~_n*0OscA z;C~O8X=!N&gTZJto;`b3B9UmdT4;F!O+4E)mhlq| z@4ch0u1+SCrKYB4WMp)9cCL=s+S(cz7&tyYZnkJE$;ruw4m*(c?_wV2L_V(I45QOm9v151c+!2e#fcd|}mErMt9UUDrGcyi| z)!N!heob({eFDQUTVLE=7Hh^L5C|M_8`RHB7-V!-4F8M!?Gp_4hRF#AQ`|2nHj>WD zHQ6ACHOJs!ot3k2zkR~FI80~dL^c5cnwpw?eSHN2!SUnA0RVk{ecQHe6N|+!Uc7Mj z?b*gg(pfnZ^l4M6RAy&qlV3Wsv$IY9-(qxD&<;8)*W~YcLN1q+zlP_}pU20?i$o%7 z>a3}=%E`$wn{yJ0#15Hk5vtA#06?#^s;a7@_Ch)<006180szFu#*$K{)jF$&h6c4- z9UdNDT3UMT+BFmL(*FJXsX8kFfb}{nC-N^RCMPEs7ZlN z6ZxAHadB}F!m+Wjfq{Xdq9QLZFPpqDI;(ZpSvirvIU$uwxm<34fB%~|Z_p{sCMqf_ z^78V`Ryp|Df#W#&6kDycs;;g^_G+CKbvvQaSs_UTSW9Qs*w|QKUvJ{sZ6Hq;2?+^2 z9`D_|cV^EWjLym)IxE-YUrrPh6eyKSOYIn)l|6J;u8I5oFFHItoSB)4ezgqtfccKe nU<#8H45qkWPHZHdm22`Jr~)@PBGqAnm?Vh-FpP+UxZQ zBYVf5y4≻cyrZhlDoHSYdX%-Abim7zQG$sydxcDNFmzt#$YNeMM1Ls}%q&mrG64 x%H=Y3dcT}br}swFXf&v^vx!DpKZq3l;0MDPgqgq^{l5SJ002ovPDHLkV1jVP>wN$K diff --git a/collects/redex/private/bmps-macosx/unix-language-nox.png b/collects/redex/private/bmps-macosx/unix-language-nox.png deleted file mode 100644 index a05ce95394ac8c60651378d72a98fca9a09db418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3129 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 RW$;P>K>x6}s4@3V{SS=q43q!> diff --git a/collects/redex/private/bmps-macosx/unix-language.png b/collects/redex/private/bmps-macosx/unix-language.png deleted file mode 100644 index cb88a9a4d92e2ff3cf89d78687bca196cdd604f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5597 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 PEky01mQtC5Rmgt;9){&b diff --git a/collects/redex/private/bmps-macosx/unix-lw.png b/collects/redex/private/bmps-macosx/unix-lw.png deleted file mode 100644 index 708c9df4aa9e473580a6e096b6bcfceb06847b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1181 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 JN7&=Y{{a}I;I9Ax diff --git a/collects/redex/private/bmps-macosx/unix-metafunction-Name.png b/collects/redex/private/bmps-macosx/unix-metafunction-Name.png deleted file mode 100644 index b299b86abdddc528abe1b6087fcc97d092731cdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3738 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 diff --git a/collects/redex/private/bmps-macosx/unix-metafunction-T.png b/collects/redex/private/bmps-macosx/unix-metafunction-T.png deleted file mode 100644 index 05edef44444f9588e0589d0410e6f3951feb2ff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4027 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 diff --git a/collects/redex/private/bmps-macosx/unix-metafunction-TL.png b/collects/redex/private/bmps-macosx/unix-metafunction-TL.png deleted file mode 100644 index 378e0fd05bd9cc4e62bf22865beca217e8c10ff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4547 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 IqJ|3o7vKN$#{d8T diff --git a/collects/redex/private/bmps-macosx/unix-metafunction-multi-arg.png b/collects/redex/private/bmps-macosx/unix-metafunction-multi-arg.png deleted file mode 100644 index 6753b06610c91138ac899994f5552dbcce5ed2c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7208 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 diff --git a/collects/redex/private/bmps-macosx/unix-metafunction-subst.png b/collects/redex/private/bmps-macosx/unix-metafunction-subst.png deleted file mode 100644 index 3f00d4671a50c2fb46f2794e82bb80ab9502099b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5287 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 BAZY*q diff --git a/collects/redex/private/bmps-macosx/unix-metafunction.png b/collects/redex/private/bmps-macosx/unix-metafunction.png deleted file mode 100644 index b9d908c4acc0117dbac44ffbcd52f880a3c48ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1158 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 diff --git a/collects/redex/private/bmps-macosx/unix-reduction-relation.png b/collects/redex/private/bmps-macosx/unix-reduction-relation.png deleted file mode 100644 index d2196e527cf0deb34f2c0ac4abebf33bd96d756a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1956 zcmV;V2V3}wP)k?gBetft?wGce{5p+kAc5=O6Dme$ROx&-3^^ z?jA9O5QGRMocW%>|DRBa15T*K0Vh=AfDns=+TUf49Z0_5kj|b-xdf2R;$%(3YxyBr$;On1As!I zKnUgL<_ZJ?l}d#WG8hbDVPP{fGhXu;3{K_%>+Tz*47dP;dz>S>XVX^va+(yo;_PrQ?qK-s;sOm z(!XfYB2rJwV6)lw@87T0YRT;%6%`c|6Vun%#}WbnGMVh<%a`PHYisM;wQJ+z;@Cs5 zKtc^c8&9j#Dn02>=%^TsV31GltyLa#QIZA+FuP*=qLa4mFT&Yx2d*0m~9UaAS zd}L&VG!+U(VPPTdcZ3#hu~@ck+h(;|34(}^kKem@FZHbl4;}~vf*(JA&@$Y;dl$#? z(a}+a(6?{j($dn%tCA&zBsn=bEG+EFlPB&@_K-gd_;L6ELg>Yd7ZDK=4u^wuxtk>= zCGNL&OG^u%&;R`SvwI46{h2doVq;_DCMx&uQ*+c#y)E@OABfsp~v*+BobCj26`otgo#KeR| zA{iSS^FM8HLVg>6>WionI~)$RTCLaXy_!Dpsdu?t85tSf-Q9jB3|dGK_}4mo`t*s# z^a+dJ<#JgpmRV&BPDl{&bsL75Goe@V0Vh=AfDKBdN~PpOM@PpzPB$|%GbJSj!!WsAPCj&Xbe4$*Ck&)fq-D}pYVF~N) z?Tw3z!!S&#R04ontriM}>FMcAdYw)u5{Z^BT}r+Z>+0%CNJx-KBwk-YQ*?E8sZ^@; z^mLg_rqya^`?LL5KnNW;Z~((FwOW1S#toCn^EiGNKVueg5yLt1b&$VId9x=hx2l5I_t7*Z30|1A^(P%UpjmG724Gaui zzka=-pddUveEat8?7?MaWeSC2-MV#Gu3Ygs64eLd^Z8X(Rh^xkEMltFbnV(T(nGbH z794nAU*F}+mm3-y0D!~c$mMdmT>jz1hvw#HpC$I%Jz|2X59Ae=R?~umBNPf78yg1) z2i?7PyPfRgvcS|mVuGm;kbEiTeohVK7G2fveINSg@=dB<#N4VpPZb` zv?`UAl{%e{$K%=U_J)QAyWL)2U;p#x&$_z0*RNl%U%#Hu=X(v5$z)QgG&MDq@-XSu zYPD9Y&CJYU_ z|I#WFi3o!D{{6d1B&w*WVA@baLqkTRap%sRey;9p^#G8WnQ66J&1Q2 (number_1 word) - (,(+ (term number_1) 1) word) - inc)) - '(1 word) - #:pred color-range-pred)) - -(let () - (define-language empty-language) - - (define (last-color-pred sexp term-node) - (if (null? (term-node-children term-node)) - "green" - "white")) - - (traces (reduction-relation - empty-language - (--> (number_1 word) - (,(+ (term number_1) 1) word) - inc) - (--> (number_1 word) - (,(* (term number_1) 2) word) - dup)) - '(1 word) - #:pred last-color-pred)) diff --git a/collects/redex/private/config.ss b/collects/redex/private/config.ss deleted file mode 100644 index 721ab32da1..0000000000 --- a/collects/redex/private/config.ss +++ /dev/null @@ -1,5 +0,0 @@ -#lang scheme -(provide set-show-bitmaps? get-show-bitmaps?) -(define show-bitmaps? #t) -(define (set-show-bitmaps? sb?) (set! show-bitmaps? sb?)) -(define (get-show-bitmaps?) show-bitmaps?) \ No newline at end of file diff --git a/collects/redex/private/core-layout-test.ss b/collects/redex/private/core-layout-test.ss deleted file mode 100644 index b1edc2bc72..0000000000 --- a/collects/redex/private/core-layout-test.ss +++ /dev/null @@ -1,82 +0,0 @@ -#lang scheme/base - -(require "core-layout.ss" - "loc-wrapper.ss" - "lw-test-util.ss" - "test-util.ss" - (lib "struct.ss")) - -(require (lib "mrpict.ss" "texpict") - (lib "mred.ss" "mred") - (lib "class.ss")) -(dc-for-text-size (make-object bitmap-dc% (make-object bitmap% 1 1))) - -(reset-count) - -(let ([content - (list (make-lw 'x 15 1 35 0 #f #f) - (make-lw (list - (make-lw "(" 15 0 35 1 #f #f) - (make-lw 'a 15 0 36 1 #f #f) - (make-lw 'b 16 0 36 1 #f #f) - (make-lw ")" 16 0 37 1 #f #f)) - 15 1 35 3 #f #f))]) - (test (find-enclosing-loc-wrapper content) - (build-lw content - 15 1 35 3))) - -(define (replace-pict-tokens x) - (let loop ([x x]) - (cond - [(line? x) (make-line (line-n x) (loop (line-tokens x)))] - [(pair? x) (cons (loop (car x)) - (loop (cdr x)))] - [(pict-token? x) - (copy-struct pict-token x [pict-token-pict 'pict])] - [else x]))) - -(test (replace-pict-tokens - (build-lines - '() - (normalize-lw - (to-lw - ,(term - (a b c)))))) - (list (make-line 0 - (list (make-spacer-token 0 2) - (make-string-token 2 1 "(" 'roman) - (make-string-token 3 1 "a" 'swiss) - (make-string-token 4 1 " " 'roman) - (make-string-token 5 1 "b" 'swiss) - (make-string-token 6 1 " " 'roman) - (make-string-token 7 1 "c" 'swiss) - (make-string-token 8 1 ")" 'roman))) - (make-line 0 - (list (make-string-token 0 0 "" 'roman) - (make-pict-token 0 1 'pict) - (make-pict-token 1 0 'pict))))) - -(test (replace-pict-tokens - (build-lines - '() - (normalize-lw - (to-lw - ,(term - (a b - c)))))) - (list (make-line 1 - (list (make-spacer-token 0 5) - (make-string-token 5 1 "c" 'swiss) - (make-string-token 6 1 ")" 'roman))) - (make-line 0 - (list (make-spacer-token 0 2) - (make-string-token 2 1 "(" 'roman) - (make-string-token 3 1 "a" 'swiss) - (make-string-token 4 1 " " 'roman) - (make-string-token 5 1 "b" 'swiss))) - (make-line 0 - (list (make-string-token 0 0 "" 'roman) - (make-pict-token 0 1 'pict) - (make-pict-token 1 0 'pict))))) - -(print-tests-passed "core-layout.ss") diff --git a/collects/redex/private/hole-test.ss b/collects/redex/private/hole-test.ss deleted file mode 100644 index 7536526d5a..0000000000 --- a/collects/redex/private/hole-test.ss +++ /dev/null @@ -1,32 +0,0 @@ -#lang scheme -(require redex) - -(define-language tl-grammar - [v (cont (hide-hole E))] - [E hole - (v ... E)]) - -(define test1 - (reduction-relation - tl-grammar - [--> (in-hole E_1 (explode)) - (in-hole E_1 1)])) - -(test--> test1 - (term ((cont hole) (explode))) - (term ((cont hole) 1))) - -(define test2 - (reduction-relation - tl-grammar - [--> (in-hole E_1 (explode)) - (asplode E_1)])) - -(define-metafunction tl-grammar - asplode : E -> any - [(asplode ((cont hole) hole)) - okay]) - -(test--> test2 - (term ((cont hole) (explode))) - (term okay)) diff --git a/collects/redex/private/keyword-macros-test.ss b/collects/redex/private/keyword-macros-test.ss deleted file mode 100644 index ab3ddc8dbb..0000000000 --- a/collects/redex/private/keyword-macros-test.ss +++ /dev/null @@ -1,46 +0,0 @@ -#lang scheme - -(require "keyword-macros.ss" - "test-util.ss") - -(reset-count) - -(let* ([formals `((#:b . ,#'1) (#:c . ,#'2))] - [parse - (λ (actuals) - (map syntax-e - (parse-kw-args formals (cdr (syntax-e actuals)) actuals)))]) - (let-syntax ([msg-src - (syntax-rules () - [(_ expr) - (with-handlers ([exn:fail:syntax? - (λ (exn) - (values (exn-message exn) - (exn:fail:syntax-exprs exn)))]) - (begin expr (values 'no-msg 'no-src)))])]) - (let () - (test (parse #'(a #:c 3 #:b 4)) '(4 3)) - (test (parse #'(a #:b 4 #:c 3)) '(4 3)) - (test (parse #'(a #:c 3)) '(1 3)) - (let*-values ([(kw) #'#:b] - [(msg src) (msg-src (parse #`(a #,kw)))]) - (test msg #rx"a: missing argument expression after keyword") - (test src (list kw))) - (let*-values ([(arg) #'1] - [(msg src) (msg-src (parse #`(a #:b 1 #,arg)))]) - (test msg #rx"a: expected a keyword") - (test src (list arg))) - (let*-values ([(kw) #'#:c] - [(msg src) (msg-src (parse #`(a #:c 1 #:b 2 #,kw 3)))]) - (test msg #rx"a: repeated keyword") - (test src (list kw))) - (let*-values ([(kw) #'#:c] - [(msg src) (msg-src (parse #`(a #:b #,kw 3)))]) - (test msg #rx"a: expected an argument expression") - (test src (list kw))) - (let*-values ([(kw) #'#:typo] - [(msg src) (msg-src (parse #`(a #:b 3 #,kw 4)))]) - (test msg #rx"a: invalid keyword") - (test src (list kw)))))) - -(print-tests-passed 'keyword-macros-test.ss) diff --git a/collects/redex/private/lw-test-util.ss b/collects/redex/private/lw-test-util.ss deleted file mode 100644 index fb6e335dc4..0000000000 --- a/collects/redex/private/lw-test-util.ss +++ /dev/null @@ -1,43 +0,0 @@ -(module lw-test-util mzscheme - (require "loc-wrapper.ss") - (provide normalize-lw) - - (define (normalize-lw lw) - (define-values (min-line min-column) (find-min-line/col lw)) - (define (normalize/lw lw) - (cond - [(lw? lw) - (make-lw (normalize/e (lw-e lw)) - (- (lw-line lw) min-line) - (lw-line-span lw) - (- (lw-column lw) min-column) - (lw-column-span lw) - (lw-unq? lw) - (lw-metafunction? lw))] - [else lw])) - (define (normalize/e e) - (cond - [(symbol? e) e] - [(string? e) e] - [else (map normalize/lw e)])) - (normalize/lw lw)) - - (define (find-min-line/col lw) - (define min-line #f) - (define min-col #f) - (define (find-min/lw lw) - (when (lw? lw) - (set! min-line (if min-line - (min min-line (lw-line lw)) - (lw-line lw))) - (set! min-col (if min-col - (min min-col (lw-column lw)) - (lw-column lw))) - (find-min/e (lw-e lw)))) - (define (find-min/e e) - (cond - [(symbol? e) (void)] - [(string? e) (void)] - [else (for-each find-min/lw e)])) - (find-min/lw lw) - (values min-line min-col))) diff --git a/collects/redex/private/lw-test.ss b/collects/redex/private/lw-test.ss deleted file mode 100644 index 109b17c9a5..0000000000 --- a/collects/redex/private/lw-test.ss +++ /dev/null @@ -1,282 +0,0 @@ -#| - - DO NOT TABIFY THIS FILE - -|# - - -; -; -; ;;;; -; ; ; ; -; ; ; ;;; ;; ;; ;;; ;;;;; -; ; ; ; ; ;; ; ; ; ; -; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ; ; -; ;;;; ;;; ;;; ;;; ;;; ;;; -; -; -; -; -; -; -; ;; ; ;;; -; ; ; ; -; ;;;;; ;;; ; ;; ;;; ;;;;; ;;; ;;; -; ; ; ; ;; ; ; ; ; ; -; ; ;;;; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ;; -; ;;; ;;;;;;;;;; ;;;;; ;;;;; ; -; ; -; ;;;; -; -; -; -; -; ;; ; ;;; ; ;; -; ; ; ; ; -; ;;;;; ; ;; ;;; ;;;; ;;;;; ;;; ; ;;; -; ; ;; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ;;; ; ; ; ;;;;; -; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ; ; ; -; ;;; ;;; ;;; ;;;;; ;;;; ;;;;; ;;;;; ;;;;; ;;;; -; -; -; -; - - -(module lw-test mzscheme - (require "test-util.ss" - "loc-wrapper.ss" - "lw-test-util.ss") - - (reset-count) - - (test (normalize-lw (to-lw ())) - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw ")" 0 0 1 1)) - 0 0 0 2)) - - (test (normalize-lw (to-lw "x")) - (build-lw "“x”" 0 0 0 3)) - - (test (normalize-lw (to-lw "#f")) - (build-lw "“#f”" 0 0 0 4)) - - (test (normalize-lw (to-lw #f)) - (build-lw "#f" 0 0 0 2)) - - (test (normalize-lw (to-lw/uq ())) - (make-lw (list (make-lw "(" 0 0 0 1 #t #f) - (make-lw ")" 0 0 1 1 #t #f)) - 0 0 0 2 #t #f)) - - (test (normalize-lw (to-lw (a))) - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw 'a 0 0 1 1) - (build-lw ")" 0 0 2 1)) - 0 0 0 3)) - - (test (normalize-lw (to-lw (a - b))) - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw 'a 0 0 1 1) - (build-lw 'b 1 0 1 1) - (build-lw ")" 1 0 2 1)) - 0 1 0 3)) - - (test (normalize-lw (to-lw (a b))) - (build-lw - (list (build-lw "(" 0 0 0 1) - (build-lw 'a 0 0 1 1) - (build-lw 'b 0 0 3 1) - (build-lw ")" 0 0 4 1)) - 0 0 0 5)) - - - (test (normalize-lw (to-lw (a - (b c) - d))) - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw 'a 0 0 1 1) - (build-lw - (list (build-lw "(" 1 0 1 1) - (build-lw 'b 1 0 2 1) - (build-lw 'c 1 0 4 1) - (build-lw ")" 1 0 5 1)) - 1 0 1 5) - (build-lw 'd 2 0 1 1) - (build-lw ")" 2 0 2 1)) - 0 2 0 3)) - - (test (normalize-lw (to-lw (abcdefghijkl - b))) - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw 'abcdefghijkl 0 0 1 12) - (build-lw 'b 1 0 1 1) - (build-lw ")" 1 0 2 1)) - 0 1 0 3)) - - (test (normalize-lw (to-lw ((a b) - c))) - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw - (list (build-lw "(" 0 0 1 1) - (build-lw 'a 0 0 2 1) - (build-lw 'b 0 0 4 1) - (build-lw ")" 0 0 5 1)) - 0 0 1 5) - (build-lw 'c 1 0 1 1) - (build-lw ")" 1 0 2 1)) - 0 1 0 3)) - - (test (normalize-lw (to-lw (aaa bbb - (ccc - ddd)))) ;; <--- the ddd should be lined up under the aaa - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw 'aaa 0 0 1 3) - (build-lw 'bbb 0 0 5 3) - (build-lw - (list - (build-lw "(" 1 0 5 1) - (build-lw 'ccc 1 0 6 3) - (build-lw 'ddd 2 0 1 3) - (build-lw ")" 2 0 4 1)) - 1 1 1 4) - (build-lw ")" 2 0 5 1)) - 0 2 0 6)) - - (test (normalize-lw (to-lw (aaa bbb - (ccc - ddd ;; <--- the ddd should be lined up under the aaa - eee)))) ;; <--- the eee should be lined up under the ccc - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw 'aaa 0 0 1 3) - (build-lw 'bbb 0 0 5 3) - (build-lw - (list - (build-lw "(" 1 0 5 1) - (build-lw 'ccc 1 0 6 3) - (build-lw 'ddd 2 0 1 3) - (build-lw 'eee 3 0 6 3) - (build-lw ")" 3 0 9 1)) - 1 2 1 9) - (build-lw ")" 3 0 10 1)) - 0 3 0 11)) - - (test (normalize-lw (to-lw ([{}]))) - (build-lw (list (build-lw "(" 0 0 0 1) - (build-lw - (list - (build-lw "[" 0 0 1 1) - (build-lw - (list - (build-lw "{" 0 0 2 1) - (build-lw "}" 0 0 3 1)) - 0 0 2 2) - (build-lw "]" 0 0 4 1)) - 0 0 1 4) - (build-lw ")" 0 0 5 1)) - 0 0 0 6)) - - (test (normalize-lw (to-lw ,x)) - (make-lw - (list - (make-lw "" 0 0 0 0 #f #f) - 'spring - (make-lw 'x 0 0 1 1 #t #f)) - 0 0 0 2 #f #f)) - - (test (normalize-lw (to-lw ,@x)) - (make-lw - (list - (make-lw "" 0 0 0 0 #f #f) - 'spring - (make-lw 'x 0 0 2 1 #t #f)) - 0 0 0 3 #f #f)) - - (test (normalize-lw (to-lw 'x)) - (make-lw - (list - (make-lw "'" 0 0 0 1 #f #f) - 'spring - (make-lw 'x 0 0 1 1 #f #f)) - 0 0 0 2 #f #f)) - - (test (normalize-lw (to-lw ,(term x))) - (make-lw - (list - (make-lw "" 0 0 0 0 #f #f) - 'spring - (make-lw - (list - (make-lw "" 0 0 1 0 #t #f) - 'spring - (make-lw 'x 0 0 7 1 #f #f)) - 0 0 1 7 #t #f)) - 0 0 0 8 #f #f)) - - (test (normalize-lw (to-lw (term x))) - (build-lw - (list - (build-lw "(" 0 0 0 1) - (build-lw 'term 0 0 1 4) - (build-lw 'x 0 0 6 1) - (build-lw ")" 0 0 7 1)) - 0 0 0 8)) - - (test (normalize-lw (to-lw '(term x))) - (build-lw - (list - (build-lw "'" 0 0 0 1) - 'spring - (build-lw - (list - (build-lw "(" 0 0 1 1) - (build-lw 'term 0 0 2 4) - (build-lw 'x 0 0 7 1) - (build-lw ")" 0 0 8 1)) - 0 - 0 - 1 - 8)) - 0 0 0 9)) - - (test (normalize-lw (to-lw ''x)) - (build-lw - (list - (build-lw "'" 0 0 0 1) - 'spring - (build-lw - (list - (build-lw "'" 0 0 1 1) - 'spring - (build-lw 'x 0 0 2 1)) - 0 - 0 - 1 - 2)) - 0 0 0 3)) - - ;; this one seems suspicious: why does the second comma start at 1 instead of 0? - ;; rendering seems to work, however, so we'll go with it .. - (test (normalize-lw (to-lw ,,x)) - (build-lw - (list - (build-lw "" 0 0 0 0) - 'spring - (make-lw - (list - (make-lw "," 0 0 1 1 #t #f) - 'spring - (make-lw 'x 0 0 2 1 #t #f)) - 0 0 1 2 - #t #f)) - 0 0 0 3)) - - (print-tests-passed "lw-test.ss")) - diff --git a/collects/redex/private/matcher-test.ss b/collects/redex/private/matcher-test.ss deleted file mode 100644 index 6866eae34a..0000000000 --- a/collects/redex/private/matcher-test.ss +++ /dev/null @@ -1,820 +0,0 @@ -(module matcher-test mzscheme - (require "matcher.ss" - (only "test-util.ss" equal/bindings?) - (lib "list.ss")) - - (error-print-width 500) - - (define (make-test-mtch a b c) (make-mtch a (build-flat-context b) c)) - - (define (test) - (print-struct #t) - (test-empty 'any 1 (list (make-test-mtch (make-bindings (list (make-bind 'any 1))) 1 none))) - (test-empty 'any 'true (list (make-test-mtch (make-bindings (list (make-bind 'any 'true))) 'true none))) - (test-empty 'any "a" (list (make-test-mtch (make-bindings (list (make-bind 'any "a"))) "a" none))) - (test-empty 'any '(a b) (list (make-test-mtch (make-bindings (list (make-bind 'any '(a b)))) '(a b) none))) - (test-empty 'any #t (list (make-test-mtch (make-bindings (list (make-bind 'any #t))) #t none))) - (test-empty 1 1 (list (make-test-mtch (make-bindings null) 1 none))) - (test-empty 1 '() #f) - (test-empty 99999999999999999999999999999999999999999999999 - 99999999999999999999999999999999999999999999999 - (list (make-test-mtch (make-bindings null) - 99999999999999999999999999999999999999999999999 - none))) - (test-empty 99999999999999999999999999999999999999999999999 - '() - #f) - (test-empty 'x 'x (list (make-test-mtch (make-bindings null) 'x none))) - (test-empty 'x '() #f) - (test-empty 1 2 #f) - (test-empty "a" "b" #f) - (test-empty "a" '(x) #f) - (test-empty "a" '() #f) - (test-empty "a" "a" (list (make-test-mtch (make-bindings null) "a" none))) - (test-empty 'number 1 (list (make-test-mtch (make-bindings (list (make-bind 'number 1))) 1 none))) - (test-empty 'number 'x #f) - (test-empty 'number '() #f) - (test-empty 'natural 1 (list (make-test-mtch (make-bindings (list (make-bind 'natural 1))) 1 none))) - (test-empty 'natural 'x #f) - (test-empty 'natural '() #f) - (test-empty 'natural -1 #f) - (test-empty 'natural 1.0 #f) - (test-empty 'integer -1 (list (make-test-mtch (make-bindings (list (make-bind 'integer -1))) -1 none))) - (test-empty 'integer 'x #f) - (test-empty 'integer '() #f) - (test-empty 'integer 1.0 #f) - (test-empty 'real 1.1 (list (make-test-mtch (make-bindings (list (make-bind 'real 1.1))) 1.1 none))) - (test-empty 'real 'x #f) - (test-empty 'real '() #f) - (test-empty 'real 2+3i #f) - (test-empty 'string "a" (list (make-test-mtch (make-bindings (list (make-bind 'string "a"))) "a" none))) - (test-empty 'string 1 #f) - (test-empty 'string '() #f) - (test-empty 'variable 'x (list (make-test-mtch (make-bindings (list (make-bind 'variable 'x))) 'x none))) - (test-empty 'variable 1 #f) - (test-empty '(variable-except x) 1 #f) - (test-empty '(variable-except x) 'x #f) - (test-empty '(variable-except x) 'y (list (make-test-mtch (make-bindings null) 'y none))) - (test-lang 'x 'y (list (make-mtch (make-bindings (list (make-bind 'x 'y))) 'y none)) - (list (make-nt 'x (list (make-rhs '(variable-except x)))))) - (test-empty '(variable-prefix x:) 'x: (list (make-test-mtch (make-bindings null) 'x: none))) - (test-empty '(variable-prefix x:) 'x:x (list (make-test-mtch (make-bindings null) 'x:x none))) - (test-empty '(variable-prefix x:) ': #f) - (test-empty '(variable-prefix x:) '() #f) - - (test-empty 'hole 1 #f) - (test-empty `hole - the-hole - (list (make-test-mtch (make-bindings (list)) the-hole none))) - (test-empty '(in-hole (hole 2) 1) - '(1 2) - (list (make-test-mtch (make-bindings (list)) `(1 2) none))) - - (test-empty '(in-hole (name E_1 ((hide-hole hole) hole)) x) - `(,the-hole x) - (list (make-test-mtch (make-bindings (list (make-bind 'E_1 `(,the-not-hole ,the-hole)))) - `(,the-hole x) - none))) - - - - (test-empty '(name x number) 1 (list (make-test-mtch (make-bindings (list (make-bind 'x 1) (make-bind 'number 1))) 1 none))) - (test-empty 'number_x 1 (list (make-test-mtch (make-bindings (list (make-bind 'number_x 1))) 1 none))) - (test-empty 'string_y "b" (list (make-test-mtch (make-bindings (list (make-bind 'string_y "b"))) "b" none))) - (test-empty 'any_z '(a b) (list (make-test-mtch (make-bindings (list (make-bind 'any_z '(a b)))) '(a b) none))) - - (test-empty '(name x_!_1 number) 1 (list (make-test-mtch (make-bindings (list (make-bind 'number 1))) 1 none))) - (test-empty '((name x_!_1 number) (name x_!_1 number)) '(1 1) #f) - (test-empty '((name x_!_1 number_a) (name x_!_1 number_b)) '(1 2) - (list (make-test-mtch (make-bindings (list (make-bind 'number_a 1) - (make-bind 'number_b 2))) - '(1 2) - none))) - (test-empty '(number_!_1 number_!_1) '(1 1) #f) - (test-empty '(number_!_1 number_!_1) '(1 2) (list (make-test-mtch (make-bindings (list)) '(1 2) none))) - (test-empty '(number_!_1 ...) '(1 2) (list (make-test-mtch (make-bindings (list)) '(1 2) none))) - (test-empty '(number_!_1 ...) '(1 2 3 4 5) (list (make-test-mtch (make-bindings (list)) '(1 2 3 4 5) none))) - (test-empty '(number_!_1 ...) '(1 2 3 1 5) (list (make-test-mtch (make-bindings (list)) '(1 2 3 1 5) none))) - (test-empty '((number_!_1 ...) (number_!_1 ...)) - '((1 2 3 1 5) (1 2 3 1 5)) - #f) - (test-empty '((number_!_1 ...) (number_!_1 ...)) - '((17 2 3 1 5) (1 2 3 1 5)) - (list (make-test-mtch (make-bindings (list)) '((17 2 3 1 5) (1 2 3 1 5)) none))) - (test-empty '((number_!_1 number_!_1) ... number_!_1 ...) '((1 1) (2 2) 1 3) #f) - (test-empty '((number_!_1 number_!_1) ... number_!_1 ...) '((1 1) (2 3) 1 2) #f) - (test-empty '((number_!_1 number_!_1) ... number_!_1 ...) - '((1 1) (2 3) 1 4) - (list (make-test-mtch (make-bindings (list)) '((1 1) (2 3) 1 4) none))) - - (test-ellipses '(a) '(a)) - (test-ellipses '(a ...) `(,(make-repeat 'a '() #f #f))) - (test-ellipses '((a ...) ...) `(,(make-repeat '(a ...) '() #f #f))) - (test-ellipses '(a ... b c ...) `(,(make-repeat 'a '() #f #f) b ,(make-repeat 'c '() #f #f))) - (test-ellipses '((name x a) ...) `(,(make-repeat '(name x a) (list (make-bind 'x '())) #f #f))) - (test-ellipses '((name x (a ...)) ...) - `(,(make-repeat '(name x (a ...)) (list (make-bind 'x '())) #f #f))) - (test-ellipses '(((name x a) ...) ...) - `(,(make-repeat '((name x a) ...) (list (make-bind 'x '())) #f #f))) - (test-ellipses '((1 (name x a)) ...) - `(,(make-repeat '(1 (name x a)) (list (make-bind 'x '())) #f #f))) - (test-ellipses '((any (name x a)) ...) - `(,(make-repeat '(any (name x a)) (list (make-bind 'any '()) - (make-bind 'x '())) - #f #f))) - (test-ellipses '((number (name x a)) ...) - `(,(make-repeat '(number (name x a)) (list (make-bind 'number '()) - (make-bind 'x '())) - #f #f))) - (test-ellipses '((variable (name x a)) ...) - `(,(make-repeat '(variable (name x a)) (list (make-bind 'variable '()) - (make-bind 'x '())) - #f #f))) - (test-ellipses '(((name x a) (name y b)) ...) - `(,(make-repeat '((name x a) (name y b)) (list (make-bind 'x '()) (make-bind 'y '())) #f #f))) - (test-ellipses '((name x (name y b)) ...) - `(,(make-repeat '(name x (name y b)) (list (make-bind 'x '()) (make-bind 'y '())) #f #f))) - (test-ellipses '((in-hole (name x a) (name y b)) ...) - `(,(make-repeat '(in-hole (name x a) (name y b)) - (list (make-bind 'x '()) (make-bind 'y '())) #f #f))) - - (test-ellipses '(a ..._1) - `(,(make-repeat 'a (list) '..._1 #f))) - (test-ellipses '(a ..._!_1) - `(,(make-repeat 'a (list) '..._!_1 #t))) - - (test-empty '() '() (list (make-test-mtch (make-bindings null) '() none))) - (test-empty '(a) '(a) (list (make-test-mtch (make-bindings null) '(a) none))) - (test-empty '(a) '(b) #f) - (test-empty '(a b) '(a b) (list (make-test-mtch (make-bindings null) '(a b) none))) - (test-empty '(a b) '(a c) #f) - (test-empty '() 1 #f) - (test-empty '(#f x) '(#f x) (list (make-test-mtch (make-bindings null) '(#f x) none))) - (test-empty '(#f (name y any)) '(#f) #f) - (test-empty '(in-hole (z hole) a) '(z a) (list (make-test-mtch (make-bindings (list)) '(z a) none))) - (test-empty '(in-hole (z hole) (in-hole (x hole) a)) - '(z (x a)) - (list (make-test-mtch (make-bindings (list)) '(z (x a)) none))) - - (run-test/cmp 'in-hole-zero-holes - (with-handlers ([exn:fail? (λ (e) (regexp-match #rx"zero holes" (exn-message e)))]) - (test-empty '(in-hole (1 2) 2) '(1 2) 'never-gets-here) - 'should-have-raised-an-exception) - '("zero holes") - equal?) - - - (test-empty '(in-hole (in-hole (x hole) hole) y) - '(x y) - (list (make-test-mtch (make-bindings (list)) '(x y) none))) - - (test-empty '(number number) '(1 1) (list (make-test-mtch (make-bindings (list (make-bind 'number 1))) '(1 1) none))) - (test-empty '((name x number) (name x number)) '(1 1) (list (make-test-mtch (make-bindings (list (make-bind 'x 1) (make-bind 'number 1))) '(1 1) none))) - (test-empty '((name x number_q) (name x number_r)) '(1 1) (list (make-test-mtch (make-bindings (list (make-bind 'x 1) - (make-bind 'number_q 1) - (make-bind 'number_r 1))) - '(1 1) - none))) - (test-empty '(number number) '(1 2) #f) - (test-empty '((name x number) (name x number)) '(1 2) #f) - (test-empty '((name x number_q) (name x number_r)) '(1 2) #f) - - (test-empty '(a ...) '() (list (make-test-mtch (make-bindings empty) '() none))) - (test-empty '(a ...) '(a) (list (make-test-mtch (make-bindings empty) '(a) none))) - (test-empty '(a ...) '(a a) (list (make-test-mtch (make-bindings empty) '(a a) none))) - (test-empty '((name x a) ...) '() (list (make-test-mtch (make-bindings (list (make-bind 'x '()))) '() none))) - (test-empty '((name x a) ...) '(a) (list (make-test-mtch (make-bindings (list (make-bind 'x '(a)))) '(a) none))) - (test-empty '((name x a) ...) '(a a) (list (make-test-mtch (make-bindings (list (make-bind 'x '(a a)))) '(a a) none))) - - (test-empty '(b ... a ...) '() (list (make-test-mtch (make-bindings empty) '() none))) - (test-empty '(b ... a ...) '(a) (list (make-test-mtch (make-bindings empty) '(a) none))) - (test-empty '(b ... a ...) '(b) (list (make-test-mtch (make-bindings empty) '(b) none))) - (test-empty '(b ... a ...) '(b a) (list (make-test-mtch (make-bindings empty) '(b a) none))) - (test-empty '(b ... a ...) '(b b a a) (list (make-test-mtch (make-bindings empty) '(b b a a) none))) - (test-empty '(b ... a ...) '(a a) (list (make-test-mtch (make-bindings empty) '(a a) none))) - (test-empty '(b ... a ...) '(b b) (list (make-test-mtch (make-bindings empty) '(b b) none))) - - (test-empty '(a ..._1 a ..._2) - '(a) - (list (make-test-mtch (make-bindings (list (make-bind '..._1 1) (make-bind '..._2 0))) '(a) none) - (make-test-mtch (make-bindings (list (make-bind '..._1 0) (make-bind '..._2 1))) '(a) none))) - (test-empty '(a ..._1 a ..._1) '(a) #f) - (test-empty '(a ..._1 a ..._1) - '(a a) - (list (make-test-mtch (make-bindings (list (make-bind '..._1 1))) '(a a) none))) - - (test-empty '((name x a) ..._!_1 (name y a) ..._!_1) - '(a a) - (list (make-test-mtch (make-bindings (list (make-bind 'x '()) (make-bind 'y '(a a)))) '(a a) none) - (make-test-mtch (make-bindings (list (make-bind 'x '(a a)) (make-bind 'y '()))) '(a a) none))) - - (test-empty '((name y b) ... (name x a) ...) '() - (list (make-test-mtch (make-bindings (list (make-bind 'x '()) - (make-bind 'y '()))) - '() - none))) - (test-empty '((name y b) ... (name x a) ...) '(a) - (list (make-test-mtch (make-bindings (list (make-bind 'x '(a)) - (make-bind 'y '()))) - '(a) - none))) - (test-empty '((name y b) ... (name x a) ...) '(b) - (list (make-test-mtch (make-bindings (list (make-bind 'x '()) - (make-bind 'y '(b)))) - '(b) - none))) - (test-empty '((name y b) ... (name x a) ...) '(b b a a) - (list (make-test-mtch (make-bindings (list (make-bind 'x '(a a)) - (make-bind 'y '(b b)))) - '(b b a a) - none))) - (test-empty '((name y a) ... (name x a) ...) '(a) - (list (make-test-mtch (make-bindings (list (make-bind 'x '()) - (make-bind 'y '(a)))) - '(a) - none) - (make-test-mtch (make-bindings (list (make-bind 'x '(a)) - (make-bind 'y '()))) - '(a) - none))) - (test-empty '((name y a) ... (name x a) ...) '(a a) - (list (make-test-mtch (make-bindings (list (make-bind 'x '()) - (make-bind 'y '(a a)))) - '(a a) - none) - (make-test-mtch (make-bindings (list (make-bind 'x '(a)) - (make-bind 'y '(a)))) - '(a a) - none) - (make-test-mtch (make-bindings (list (make-bind 'x '(a a)) - (make-bind 'y '()))) - '(a a) - none))) - - (test-ab '(bb_y ... aa_x ...) '() - (list (make-test-mtch (make-bindings (list (make-bind 'aa_x '()) - (make-bind 'bb_y '()))) - '() - none))) - (test-ab '(bb_y ... aa_x ...) '(a) - (list (make-test-mtch (make-bindings (list (make-bind 'aa_x '(a)) - (make-bind 'bb_y '()))) - '(a) - none))) - (test-ab '(bb_y ... aa_x ...) '(b) - (list (make-test-mtch (make-bindings (list (make-bind 'aa_x '()) - (make-bind 'bb_y '(b)))) - '(b) - none))) - (test-ab '(bb_y ... aa_x ...) '(b b a a) - (list (make-test-mtch (make-bindings (list (make-bind 'aa_x '(a a)) - (make-bind 'bb_y '(b b)))) - '(b b a a) - none))) - (test-ab '(aa_y ... aa_x ...) '(a) - (list (make-test-mtch (make-bindings (list (make-bind 'aa_x '()) - (make-bind 'aa_y '(a)))) - '(a) - none) - (make-test-mtch (make-bindings (list (make-bind 'aa_x '(a)) - (make-bind 'aa_y '()))) - '(a) - none))) - (test-ab '(aa_y ... aa_x ...) '(a a) - (list (make-test-mtch (make-bindings (list (make-bind 'aa_x '()) - (make-bind 'aa_y '(a a)))) - '(a a) - none) - (make-test-mtch (make-bindings (list (make-bind 'aa_x '(a)) - (make-bind 'aa_y '(a)))) - '(a a) - none) - (make-test-mtch (make-bindings (list (make-bind 'aa_x '(a a)) - (make-bind 'aa_y '()))) - '(a a) - none))) - - (test-empty '((name x number) ...) '(1 2) (list (make-test-mtch (make-bindings (list (make-bind 'x '(1 2)) (make-bind 'number '(1 2)))) '(1 2) none))) - - (test-empty '(a ...) '(b) #f) - (test-empty '(a ... b ...) '(c) #f) - (test-empty '(a ... b) '(b c) #f) - (test-empty '(a ... b) '(a b c) #f) - - (test-empty '((name x any) - ((name x number) ...)) - '((1 1) (1 1)) - (list (make-test-mtch (make-bindings (list (make-bind 'x '(1 1)) - (make-bind 'any '(1 1)) - (make-bind 'number '(1 1)))) - '((1 1) (1 1)) - none))) - - (test-empty '((variable_1 variable_1) ...) - '((x y)) - #f) - - - (test-empty '(number ...) '() - (list (make-test-mtch (make-bindings (list (make-bind 'number '()))) '() none))) - (test-ab '(aa ...) '() - (list (make-test-mtch (make-bindings (list (make-bind 'aa '()))) '() none))) - - - ;; testing block-in-hole - (test-empty '(hide-hole a) 'b #f) - (test-empty '(hide-hole a) 'a (list (make-test-mtch (make-bindings '()) 'a none))) - (test-empty '(hide-hole a) '(block-in-hole a) #f) - (test-empty '(in-hole (x (hide-hole hole)) 1) '(x 1) #f) - (test-empty '(in-hole (x hole) 1) '(x 1) (list (make-test-mtch (make-bindings '()) '(x 1) none))) - (test-empty '(in-hole ((hole #f) (hide-hole hole)) junk) - '(junk junk2) - #f) - - (test-xab 'lsts '() (list (make-test-mtch (make-bindings (list (make-bind 'lsts '()))) '() none))) - (test-xab 'lsts '(x) (list (make-test-mtch (make-bindings (list (make-bind 'lsts '(x)))) '(x) none))) - (test-xab 'lsts 'x (list (make-test-mtch (make-bindings (list (make-bind 'lsts 'x))) 'x none))) - (test-xab 'lsts #f (list (make-test-mtch (make-bindings (list (make-bind 'lsts #f))) #f none))) - (test-xab 'split-out '1 (list (make-test-mtch (make-bindings (list (make-bind 'split-out 1))) '1 none))) - - (test-xab 'exp 1 (list (make-test-mtch (make-bindings (list (make-bind 'exp 1))) 1 none))) - (test-xab 'exp '(+ 1 2) (list (make-test-mtch (make-bindings (list (make-bind 'exp '(+ 1 2)))) '(+ 1 2) none))) - (test-xab '(in-hole ctxt any) - '1 - (list (make-test-mtch (make-bindings (list (make-bind 'ctxt the-hole) (make-bind 'any 1))) 1 none))) - (test-xab '(in-hole ctxt (name x any)) - '1 - (list (make-test-mtch (make-bindings (list (make-bind 'ctxt the-hole) (make-bind 'x 1) (make-bind 'any 1))) 1 none))) - (test-xab '(in-hole (name c ctxt) (name x any)) - '(+ 1 2) - (list (make-test-mtch (make-bindings (list (make-bind 'ctxt (build-context the-hole)) - (make-bind 'c (build-context the-hole)) - (make-bind 'x '(+ 1 2)) - (make-bind 'any '(+ 1 2)))) - '(+ 1 2) none) - (make-test-mtch (make-bindings (list (make-bind 'ctxt (build-context `(+ ,the-hole 2))) - (make-bind 'c (build-context `(+ ,the-hole 2))) - (make-bind 'x 1) - (make-bind 'any 1))) - '(+ 1 2) none) - (make-test-mtch (make-bindings (list (make-bind 'ctxt (build-context `(+ 1 ,the-hole))) - (make-bind 'c (build-context `(+ 1 ,the-hole))) - (make-bind 'x 2) - (make-bind 'any 2))) - '(+ 1 2) none))) - (test-xab '(in-hole (name c ctxt) (name i (+ number_1 number_2))) - '(+ (+ 1 2) (+ 3 4)) - (list (make-test-mtch - (make-bindings (list (make-bind 'i '(+ 1 2)) - (make-bind 'number_1 1) - (make-bind 'number_2 2) - (make-bind 'ctxt (build-context `(+ ,the-hole (+ 3 4)))) - (make-bind 'c (build-context `(+ ,the-hole (+ 3 4)))))) - '(+ (+ 1 2) (+ 3 4)) - none) - (make-test-mtch (make-bindings (list (make-bind 'i '(+ 3 4)) - (make-bind 'number_1 3) - (make-bind 'number_2 4) - (make-bind 'ctxt `(+ (+ 1 2) ,the-hole)) - (make-bind 'c `(+ (+ 1 2) ,the-hole)))) - '(+ (+ 1 2) (+ 3 4)) - none))) - - (test-empty '(in-hole ((z hole)) (name x any)) - '((z a)) - (list (make-test-mtch (make-bindings (list (make-bind 'x 'a) (make-bind 'any 'a))) '((z a)) none))) - (test-empty '(in-hole (name c (z ... hole z ...)) any) - '(z z) - (list - (make-test-mtch (make-bindings (list (make-bind 'c `(z ,the-hole)) (make-bind 'any 'z))) '(z z) none) - (make-test-mtch (make-bindings (list (make-bind 'c `(,the-hole z)) (make-bind 'any 'z))) '(z z) none))) - (test-empty '(in-hole (name c (z ... hole z ...)) any) - '(z z z) - (list - (make-test-mtch (make-bindings (list (make-bind 'c `(z z ,the-hole)) (make-bind 'any 'z))) '(z z z) none) - (make-test-mtch (make-bindings (list (make-bind 'c `(z ,the-hole z)) (make-bind 'any 'z))) '(z z z) none) - (make-test-mtch (make-bindings (list (make-bind 'c `(,the-hole z z)) (make-bind 'any 'z))) '(z z z) none))) - - (test-empty '(z (in-hole (name c (z hole)) a)) - '(z (z a)) - (list - (make-test-mtch (make-bindings (list (make-bind 'c `(z ,the-hole)))) - '(z (z a)) - none))) - - (test-empty '(a (in-hole (name c1 (b (in-hole (name c2 (c hole)) d) hole)) e)) - '(a (b (c d) e)) - (list - (make-test-mtch (make-bindings (list (make-bind 'c2 `(c ,the-hole)) - (make-bind 'c1 `(b (c d) ,the-hole)))) - '(a (b (c d) e)) - none))) - - (test-empty '(in-hole (in-hole hole hole) a) - 'a - (list (make-test-mtch (make-bindings (list)) 'a none))) - - (test-empty '(a (b (in-hole (name c1 (in-hole (name c2 (c hole)) (d hole))) e))) - '(a (b (c (d e)))) - (list - (make-test-mtch (make-bindings (list (make-bind 'c1 `(c (d ,the-hole))) - (make-bind 'c2 `(c ,the-hole)))) - '(a (b (c (d e)))) - none))) - - (test-empty `(+ 1 (side-condition any ,(lambda (bindings) #t) #t)) - '(+ 1 b) - (list (make-test-mtch (make-bindings (list (make-bind 'any 'b))) '(+ 1 b) none))) - (test-empty `(+ 1 (side-condition any ,(lambda (bindings) #f) #f)) - '(+ 1 b) - #f) - - (test-empty `(+ 1 (side-condition b ,(lambda (bindings) #t) #t)) - '(+ 1 b) - (list (make-test-mtch (make-bindings '()) '(+ 1 b) none))) - (test-empty `(+ 1 (side-condition a ,(lambda (bindings) #t)) #t) - '(+ 1 b) - #f) - - (test-empty `(side-condition (name x any) ,(lambda (bindings) (eq? (lookup-binding bindings 'x) 'a)) (eq? (term x) 'a)) - 'a - (list - (make-test-mtch (make-bindings (list (make-bind 'x 'a) - (make-bind 'any 'a))) - 'a - none))) - - (test-empty `(+ 1 (side-condition (name x any) ,(lambda (bindings) (eq? (lookup-binding bindings 'x) 'a)) (eq? (term x) 'a))) - '(+ 1 a) - (list - (make-test-mtch (make-bindings (list (make-bind 'x 'a) - (make-bind 'any 'a))) - '(+ 1 a) - none))) - - (test-empty `(side-condition (name x any) ,(lambda (bindings) (eq? (lookup-binding bindings 'x) 'a)) (eq? (term x) 'a)) - 'b - #f) - - (test-empty `(+ 1 (side-condition (name x any) ,(lambda (bindings) (eq? (lookup-binding bindings 'x) 'a)) (eq? (term x) 'a))) - '(+ 1 b) - #f) - - (test-empty `(side-condition ((any_1 ..._a) (any_2 ..._a)) - ,(lambda (bindings) (error 'should-not-be-called)) - (error 'should-not-be-called)) - '((1 2 3) (4 5)) - #f) - - (test-xab 'exp_1 - '(+ 1 2) - (list (make-test-mtch (make-bindings (list (make-bind 'exp_1 '(+ 1 2)))) '(+ 1 2) none))) - (test-xab '(exp_1 exp_2) - '((+ 1 2) (+ 3 4)) - (list (make-test-mtch (make-bindings (list (make-bind 'exp_1 '(+ 1 2)) (make-bind 'exp_2 '(+ 3 4)))) - '((+ 1 2) (+ 3 4)) - none))) - (test-xab '(exp_1 exp_1) - '((+ 1 2) (+ 3 4)) - #f) - (test-xab 'nesting-names - 'b - (list (make-test-mtch (make-bindings (list (make-bind 'nesting-names 'b))) 'b none))) - (test-xab 'nesting-names - '(a b) - (list (make-test-mtch (make-bindings (list (make-bind 'nesting-names '(a b)))) '(a b) none))) - (test-xab 'nesting-names - '(a (a b)) - (list (make-test-mtch (make-bindings (list (make-bind 'nesting-names '(a (a b))))) '(a (a b)) none))) - (test-xab '((name x a) nesting-names) - '(a (a (a b))) - (list (make-test-mtch (make-bindings (list (make-bind 'x 'a) - (make-bind 'nesting-names '(a (a b))))) - '(a (a (a b))) none))) - (test-xab 'nesting-names - '(a (a (a (a b)))) - (list (make-test-mtch (make-bindings (list (make-bind 'nesting-names '(a (a (a (a b))))))) - '(a (a (a (a b)))) none))) - - (test-xab 'same-in-nt - '(x x) - (list (make-test-mtch (make-bindings (list (make-bind 'same-in-nt '(x x)))) '(x x) none))) - (test-xab 'same-in-nt - '(x y) - #f) - - (test-xab '(in-hole (cross forever-list) 1) - '(a b c) - #f) - - (test-xab '(in-hole (cross forever-list) 1) - '(1 x x) - (list (make-test-mtch (make-bindings '()) '(1 x x) none))) - - (test-xab '(in-hole (cross forever-list) 1) - '(x 1 x) - (list (make-test-mtch (make-bindings '()) '(x 1 x) none))) - - - (test-xab '(in-hole (cross simple) g) - 'g - (list (make-mtch (make-bindings (list)) 'g none))) - - (test-xab 'var '+ #f) - (test-xab 'var 'anunusedvariable (list (make-mtch (make-bindings (list (make-bind 'var 'anunusedvariable))) 'anunusedvariable none))) - (test-xab 'var 'exp (list (make-mtch (make-bindings (list (make-bind 'var 'exp))) 'exp none))) - (test-xab 'var 'exp_x (list (make-mtch (make-bindings (list (make-bind 'var 'exp_x))) 'exp_x none))) - - (test-xab 'underscore '(+ 1 2) (list (make-mtch (make-bindings (list (make-bind 'underscore '(+ 1 2)))) '(+ 1 2) none))) - (test-xab 'underscore '2 (list (make-mtch (make-bindings (list (make-bind 'underscore 2))) 2 none))) - - (run-test - 'compatible-context-language1 - (build-compatible-context-language - (mk-hasheq '((exp . ()) (ctxt . ()))) - (list (make-nt 'exp - (list (make-rhs '(+ exp exp)) - (make-rhs 'number))) - (make-nt 'ctxt - (list (make-rhs '(+ ctxt exp)) - (make-rhs '(+ exp ctxt)) - (make-rhs 'hole))))) - (list - (make-nt 'ctxt-ctxt - (list (make-rhs 'hole) - (make-rhs `(+ (cross ctxt-ctxt) exp)) - (make-rhs `(+ ctxt (cross ctxt-exp))) - (make-rhs `(+ (cross ctxt-exp) ctxt)) - (make-rhs `(+ exp (cross ctxt-ctxt))))) - (make-nt 'ctxt-exp - (list (make-rhs `(+ (cross ctxt-exp) exp)) - (make-rhs `(+ exp (cross ctxt-exp))))) - (make-nt 'exp-ctxt - (list (make-rhs `(+ (cross exp-ctxt) exp)) - (make-rhs `(+ ctxt (cross exp-exp))) - (make-rhs `(+ (cross exp-exp) ctxt)) - (make-rhs `(+ exp (cross exp-ctxt))))) - (make-nt 'exp-exp - (list (make-rhs 'hole) - (make-rhs `(+ (cross exp-exp) exp)) - (make-rhs `(+ exp (cross exp-exp))))))) - - (run-test - 'compatible-context-language2 - (build-compatible-context-language - (mk-hasheq '((m . ()) (v . ()))) - (list (make-nt 'm (list (make-rhs '(m m)) (make-rhs '(+ m m)) (make-rhs 'v))) - (make-nt 'v (list (make-rhs 'number) (make-rhs '(lambda (x) m)))))) - (list - (make-nt 'v-v (list (make-rhs 'hole) (make-rhs (list 'lambda (list 'x) (list 'cross 'v-m))))) - (make-nt 'v-m - (list - (make-rhs (list (list 'cross 'v-m) 'm)) - (make-rhs (list 'm (list 'cross 'v-m))) - (make-rhs (list '+ (list 'cross 'v-m) 'm)) - (make-rhs (list '+ 'm (list 'cross 'v-m))) - (make-rhs (list 'cross 'v-v)))) - (make-nt 'm-v (list (make-rhs (list 'lambda (list 'x) (list 'cross 'm-m))))) - (make-nt 'm-m - (list - (make-rhs 'hole) - (make-rhs (list (list 'cross 'm-m) 'm)) - (make-rhs (list 'm (list 'cross 'm-m))) - (make-rhs (list '+ (list 'cross 'm-m) 'm)) - (make-rhs (list '+ 'm (list 'cross 'm-m))) - (make-rhs (list 'cross 'm-v)))))) - - (run-test - 'compatible-context-language3 - (build-compatible-context-language - (mk-hasheq '((m . ()) (seven . ()))) - (list (make-nt 'm (list (make-rhs '(m seven m)) (make-rhs 'number))) - (make-nt 'seven (list (make-rhs 7))))) - `(,(make-nt - 'm-m - `(,(make-rhs 'hole) ,(make-rhs `((cross m-m) seven m)) ,(make-rhs `(m seven (cross m-m))))) - ,(make-nt - 'seven-m - `(,(make-rhs `((cross seven-m) seven m)) ,(make-rhs `(m (cross seven-seven) m)) ,(make-rhs `(m seven (cross seven-m))))) - ,(make-nt 'seven-seven `(,(make-rhs 'hole))))) - - (run-test - 'compatible-context-language4 - (build-compatible-context-language - (mk-hasheq '((a . ()) (b . ()) (c . ()))) - (list (make-nt 'a (list (make-rhs 'b))) - (make-nt 'b (list (make-rhs 'c))) - (make-nt 'c (list (make-rhs 3))))) - (list (make-nt 'c-c (list (make-rhs 'hole))) - (make-nt 'c-b (list (make-rhs '(cross c-c)))) - (make-nt 'c-a (list (make-rhs '(cross c-b)))) - (make-nt 'b-b (list (make-rhs 'hole))) - (make-nt 'b-a (list (make-rhs '(cross b-b)))) - (make-nt 'a-a (list (make-rhs 'hole))))) - - #; - (test-xab '(in-hole (cross exp) (+ number number)) - '(+ (+ 1 2) 3) - (list (make-bindings (list (make-bind 'hole (make-hole-binding (list '+ 1 2) (list 'cdr 'car) #f)))))) - - (run-test/cmp 'split-underscore1 (split-underscore 'a_1) 'a eq?) - (run-test/cmp 'split-underscore2 (split-underscore 'a_!_1) 'a eq?) - (run-test/cmp 'split-underscore3 - (with-handlers ([exn:fail? (λ (e) (cadr (regexp-match #rx"^([^:]+):" (exn-message e))))]) - (split-underscore 'a_b_1)) - "compile-pattern" - equal?) - - (test-ellipsis-binding '((number_1 number_2) ...) '((1 2))) - (test-ellipsis-binding '((name x number_1) ...) '(1 2)) - (test-ellipsis-binding '(((number_1 ...) (number_2 ...)) ...) '(((1) (2)))) - (test-ellipsis-binding '(number ... variable) '(1 x)) - - (cond - [(= failures 0) - (printf "matcher-test.ss: all ~a tests passed.\n" test-count)] - [else - (printf "matcher-test.ss: ~a test~a failed.\n" - failures - (if (= failures 1) - "" - "s"))])) - - ;; mk-hasheq : (listof (cons sym any)) -> hash-table - ;; builds a hash table that has the bindings in assoc-list - (define (mk-hasheq assoc-list) - (let ([ht (make-hash-table)]) - (for-each - (lambda (a) - (hash-table-put! ht (car a) (cdr a))) - assoc-list) - ht)) - - ;; test-empty : sexp[pattern] sexp[term] answer -> void - ;; returns #t if pat matching exp with the empty language produces ans. - (define (test-empty pat exp ans) - (run-match-test - `(match-pattern (compile-pattern (compile-language 'pict-stuff-not-used '() '()) ',pat #t) ',exp) - (match-pattern - (compile-pattern (compile-language 'pict-stuff-not-used '() '()) pat #t) - exp) - ans)) - - ;; test-lang : sexp[pattern] sexp[term] answer (list/c nt) -> void - ;; returns #t if pat matching exp with the language defined by the given nts - (define (test-lang pat exp ans nts) - (let ([nt-map (map (λ (x) (list (nt-name x))) nts)]) - (run-match-test - `(match-pattern (compile-pattern (compile-language 'pict-stuff-not-used ',nts ',nt-map) ',pat #t) ',exp) - (match-pattern - (compile-pattern (compile-language 'pict-stuff-not-used nts nt-map) pat #t) - exp) - ans))) - - (define xab-lang #f) - ;; test-xab : sexp[pattern] sexp[term] answer -> void - ;; returns #t if pat matching exp with a simple language produces ans. - (define (test-xab pat exp ans) - (unless xab-lang - (let ([nts - (list (make-nt 'exp - (list (make-rhs '(+ exp exp)) - (make-rhs 'number))) - (make-nt 'ctxt - (list (make-rhs '(+ ctxt exp)) - (make-rhs '(+ exp ctxt)) - (make-rhs 'hole))) - - (make-nt 'ec-one - (list (make-rhs '(+ (hole xx) exp)) - (make-rhs '(+ exp (hole xx))))) - - (make-nt 'same-in-nt (list (make-rhs '((name x any) (name x any))))) - - (make-nt 'forever-list (list (make-rhs '(forever-list forever-list ...)) - (make-rhs 'x))) - - (make-nt 'lsts - (list (make-rhs '()) - (make-rhs '(x)) - (make-rhs 'x) - (make-rhs '#f))) - (make-nt 'split-out - (list (make-rhs 'split-out2))) - (make-nt 'split-out2 - (list (make-rhs 'number))) - - (make-nt 'simple (list (make-rhs 'simple-rhs))) - - (make-nt 'nesting-names - (list (make-rhs '(a (name x nesting-names))) - (make-rhs 'b))) - (make-nt 'var (list (make-rhs `variable-not-otherwise-mentioned))) - - (make-nt 'underscore (list (make-rhs 'exp_1))) - )]) - (set! xab-lang - (compile-language 'pict-stuff-not-used - nts - (map (λ (x) (list (nt-name x))) nts))))) - (run-match-test - `(match-pattern (compile-pattern xab-lang ',pat #t) ',exp) - (match-pattern (compile-pattern xab-lang pat #t) exp) - ans)) - - (define ab-lang #f) - ;; test-xab : sexp[pattern] sexp[term] answer -> void - ;; returns #t if pat matching exp with a simple language produces ans. - (define (test-ab pat exp ans) - (unless ab-lang - (set! ab-lang - (compile-language - 'pict-stuff-not-used - (list (make-nt 'aa - (list (make-rhs 'a))) - (make-nt 'bb - (list (make-rhs 'b)))) - '((aa) (bb))))) - (run-match-test - `(match-pattern (compile-pattern ab-lang ',pat #t) ',exp) - (match-pattern (compile-pattern ab-lang pat #t) exp) - ans)) - - ;; test-ellipses : sexp sexp -> void - (define (test-ellipses pat expected) - (run-test - `(rewrite-ellipses test-suite:non-underscore-binder? ',pat (lambda (x) (values x #f))) - (let-values ([(compiled-pattern has-hole?) (rewrite-ellipses test-suite:non-underscore-binder? pat (lambda (x) (values x #f)))]) - (cons compiled-pattern has-hole?)) - (cons expected #f))) - - (define (test-suite:non-underscore-binder? x) - (memq x '(number any variable string))) - - ;; test-ellipsis-binding: sexp sexp -> boolean - ;; Checks that `extract-empty-bindings' produces bindings in the same order - ;; as the matcher, as required by `collapse-single-multiples' - (define (test-ellipsis-binding pat exp) - (define (binding-names bindings) - (map (λ (b) - (cond [(bind? b) (bind-name b)] - [(mismatch-bind? b) (mismatch-bind-name b)])) - bindings)) - (run-test - `(test-ellipsis-binding ,pat) - (binding-names - (bindings-table-unchecked - (mtch-bindings - (car - ((compiled-pattern-cp - (compile-pattern (compile-language 'pict-stuff-not-used '() '()) pat #t)) - exp - #t))))) - (binding-names (extract-empty-bindings test-suite:non-underscore-binder? pat)))) - - ;; run-test/cmp : sexp any any (any any -> boolean) - ;; compares ans with expected. If failure, - ;; prints info about the test and increments failures - (define failures 0) - (define test-count 0) - (define (run-test/cmp symbolic ans expected cmp?) - (set! test-count (+ test-count 1)) - (cond - [(cmp? ans expected) - '(printf "passed: ~s\n" symbolic)] - [else - (set! failures (+ failures 1)) - (fprintf (current-error-port) - " test: ~s\nexpected: ~e\n got: ~e\n" - symbolic expected ans)])) - - (define (run-test symbolic ans expected) (run-test/cmp symbolic ans expected equal/bindings?)) - - ;; run-match-test : sexp got expected - ;; expects both ans and expected to be lists or both to be #f and - ;; compares them using a set-like equality if they are lists - (define (run-match-test symbolic ans expected) - (run-test/cmp - symbolic ans expected - (λ (xs ys) - (cond - [(and (not xs) (not ys)) #t] - [(and (list? xs) - (list? ys)) - (and (andmap (λ (x) (memf (λ (y) (equal/bindings? x y)) ys)) xs) - (andmap (λ (y) (memf (λ (x) (equal/bindings? x y)) xs)) ys) - (= (length xs) (length ys)))] - [else #f])))) - - (define (build-context c) - (let loop ([c c]) - (cond - [(eq? c the-hole) the-hole] - [(pair? c) (build-cons-context (loop (car c)) (loop (cdr c)))] - [(or (null? c) - (number? c) - (symbol? c)) - (build-flat-context c)] - [else (error 'build-context "unknown ~s" c)]))) - - (test)) diff --git a/collects/redex/private/pict-test.ss b/collects/redex/private/pict-test.ss deleted file mode 100644 index c80da26ac0..0000000000 --- a/collects/redex/private/pict-test.ss +++ /dev/null @@ -1,53 +0,0 @@ -(module pict-test mzscheme - ;; these tests just make sure that errors don't - ;; happen. These tests are really only last resorts - ;; for testing functions that aren't easily extraced - ;; from the pict.ss library - - (require "../reduction-semantics.ss" - "../pict.ss") - - (require (lib "mrpict.ss" "texpict") - (lib "mred.ss" "mred") - (lib "class.ss")) - - (define-language empty-language) - - (define-language var-ab - [var (a - b)]) - (render-language var-ab) - - (define-language var-not-ab - [var (variable-except x - y)]) - (render-language var-not-ab) - - (let () - (define-metafunction empty-language [(zero any_in) 0]) - (render-metafunction zero)) - - (render-reduction-relation - (reduction-relation - empty-language - (--> number_const - ,(term - (+ number_const 0))))) - - (render-reduction-relation - (reduction-relation - empty-language - (--> a b - (fresh x) - (fresh y)))) - - - (define-language x1-9 - (x 1 2 3 4 5 6 7 8 9)) - - (define-extended-language x0-10 x1-9 - (x 0 .... 10)) - - (render-language x0-10) - - (printf "pict-test.ss passed\n")) diff --git a/collects/redex/private/rg-test.ss b/collects/redex/private/rg-test.ss deleted file mode 100644 index 307b595aa0..0000000000 --- a/collects/redex/private/rg-test.ss +++ /dev/null @@ -1,1081 +0,0 @@ -#lang scheme - -(require "test-util.ss" - "reduction-semantics.ss" - "matcher.ss" - "term.ss" - "rg.ss" - "keyword-macros.ss" - "error.ss") - -(reset-count) - -;; to-table : hash-table -> assoc -;; extracts the hash-table's mapping in a deterministic way -(define (to-table ht) - (sort (hash-map ht cons) - (λ (x y) (string<=? (format "~a" (car x)) (format "~a" (car y)))))) - -(let () - (define-language lc - (e x (e e) (λ (x) e)) - (x variable)) - (let ([bc (find-base-cases lc)]) - (test (to-table (base-cases-non-cross bc)) - '((e . (1 2 2)) (x . (0)))) - (test (to-table (base-cases-cross bc)) - '((e-e . (0 2 2 1)) (x-e . (1 2 2 2 2)) (x-x . (0)))))) - -(let () - (define-language lang - (e (e e))) - (let ([bc (find-base-cases lang)]) - (test (to-table (base-cases-non-cross bc)) '((e . (inf)))) - (test (to-table (base-cases-cross bc)) '((e-e . (0 inf inf)))))) - -(let () - (define-language lang - (a 1 2 3) - (b a (a_1 b_!_1))) - (let ([bc (find-base-cases lang)]) - (test (to-table (base-cases-non-cross bc)) - '((a . (0 0 0)) (b . (1 2)))) - (test (to-table (base-cases-cross bc)) - '((a-a . (0)) (a-b . (1)) (b-b . (0)))))) - -(let () - (define-language lc - (e (e e ...) - (+ e e) - x - v) - (v (λ (x) e) - number) - (x variable)) - (let ([bc (find-base-cases lc)]) - (test (to-table (base-cases-non-cross bc)) - '((e . (2 2 1 1)) (v . (2 0)) (x . (0)))) - (test (to-table (base-cases-cross bc)) - '((e-e . (0 2 2 2 2 2)) (e-v . (1)) (v-e . (2 2 2 2 1)) (v-v . (0 2)) - (x-e . (2 2 2 2 1 3)) (x-v . (2 2)) (x-x . (0)))))) - -(let () - (define-language L - (x (variable-prefix x) - (variable-except y)) - (y y)) - (test (hash-ref (base-cases-non-cross (find-base-cases L)) 'x) - '(0 0))) - -(let () - (define-language lang - (e number x y) - (x variable) - (y y)) - (test (min-prods (car (compiled-lang-lang lang)) - (base-cases-non-cross (find-base-cases lang))) - (list (car (nt-rhs (car (compiled-lang-lang lang))))))) - -(define (make-random . nums) - (let ([nums (box nums)]) - (λ ([m +inf.0]) - (cond [(null? (unbox nums)) (error 'make-random "out of numbers")] - [(>= (car (unbox nums)) m) (error 'make-random "number too large")] - [else (begin0 (car (unbox nums)) (set-box! nums (cdr (unbox nums))))])))) - -(test (pick-from-list '(a b c) (make-random 1)) 'b) - -(test (pick-number 24 (make-random 1/5)) 3) -(test (pick-number 224 (make-random 0 0 1/5)) -5) -(test (pick-number 524 (make-random 0 0 1 1/5 1/5)) 3/4) -(test (pick-number 1624 (make-random 0 0 0 .5 1 .5)) 3.0) -(test (pick-number 2624 (make-random 0 0 0 0 1 1 1/5 1/5 2 .5 0 .5)) - (make-rectangular 7/8 -3.0)) - -(test (pick-natural 224 (make-random 1/5)) 5) -(test (pick-integer 900 (make-random 0 0 1/5)) -7) -(test (pick-real 9000 (make-random 0 0 0 .5 1 1/8)) 11.0) - -(let* ([lits '("bcd" "cbd")]) - (test (pick-char 0 (make-random 0 0)) #\A) - (test (pick-char 0 (make-random 2 1)) #\c) - (test (pick-char 1000 (make-random 1 25 0)) #\Z) - (test (pick-char 1000 (make-random 0 65)) #\a) - (test (pick-char 1500 (make-random 0 1 65)) #\a) - (test (pick-char 1500 (make-random 0 0 3)) #\⇒) - (test (pick-char 2500 (make-random 0 0 1 3)) #\⇒) - (test (pick-char 2500 (make-random 0 0 0 1)) (integer->char #x4E01)) - (test (pick-char 1000 (make-random 0 (- (char->integer #\_) #x20))) #\`) - (test (random-string lits 3 0 (make-random 0 1)) "cbd") - (test (random-string lits 3 0 (make-random 1 0 1 1 1 2 1)) "abc") - (test (pick-string lits 0 (make-random .5 1 0 1 1 1 2 1)) "abc") - (test (pick-var lits 0 (make-random .01 1 0 1 1 1 2 1)) 'abc)) - -(let () - (define-language L - (a 5 (x a)) - (b 4)) - (test (pick-nt 'a #f L 1 'dontcare) - (nt-rhs (car (compiled-lang-lang L)))) - (test (pick-nt 'a #f L preferred-production-threshold 'dontcare (make-random 1)) - (nt-rhs (car (compiled-lang-lang L)))) - (let ([pref (car (nt-rhs (car (compiled-lang-lang L))))]) - (test (pick-nt 'a #f L preferred-production-threshold - (make-pref-prods 'dont-care - (make-immutable-hash `((a ,pref)))) - (make-random 0)) - (list pref))) - (test (pick-nt 'b #f L preferred-production-threshold #f) - (nt-rhs (cadr (compiled-lang-lang L))))) - -(define-syntax raised-exn-msg - (syntax-rules () - [(_ expr) (raised-exn-msg exn:fail? expr)] - [(_ exn? expr) - (with-handlers ([exn? exn-message]) - (begin - expr - (let () - (define-struct exn-not-raised ()) - (make-exn-not-raised))))])) - -(define (patterns . selectors) - (map (λ (selector) - (λ (name cross? lang size pref-prods) - (list (selector (nt-rhs (nt-by-name lang name cross?)))))) - selectors)) - -(define (iterator name items) - (let ([bi (box items)]) - (λ () - (if (null? (unbox bi)) - (error name "empty") - (begin0 (car (unbox bi)) (set-box! bi (cdr (unbox bi)))))))) - -(let ([iter (iterator 'test-iterator '(a b))]) - (test (iter) 'a) - (test (iter) 'b) - (test (raised-exn-msg (iter)) #rx"empty")) - -(define (decisions #:var [var pick-var] - #:nt [nt pick-nt] - #:str [str pick-string] - #:num [num pick-number] - #:nat [nat pick-natural] - #:int [int pick-integer] - #:real [real pick-real] - #:any [any pick-any] - #:seq [seq pick-sequence-length] - #:pref [pref pick-preferred-productions]) - (define-syntax decision - (syntax-rules () - [(_ d) (if (procedure? d) (λ () d) (iterator (quote d) d))])) - (unit (import) (export decisions^) - (define next-variable-decision (decision var)) - (define next-non-terminal-decision (decision nt)) - (define next-number-decision (decision num)) - (define next-natural-decision (decision nat)) - (define next-integer-decision (decision int)) - (define next-real-decision (decision real)) - (define next-string-decision (decision str)) - (define next-any-decision (decision any)) - (define next-sequence-decision (decision seq)) - (define next-pref-prods-decision (decision pref)))) - -(define-syntax generate-term/decisions - (syntax-rules () - [(_ lang pat size attempt decisions) - (parameterize ([generation-decisions decisions]) - (generate-term lang pat size #:attempt attempt))])) - -(let () - (define-language lc - (e (e e) x (λ (x) e)) - (x (variable-except λ))) - - ;; Generate (λ (x) x) - (test - (generate-term/decisions - lc e 1 0 - (decisions #:var (list (λ _ 'x) (λ _'x)) - #:nt (patterns third first first first))) - '(λ (x) x)) - - ;; Generate pattern that's not a non-terminal - (test - (generate-term/decisions - lc (x x x_1 x_1) 1 0 - (decisions #:var (list (λ _ 'x) (λ _ 'y)))) - '(x x y y)) - - ; After choosing (e e), size decremented forces each e to x. - (test - (generate-term/decisions - lc e 1 0 - (decisions #:nt (patterns first) - #:var (list (λ _ 'x) (λ _ 'y)))) - '(x y))) - -;; variable-except pattern -(let () - (define-language var - (e (variable-except x y))) - (test - (generate-term/decisions - var e 2 0 - (decisions #:var (list (λ _ 'x) (λ _ 'y) (λ _ 'x) (λ _ 'z)))) - 'z)) - -(let () - (define-language L - (n natural) - (i integer) - (r real)) - (test (let ([n (generate-term L n 0 #:attempt 10000)]) - (and (integer? n) - (exact? n) - (not (negative? n)))) - #t) - (test (generate-term/decisions L n 0 1 (decisions #:nat (λ (_) 42))) 42) - (test (let ([i (generate-term L i 0 #:attempt 10000)]) - (and (integer? i) (exact? i))) - #t) - (test (generate-term/decisions L i 0 1 (decisions #:int (λ (_) -42))) -42) - (test (real? (generate-term L r 0 #:attempt 10000)) #t) - (test (generate-term/decisions L r 0 1 (decisions #:real (λ (_) 4.2))) 4.2)) - -(let () - (define-language lang - (a (number number ... "foo" ... "bar" #t ...)) - (b (number_1 ..._!_1 number_1 ..._1)) - (c (variable_1 ..._1 number_2 ..._1)) - (d (z_1 ... z_2 ..._!_1 (z_1 z_2) ...)) - (e (n_1 ..._!_1 n_2 ..._!_1 (n_1 n_2) ..._3)) - (f (n_1 ..._1 n_2 ..._2 n_2 ..._1)) - (g (z_1 ..._!_1 z_2 ... (z_1 z_2) ...)) - (n number) - (z 4)) - (test - (generate-term/decisions - lang a 2 0 - (decisions #:num (build-list 3 (λ (n) (λ (_) n))) - #:seq (list (λ (_) 2) (λ (_) 3) (λ (_) 1)))) - `(0 1 2 "foo" "foo" "foo" "bar" #t)) - (test (generate-term/decisions lang b 5 0 (decisions #:seq (list (λ (_) 0)))) - null) - (test (generate-term/decisions lang c 5 0 (decisions #:seq (list (λ (_) 0)))) - null) - (test (generate-term/decisions lang d 5 0 (decisions #:seq (list (λ (_) 2)))) - '(4 4 4 4 (4 4) (4 4))) - (test (raised-exn-msg exn:fail:redex:generation-failure? (generate-term lang e 5 #:retries 42)) - #rx"generate-term: unable to generate pattern e in 42") - (test (generate-term/decisions lang f 5 0 (decisions #:seq (list (λ (_) 0)))) null) - (test (generate-term/decisions - lang ((0 ..._!_1) ... (1 ..._!_1) ...) 5 0 - (decisions #:seq (list (λ (_) 2) (λ (_) 3) (λ (_) 4) (λ (_) 2) (λ (_) 3) (λ (_) 4) - (λ (_) 2) (λ (_) 3) (λ (_) 4) (λ (_) 1) (λ (_) 3)))) - '((0 0 0) (0 0 0 0) (1 1 1))) - (test (generate-term/decisions - lang ((0 ..._!_1) ... (1 ..._!_1) ...) 5 0 - (decisions #:seq (list (λ (_) 2) (λ (_) 3) (λ (_) 4) (λ (_) 2) (λ (_) 3) (λ (_) 5)))) - '((0 0 0) (0 0 0 0) (1 1 1) (1 1 1 1 1)))) - -(let () - (define-language lang (e (variable-prefix pf))) - (test - (generate-term/decisions - lang e 5 0 - (decisions #:var (list (λ _ 'x)))) - 'pfx)) - -(let () - (define-language lang (x variable literal)) - (test ((is-nt? lang) 'x) #t) - (test ((is-nt? lang) 'y) #f)) - -(let () - (define-language lang - (e number (e_1 e_2 e e_1 e_2))) - (test - (generate-term/decisions - lang e 5 0 - (decisions #:nt (patterns second first first first) - #:num (list (λ _ 2) (λ _ 3) (λ _ 4)))) - '(2 3 4 2 3))) - -(let () - (define-language lang - (a (number_!_1 number_!_2 number_!_1)) - (b (c_!_1 c_!_1 c_!_1)) - (c 1 2)) - (test - (generate-term/decisions - lang a 5 0 - (decisions #:num (list (λ _ 1) (λ _ 1) (λ _ 1) (λ _ 1) (λ _ 1) (λ _ 2)))) - '(1 1 2)) - (test - (generate-term/decisions - lang (number_!_1 number_!_2 number_!_1) 5 0 - (decisions #:num (list (λ _ 1) (λ _ 1) (λ _ 1) (λ _ 1) (λ _ 1) (λ _ 2)))) - '(1 1 2)) - (test - (raised-exn-msg exn:fail:redex:generation-failure? (generate-term lang b 5000)) - #rx"unable")) - -(let () - (define-language lang - (e string) - (f foo bar)) - (test - (let/ec k - (generate-term/decisions - lang e 5 0 - (decisions #:str (list (λ (l a) (k (sort l string<=?))))))) - '("bar" "foo"))) - -(let () - (define-language lang - (a 43) - (b (side-condition a_1 (odd? (term a_1)))) - (c (side-condition a_1 (even? (term a_1)))) - (e (side-condition (x_1 x_!_2 x_!_2) (not (eq? (term x_1) 'x)))) - (x variable)) - (test (generate-term lang b 5) 43) - (test (generate-term lang (side-condition a (odd? (term a))) 5) 43) - (test (raised-exn-msg exn:fail:redex:generation-failure? (generate-term lang c 5)) - #px"unable to generate pattern \\(side-condition a\\_1 #\\)") - (test (let/ec k - (generate-term lang (number_1 (side-condition 7 (k (term number_1)))) 5)) - 'number_1) - - (test ; mismatch patterns work with side-condition failure/retry - (generate-term/decisions - lang e 5 0 - (decisions #:var (list (λ _ 'x) (λ _ 'x) (λ _ 'y) (λ _ 'y) (λ _ 'x) (λ _ 'y)))) - '(y x y)) - (test ; generate compiles side-conditions in pattern - (generate-term/decisions - lang (side-condition x_1 (not (eq? (term x_1) 'x))) 5 0 - (decisions #:var (list (λ _ 'x) (λ _ 'y)))) - 'y)) - -(let () - (define-language lang - (a (name x b)) - (b 4) - (c (side-condition (name x d) (zero? (term x)))) - (d 2 1 0) - (e ((side-condition (name d_1 d) (zero? (term d_1))) d_1))) - (test (generate-term lang a 5) 4) - (test (generate-term lang c 5) 0) - (test (generate-term lang e 5) '(0 0))) - -(let () - (define-language lang - (a number (+ a a)) - (A hole (+ a A) (+ A a)) - (C hole) - (e ((in-hole (in-hole f (number_1 hole)) number_1) number_1)) - (f (in-hole C (number_1 hole))) - (g (in-hole (side-condition (hole number_1) (zero? (term number_1))) number_2)) - (h ((in-hole i number_1) number_1)) - (i (number_1 (in-hole j (number_1 hole)))) - (j (in-hole (hole number_1) (number_1 hole))) - (x variable) - (y variable)) - - (test - (generate-term/decisions - lang (in-hole A number ) 5 0 - (decisions - #:nt (patterns second second first first third first second first first) - #:num (build-list 5 (λ (x) (λ (_) x))))) - '(+ (+ 1 2) (+ 0 (+ 3 4)))) - - (test (generate-term lang (in-hole (in-hole (1 hole) hole) 5) 5) '(1 5)) - (test (generate-term lang (hole 4) 5) (term (hole 4))) - (test (generate-term/decisions - lang (variable_1 (in-hole C variable_1)) 5 0 - (decisions #:var (list (λ _ 'x) (λ _ 'y) (λ _ 'x)))) - '(x x)) - (test (generate-term/decisions - lang (variable_!_1 (in-hole C variable_!_1)) 5 0 - (decisions #:var (list (λ _ 'x) (λ _ 'x) (λ _ 'x) (λ _ 'y)))) - '(x y)) - (test (generate-term/decisions lang e 5 0 (decisions #:num (list (λ _ 1) (λ _ 2)))) - '((2 (1 1)) 1)) - (test (generate-term/decisions lang g 5 0 (decisions #:num (list (λ _ 1) (λ _ 2) (λ _ 1) (λ _ 0)))) - '(1 0)) - (test (generate-term/decisions lang h 5 0 (decisions #:num (list (λ _ 1) (λ _ 2) (λ _ 3)))) - '((2 ((3 (2 1)) 3)) 1))) - -(let () - (define-language lc - (e (e e) (+ e e) x v) - (v (λ (x) e) number) - (x variable-not-otherwise-mentioned)) - (test (generate-term/decisions lc x 5 0 (decisions #:var (list (λ _ 'λ) (λ _ '+) (λ _ 'x)))) - 'x)) - -(let () - (define-language four - (e 4) - (f 5)) - (define-language empty) - - ;; `any' pattern - (let ([four (prepare-lang four)] - [sexp (prepare-lang sexp)]) - (test (call-with-values (λ () (pick-any four sexp (make-random 0 1))) list) - (list four 'f)) - (test (call-with-values (λ () (pick-any four sexp (make-random 1))) list) - (list sexp 'sexp))) - (test (generate-term/decisions - four any 5 0 (decisions #:any (list (λ (lang sexp) (values lang 'e))))) 4) - (test (generate-term/decisions - four any 5 0 - (decisions #:any (list (λ (lang sexp) (values sexp 'sexp))) - #:nt (patterns fifth second second second) - #:seq (list (λ _ 3)) - #:str (list (λ _ "foo") (λ _ "bar") (λ _ "baz")))) - '("foo" "bar" "baz")) - (test (generate-term/decisions - empty any 5 0 (decisions #:nt (patterns first) - #:var (list (λ _ 'x)))) - 'x)) - -;; `hide-hole' pattern -(let () - (define-language lang - (e (hide-hole (in-hole ((hide-hole hole) hole) 1)))) - (test (generate-term lang e 5) (term (hole 1)))) - -(define (output-error-port thunk) - (let ([port (open-output-string)]) - (parameterize ([current-error-port port]) - (thunk)) - (get-output-string port))) - -;; `cross' pattern -(let () - (define-language lang - (e x (e e) v) - (v (λ (x) e)) - (x variable-not-otherwise-mentioned)) - (define-extended-language name-collision lang (e-e 47)) - - (test (generate-term/decisions - lang (cross e) 3 0 - (decisions #:nt (patterns fourth first first second first first first) - #:var (list (λ _ 'x) (λ _ 'y)))) - (term (λ (x) (hole y)))) - - (test (generate-term/decisions name-collision (cross e) 3 0 - (decisions #:nt (patterns first))) - (term hole)) - (test (generate-term/decisions name-collision e-e 3 0 - (decisions #:nt (patterns first))) - 47) - - (test (hash-ref (base-cases-non-cross (find-base-cases name-collision)) 'e-e) - '(0))) - -(let () - (define-language L - (a ((a ...) ...))) - (test (generate-term/decisions - L (cross a) 3 0 - (decisions #:nt (patterns second first) - #:seq (list (λ _ 0) (λ _ 0) (λ _ 0) (λ _ 0)))) - (term ((hole))))) - -;; generation failures increase size and attempt -(let () - (define-language L - (a d b) - (b d c) - (c e) - - (x variable)) - (test - (generate-term/decisions - L (side-condition a (eq? (term a) 'e)) 0 0 - ; It isn't possible for `a' to generate 'y until size is 2. - ; When size is 0, the generator has no choice but the 'x production. - ; When size is 1, the generator has a choice for `a' but not for `b'. - ; Supply enough first-production choices to cover the size 1 attempts - ; followed by the choices that produce 'y on the first size 2 attempt. - (decisions - #:nt (apply patterns - (append (build-list (* default-retries proportion-at-size) - (λ (_) first)) - (list second second first))))) - 'e) - - (test - (generate-term/decisions - L (side-condition x (number? (term x))) 0 0 - (decisions #:var (λ (lang-lits attempt) - (if (>= attempt retry-threshold) 0 'x)))) - 0) - - (let ([attempts null] - [start (sub1 retry-threshold)] - [finish (+ retry-threshold post-threshold-incr)]) - (generate-term/decisions - L (side-condition x (number? (term x))) 0 start - (decisions #:var (λ (lang-lits attempt) - (set! attempts (cons attempt attempts)) - (if (= attempt finish) 0 'x)))) - (test attempts (list finish retry-threshold start)))) - -;; output : (-> (-> void) string) -(define (output thunk) - (let ([p (open-output-string)]) - (parameterize ([current-output-port p]) - (unless (void? (thunk)) - (error 'output "expected void result"))) - (begin0 - (get-output-string p) - (close-output-port p)))) - -;; preferred productions -(let ([make-pick-nt (λ opt (λ req (apply pick-nt (append req opt))))]) - (define-language L - (e (+ e e) (* e e) 7)) - (define-language M (e 0) (e-e 1)) - - (let ([pats (λ (L) (nt-rhs (car (compiled-lang-lang L))))]) - (test - (generate-term/decisions - L e 2 preferred-production-threshold - (decisions #:pref (list (λ (L) (make-pref-prods - 'dont-care - (make-immutable-hash `((e ,(car (pats L)))))))) - #:nt (make-pick-nt (make-random 0 0 0)))) - '(+ (+ 7 7) (+ 7 7))) - (test - (generate-term/decisions - L any 2 preferred-production-threshold - (decisions #:nt (patterns first) - #:var (list (λ _ 'x)) - #:any (list (λ (lang sexp) (values sexp 'sexp))))) - 'x) - (test - (generate-term/decisions - L any 2 preferred-production-threshold - (decisions #:pref (list (λ (L) (make-pref-prods - 'dont-care - (make-immutable-hash `((e ,(car (pats L)))))))) - #:nt (make-pick-nt (make-random 0 0 0)) - #:any (list (λ (lang sexp) (values lang 'e))))) - '(+ (+ 7 7) (+ 7 7))) - (test - (generate-term/decisions - M (cross e) 2 preferred-production-threshold - (decisions #:nt (make-pick-nt (make-random) (λ (att rand) #t)))) - (term hole)) - (test - (generate-term/decisions - M e-e 2 preferred-production-threshold - (decisions #:nt (make-pick-nt (make-random) (λ (att rand) #t)))) - 1) - - (test - (let ([generated null]) - (output - (λ () - (check-reduction-relation - (reduction-relation L (--> e e)) - (λ (t) (set! generated (cons t generated))) - #:decisions (decisions #:nt (make-pick-nt (make-random) - (λ (att rand) #t)) - #:pref (list (λ (_) 'dontcare) - (λ (_) 'dontcare) - (λ (_) 'dontcare) - ; size 0 terms prior to this attempt - (λ (L) (make-pref-prods - 'dont-care - (make-immutable-hash `((e ,(car (pats L))))))) - (λ (L) (make-pref-prods - 'dont-care - (make-immutable-hash `((e ,(cadr (pats L))))))))) - #:attempts 5))) - generated) - '((* 7 7) (+ 7 7) 7 7 7)))) - -;; redex-check -(let () - (define-language lang - (d 5) - (e e 4) - (n number)) - (test (output (λ () (redex-check lang d #f))) - #rx"redex-check: .*:.*\ncounterexample found after 1 attempt:\n5\n") - (test (output (λ () (redex-check lang d #t))) - #rx"redex-check: .*:.*\nno counterexamples in 1000 attempts\n") - (let-syntax ([noloc (λ (stx) - (syntax-case stx () - [(_ e) (datum->syntax stx (syntax->datum #'e) #f)]))]) - (test (output (λ () (noloc (redex-check lang d #t)))) - "redex-check: no counterexamples in 1000 attempts\n")) - (test (output (λ () (redex-check lang (d e) (and (eq? (term d) 5) (eq? (term e) 4)) #:attempts 2))) - #rx"no counterexamples") - (test (output (λ () (redex-check lang (d ...) (zero? (modulo (foldl + 0 (term (d ...))) 5)) #:attempts 2))) - #rx"no counterexamples") - (test (output (λ () (redex-check lang (d e) #f))) - #rx"counterexample found after 1 attempt:\n\\(5 4\\)\n") - (let* ([p (open-output-string)] - [m (parameterize ([current-output-port p]) - (with-handlers ([exn:fail? exn-message]) - (redex-check lang d (error 'pred-raised)) - 'no-exn-raised))]) - (test m "error: pred-raised") - (test (get-output-string p) #rx"checking 5 raises.*\n$") - (close-output-port p)) - - (test (output - (λ () - (redex-check lang n (eq? 42 (term n)) - #:attempts 1 - #:source (reduction-relation - lang - (--> 42 dontcare) - (--> 0 dontcare z))))) - #rx"counterexample found after 1 attempt with z:\n0\n") - - (let ([generated null]) - (test (output - (λ () - (redex-check lang n (set! generated (cons (term n) generated)) - #:attempts 5 - #:source (reduction-relation - lang - (--> 1 dontcare) - (--> 2 dontcare))))) - #rx"no counterexamples.*with each clause") - (test generated '(2 2 1 1))) - - (let () - (define-metafunction lang - [(mf 42) dontcare] - [(mf 0) dontcare]) - (test (output - (λ () - (redex-check lang (n) (eq? 42 (term n)) - #:attempts 1 - #:source mf))) - #px"counterexample found after 1 attempt with clause at .*:\\d+:\\d+:\n\\(0\\)\n")) - - (let () - (define-metafunction lang - [(f) - dontcare - (side-condition #f)]) - (test (raised-exn-msg - exn:fail:redex:generation-failure? - (redex-check lang any #t - #:attempts 1 - #:source f)) - #px"unable to generate LHS of clause at .*:\\d+:\\d+")) - - (let () - (define-metafunction lang - [(mf d e) dontcare]) - (test (output - (λ () - (redex-check lang (number_1 number_2) - (and (= (term number_1) 5) - (= (term number_2) 4)) - #:attempts 1 - #:source mf))) - #rx"no counterexamples")) - - (test (raised-exn-msg - exn:fail:redex? - (redex-check lang n #t #:source (reduction-relation lang (--> x 1)))) - #rx"x does not match n") - (test (raised-exn-msg - exn:fail:redex:generation-failure? - (redex-check lang (side-condition any #f) #t #:retries 42 #:attempts 1)) - #rx"^redex-check: unable .* in 42") - (let ([unable-loc #px"^redex-check: unable to generate LHS of clause at .*:\\d+:\\d+ in 42"]) - (let-syntax ([test-gen-fail - (syntax-rules () - [(_ clauses ... expected) - (test - (raised-exn-msg - exn:fail:redex:generation-failure? - (redex-check lang any #t - #:source (reduction-relation - lang - clauses ...) - #:retries 42 - #:attempts 1)) - expected)])]) - (test-gen-fail - (--> (side-condition any #f) any) - unable-loc) - - (test-gen-fail - (==> (side-condition any #f) any) - with [(--> a b) (==> a b)] - unable-loc) - - (test-gen-fail - (--> (side-condition any #f) any impossible) - #rx"^redex-check: unable to generate LHS of impossible in 42")))) - -;; check-metafunction-contract -(let () - (define-language empty) - (define-metafunction empty - f : (side-condition number_1 (odd? (term number_1))) -> number - [(f 1) 1] - [(f 3) 'NaN]) - - (define-metafunction empty - g : number ... -> (any ...) - [(g number_1 ... 1 number_2 ...) (number_1 ...)]) - - (define-metafunction empty - h : number -> number - [(h any) any]) - - (define-metafunction empty - [(i any ...) (any ...)]) - - (define-metafunction empty - j : (side-condition any #f) -> any - [(j any ...) (any ...)]) - - ;; Dom(f) < Ctc(f) - (test (output - (λ () - (parameterize ([generation-decisions - (decisions #:num (list (λ _ 2) (λ _ 5)))]) - (check-metafunction-contract f)))) - #rx"check-metafunction-contract:.*counterexample found after 1 attempt:\n\\(5\\)\n") - ;; Rng(f) > Codom(f) - (test (output - (λ () - (parameterize ([generation-decisions - (decisions #:num (list (λ _ 3)))]) - (check-metafunction-contract f)))) - #rx"counterexample found after 1 attempt:\n\\(3\\)\n") - ;; LHS matches multiple ways - (test (output - (λ () - (parameterize ([generation-decisions - (decisions #:num (list (λ _ 1) (λ _ 1)) - #:seq (list (λ _ 2)))]) - (check-metafunction-contract g)))) - #rx"counterexample found after 1 attempt:\n\\(1 1\\)\n") - ;; OK -- generated from Dom(h) - (test (output (λ () (check-metafunction-contract h))) #rx"no counterexamples") - ;; OK -- generated from pattern (any ...) - (test (output (λ () (check-metafunction-contract i #:attempts 5))) #rx"no counterexamples") - - ;; Unable to generate domain - (test (raised-exn-msg - exn:fail:redex:generation-failure? - (check-metafunction-contract j #:attempts 1 #:retries 42)) - #rx"^check-metafunction-contract: unable .* in 42")) - -;; check-reduction-relation -(let () - (define-language L - (e (+ e ...) number) - (E (+ number ... E* e ...)) - (E* hole E*) - (n 4)) - - (let ([generated null] - [R (reduction-relation - L - (==> (+ number ...) whatever) - (--> (side-condition number (even? (term number))) whatever) - with - [(--> (in-hole E a) whatever) - (==> a b)])]) - (test (begin - (output - (λ () - (check-reduction-relation - R (λ (term) (set! generated (cons term generated))) - #:decisions (decisions #:seq (list (λ _ 0) (λ _ 0) (λ _ 0)) - #:num (list (λ _ 1) (λ _ 1) (λ _ 0))) - #:attempts 1))) - generated) - (reverse '((+ (+)) 0)))) - - (let ([S (reduction-relation L (--> 1 2 name) (--> 3 4))]) - (test (output (λ () (check-reduction-relation S (λ (x) #t) #:attempts 1))) - #rx"check-reduction-relation:.*no counterexamples") - (test (output - (λ () (check-reduction-relation S (λ (x) #f)))) - #rx"counterexample found after 1 attempt with name:\n1\n") - (test (output - (λ () (check-reduction-relation S (curry eq? 1)))) - #px"counterexample found after 1 attempt with clause at .*:\\d+:\\d+:\n3\n")) - - (test (output - (λ () (check-reduction-relation (reduction-relation L (--> 1 2) (--> 3 4 name)) (curry eq? 1)))) - #px"counterexample found after 1 attempt with name:\n3\n") - - (let ([T (reduction-relation - L - (==> number number - (where any_num number) - (side-condition (eq? (term any_num) 4)) - (where any_numb any_num) - (side-condition (eq? (term any_numb) 4))) - with - [(--> (9 a) b) - (==> a b)])]) - (test (output - (λ () - (check-reduction-relation - T (curry equal? '(9 4)) - #:attempts 1 - #:decisions (decisions #:num (build-list 5 (λ (x) (λ _ x))))))) - #rx"no counterexamples")) - - (let ([U (reduction-relation L (--> (side-condition any #f) any))]) - (test (raised-exn-msg - exn:fail:redex:generation-failure? - (check-reduction-relation U (λ (_) #t))) - #rx"^check-reduction-relation: unable"))) - -; check-metafunction -(let () - (define-language empty) - - (define-metafunction empty - [(m 1) whatever] - [(m 2) whatever]) - (define-metafunction empty - [(n (side-condition any #f)) any]) - - (let ([generated null]) - (test (begin - (output - (λ () - (check-metafunction m (λ (t) (set! generated (cons t generated))) #:attempts 1))) - generated) - (reverse '((1) (2))))) - - (test - (let/ec k - (define-language L (n 2)) - (define-metafunction L - [(f n) - n - (where number_2 ,(add1 (term n))) - (where number_3 ,(add1 (term number_2))) - (side-condition (k (term number_3)))] - [(f any) 0]) - (check-metafunction f (λ (_) #t))) - 4) - - (test (output (λ () (check-metafunction m (λ (_) #t)))) #rx"no counterexamples") - (test (output (λ () (check-metafunction m (curry eq? 1)))) - #px"check-metafunction:.*counterexample found after 1 attempt with clause at .*:\\d+:\\d+") - (test (raised-exn-msg - exn:fail:contract? - (check-metafunction m (λ (_) #t) #:attempts 'NaN)) - #rx"check-metafunction: expected") - (test (raised-exn-msg - exn:fail:redex:generation-failure? - (check-metafunction n (λ (_) #t) #:retries 42)) - #rx"check-metafunction: unable .* in 42")) - -;; custom generators -(let () - (define-language L - (x variable)) - - (test - (generate-term - L x_1 0 - #:custom (λ (pat sz i-h acc env att rec def) - (match pat - ['x (values 'x env)] - [_ (def acc)]))) - 'x) - (test - (let/ec k - (equal? - (generate-term - L (x x) 0 - #:custom (let ([once? #f]) - (λ (pat sz i-h acc env att rec def) - (match pat - ['x (if once? - (k #f) - (begin - (set! once? #t) - (values 'x env)))] - [_ (def acc)])))) - '(x x))) - #t) - - (test - (hash-ref - (let/ec k - (generate-term - L (x (x)) 0 - #:custom (λ (pat sz i-h acc env att rec def) - (match pat - [(struct binder ('x)) - (values 'y (hash-set env pat 'y))] - [(list (struct binder ('x))) (k env)] - [_ (def acc)])))) - (make-binder 'x)) - 'y) - - (test - (generate-term - L (in-hole hole 7) 0 - #:custom (λ (pat sz i-h acc env att rec def) - (match pat - [`(in-hole hole 7) - (rec 'hole #:contractum 7)] - [_ (def acc)]))) - 7) - - (test - (let/ec k - (generate-term - L any 10 - #:attempt 42 - #:custom (λ (pat sz i-h acc env att rec def) (k (list sz att))))) - '(10 42)) - - (test - (let/ec k - (generate-term - L x 10 - #:custom (λ (pat sz i-h acc env att rec def) - (match pat - ['x (rec 7 #:size 0)] - [7 (k sz)] - [_ (def att)])))) - 0) - - (test - (generate-term - L (q 7) 0 - #:custom (λ (pat sz i-h acc env att rec def) - (match pat - ['q (rec '(7 7) #:acc 8)] - [7 (values (or acc 7) env)] - [_ (def att)]))) - '((8 8) 7))) - -;; parse/unparse-pattern -(let-syntax ([test-match (syntax-rules () [(_ p x) (test (match x [p #t] [_ #f]) #t)])]) - (define-language lang (x variable)) - (let ([pattern '((x_1 number) ... 3)]) - (test-match (list - (struct ellipsis - ('... - (list (struct binder ('x_1)) (struct binder ('number))) - _ - (list (struct binder ('number)) (struct binder ('x_1))))) - 3) - (parse-pattern pattern lang 'top-level)) - (test (unparse-pattern (parse-pattern pattern lang 'top-level)) pattern)) - (let ([pattern '((x_1 ..._1 x_2) ..._!_1)]) - (test-match (struct ellipsis - ((struct mismatch (i_1 '..._!_1)) - (list - (struct ellipsis - ('..._1 - (struct binder ('x_1)) - (struct class ('..._1)) - (list (struct binder ('x_1))))) - (struct binder ('x_2))) - _ - (list (struct binder ('x_2)) '..._1 (struct class ('..._1)) (struct binder ('x_1))))) - (car (parse-pattern pattern lang 'grammar))) - (test (unparse-pattern (parse-pattern pattern lang 'grammar)) pattern)) - (let ([pattern '((name x_1 x_!_2) ...)]) - (test-match (struct ellipsis - ('... `(name x_1 ,(struct mismatch (i_2 'x_!_2))) _ - (list (struct binder ('x_1)) (struct mismatch (i_2 'x_!_2))))) - (car (parse-pattern pattern lang 'grammar))) - (test (unparse-pattern (parse-pattern pattern lang 'grammar)) pattern)) - (let ([pattern '((x ...) ..._1)]) - (test-match (struct ellipsis - ('..._1 - (list - (struct ellipsis - ('... - (struct binder ('x)) - (struct class (c_1)) - (list (struct binder ('x)))))) - _ - (list (struct class (c_1)) (struct binder ('x))))) - (car (parse-pattern pattern lang 'top-level))) - (test (unparse-pattern (parse-pattern pattern lang 'top-level)) pattern)) - (let ([pattern '((variable_1 ..._!_1) ...)]) - (test-match (struct ellipsis - ('... - (list - (struct ellipsis - ((struct mismatch (i_1 '..._!_1)) - (struct binder ('variable_1)) - (struct class (c_1)) - (list (struct binder ('variable_1)))))) - _ - (list (struct class (c_1)) (struct mismatch (i_1 '..._!_1)) (struct binder ('variable_1))))) - (car (parse-pattern pattern lang 'grammar))) - (test (unparse-pattern (parse-pattern pattern lang 'grammar)) pattern)) - (test (parse-pattern '(cross x) lang 'grammar) '(cross x-x)) - (test (parse-pattern '(cross x) lang 'cross) '(cross x)) - (test (parse-pattern 'x lang 'grammar) 'x) - (test (parse-pattern 'variable lang 'grammar) 'variable)) - -(let () - (define-language lang (x variable)) - (define-syntax test-class-reassignments - (syntax-rules () - [(_ pattern expected) - (test (to-table (class-reassignments (parse-pattern pattern lang 'top-level))) - expected)])) - - (test-class-reassignments - '(x_1 ..._1 x_2 ..._2 x_2 ..._1) - '((..._2 . ..._1))) - (test-class-reassignments - '((x_1 ..._1 x_1 ..._2) (x_2 ..._1 x_2 ..._2) x_3 ..._2) - '((..._1 . ..._2) (..._2 . ..._2))) - (test-class-reassignments - '(x_1 ..._1 x ..._2 x_1 ..._2) - '((..._1 . ..._2))) - (test-class-reassignments - '(x_1 ..._1 x_2 ..._2 (x_1 x_2) ..._3) - '((..._1 . ..._3) (..._2 . ..._3))) - (test-class-reassignments - '((x_1 ..._1) ..._2 x_2 ..._3 (x_1 ..._4 x_2) ..._5) - '((..._1 . ..._4) (..._2 . ..._5) (..._3 . ..._5))) - (test-class-reassignments - '((x_1 ..._1) ..._2 (x_1 ..._3) ..._4 (x_1 ..._5) ..._6) - '((..._1 . ..._5) (..._2 . ..._6) (..._3 . ..._5) (..._4 . ..._6))) - (test-class-reassignments - '(x_1 ..._1 x_1 ..._2 x_2 ..._1 x_2 ..._4 x_2 ..._3) - '((..._1 . ..._3) (..._2 . ..._3) (..._4 . ..._3))) - (test - (hash-map - (class-reassignments (parse-pattern '(x_1 ... x_1 ..._!_1 x_1 ..._1) lang 'top-level)) - (λ (_ cls) cls)) - '(..._1 ..._1)) - (test-class-reassignments - '((3 ..._1) ..._2 (4 ..._1) ..._3) - '((..._2 . ..._3))) - (test-class-reassignments - '(x ..._1 x ..._2 variable ..._2 variable ..._3 variable_1 ..._3 variable_1 ..._4) - '((..._1 . ..._4) (..._2 . ..._4) (..._3 . ..._4)))) - -(print-tests-passed 'rg-test.ss) diff --git a/collects/redex/private/run-tests.ss b/collects/redex/private/run-tests.ss deleted file mode 100644 index 4ec5971dc6..0000000000 --- a/collects/redex/private/run-tests.ss +++ /dev/null @@ -1,41 +0,0 @@ -;; require this file to run all of the test suites for redex. - -#lang scheme/base -(require scheme/runtime-path - "config.ss" - "test-util.ss") - -(set-show-bitmaps? #t) - -(define test-files - '("lw-test.ss" - "matcher-test.ss" - "tl-test.ss" - "term-test.ss" - "rg-test.ss" - "keyword-macros-test.ss" - "core-layout-test.ss" - "bitmap-test.ss" - "pict-test.ss" - "hole-test.ss")) - -(define-runtime-path here ".") - -(define (flush) - ;; these flushes are here for running under cygwin, - ;; which somehow makes mzscheme think it isn't using - ;; an interative port - (flush-output (current-error-port)) - (flush-output (current-output-port))) - -(for-each - (λ (test-file) - (flush) - (printf "requiring ~a\n" test-file) - (flush) - (dynamic-require (build-path here test-file) #f) - (flush)) - test-files) - -(printf "\nWARNING: didn't run color-test.ss or subst-test.ss\n") -(flush) diff --git a/collects/redex/private/term-test.ss b/collects/redex/private/term-test.ss deleted file mode 100644 index 25059c7bbf..0000000000 --- a/collects/redex/private/term-test.ss +++ /dev/null @@ -1,177 +0,0 @@ -(module term-test scheme - (require "term.ss" - "matcher.ss" - "test-util.ss") - - (reset-count) - (test (term 1) 1) - (test (term (1 2)) (list 1 2)) - (test (term (1 ,(+ 1 1))) (list 1 2)) - (test (term-let ([x 1]) (term (x x))) (list 1 1)) - (test (term-let ([(x ...) (list 1 2 3)]) (term ((y x) ...))) '((y 1) (y 2) (y 3))) - - (test (term (in-hole (1 hole) 2)) (term (1 2))) - (test (term (in-hole (1 hole (hole x)) 2)) (term (1 2 (hole x)))) - - (test (equal? (term hole) (term hole)) #t) - (test (hole? (term hole)) #t) - (test (hole? (term (hole #f))) #f) - (test (hole? (term (hole the-name))) #f) - - (test (term-let-fn ((f (lambda (q) q))) - (term (f 1 2 3))) - (term (1 2 3))) - - (test (term-let-fn ((f (lambda (q) `(y ,(car q))))) - (term (f (zzzz)))) - (term (y (zzzz)))) - - (test (term-let-fn ((f (λ (x) (add1 (car x))))) - (term (f 2))) - (term 3)) - - (test (term-let ([((x ...) ...) (list (list 1 1) (list 2 2) (list 3 3))]) - (term-let-fn ((f (λ (x) (car x)))) - (term ((qq (f x) ...) ...)))) - (term ((qq 1 1) (qq 2 2) (qq 3 3)))) - - (test (term-let-fn ((f (lambda (x) (car x)))) - (term (f hole))) - (term hole)) - - (test (term-let-fn ((f (lambda (q) `(y ,(car q))))) - (term-let-fn ((g (lambda (x) `(ff ,(car x))))) - (term (g (f (zzzz)))))) - (term (ff (y (zzzz))))) - - (test (term-let-fn ((f (lambda (q) `(y ,(car q))))) - (term-let-fn ((g (lambda (x) `(ff ,(car x))))) - (term (f (g (f (zzzz))))))) - (term (y (ff (y (zzzz)))))) - - (test (term-let ([x 1]) - (term (x . y))) - (term (1 . y))) - - (test (term-let ([(x ...) (list 3 2 1)]) - (term (x ... . y))) - (term (3 2 1 . y))) - - (test (term-let ([(x . y) (cons 1 2)]) - (term (x y))) - (term (1 2))) - - ;; test that the implicit `plug' inserted by `in-hole' - ;; deals with ellipses properly - (test (term-let ([(E ...) '(1 2 3)]) - (term ((in-hole E x) ...))) - (term (1 2 3))) - - (test (term-let-fn ((metafun car)) - (term-let ((x 'whatever) - ((y ...) '(4 5 6))) - (term (((metafun x) y) ...)))) - '((whatever 4) (whatever 5) (whatever 6))) - - (test (term-let-fn ((metafun (λ (x) (car x)))) - (term-let (((y ...) '(4 5 6))) - (term ((y (metafun 1)) ...)))) - '((4 1) (5 1) (6 1))) - - (test (term-let-fn ((f (compose add1 car))) - (term-let (((x ...) '(1 2 3)) - ((y ...) '(a b c))) - (term (((f x) y) ...)))) - '((2 a) (3 b) (4 c))) - - (test (term-let-fn ((f (curry foldl + 0))) - (term-let (((x ...) '(1 2 3))) - (term (f x ...)))) - 6) - - (test (term-let-fn ((f (compose add1 car))) - (term-let (((x ...) '(1 2 3)) - (((y ...) ...) '((a b c) (d e f) (g h i)))) - (term ((((f x) y) ...) ...)))) - '(((2 a) (3 b) (4 c)) ((2 d) (3 e) (4 f)) ((2 g) (3 h) (4 i)))) - - (test (term-let-fn ((f (curry foldl + 0))) - (term-let ((((x ...) ...) '((1 2) (3 4 5) (6)))) - (term ((f x ...) ...)))) - '(3 12 6)) - - (define-namespace-anchor here) - (define ns (namespace-anchor->namespace here)) - - (let ([src 'term-template]) - (test - (parameterize ([current-namespace ns]) - (runtime-error-source - '(term-let ([(x ...) '(a b c)] - [((y ...) ...) '((1 2) (4 5 6) (7 8 9))]) - (term (((x y) ...) ...))) - src)) - src)) - - (let ([src 'term-template-metafunc]) - (test - (parameterize ([current-namespace ns]) - (runtime-error-source - '(term-let-fn ((f car)) - (term-let ([(x ...) '(a b c)] - [((y ...) ...) '((1 2) (4 5 6) (7 8 9))]) - (term ((((f x) y) ...) ...)))) - src)) - src)) - - (let ([src 'ellipsis-args]) - (test - (parameterize ([current-namespace ns]) - (runtime-error-source - '(term-let-fn ((f car)) - (term-let ([(x ...) '(a b)] - [(y ...) '(c d e)]) - (term (f ((x y) ...))))) - src)) - src)) - - (let ([src 'ellipsis-args/map]) - (test - (parameterize ([current-namespace ns]) - (runtime-error-source - '(term-let-fn ((f car)) - (term-let ([(x ...) '(a b)] - [(y ...) '(c d e)]) - (term ((f (x y)) ...)))) - src)) - src)) - - (let ([src 'ellipsis-args/in-hole]) - (test - (parameterize ([current-namespace ns]) - (runtime-error-source - '(term-let ([(x ...) '(a b)] - [(y ...) '(c d e)]) - (term ((in-hole hole (x y)) ...))) - src)) - src)) - - (let ([src 'term-let-rhs]) - (test - (parameterize ([current-namespace ns]) - (runtime-error-source - '(term-let ([(x ...) 'a]) - 3) - src)) - src)) - - (let ([src 'term-template]) - (test - (parameterize ([current-namespace ns]) - (syntax-error-sources - '(term-let ([(x ...) '(a b c)]) - (term x)) - src)) - (list src))) - - (print-tests-passed 'term-test.ss)) diff --git a/collects/redex/private/test-util.ss b/collects/redex/private/test-util.ss deleted file mode 100644 index 491f32af3c..0000000000 --- a/collects/redex/private/test-util.ss +++ /dev/null @@ -1,132 +0,0 @@ -#lang scheme - -(require "matcher.ss" - errortrace/errortrace-lib - errortrace/errortrace-key) -(provide test test-syn-err tests reset-count - syn-err-test-namespace - print-tests-passed - equal/bindings? - runtime-error-source syntax-error-sources) - -(define syn-err-test-namespace (make-base-namespace)) -(parameterize ([current-namespace syn-err-test-namespace]) - (eval '(require redex/reduction-semantics))) - -(define-syntax (test stx) - (syntax-case stx () - [(_ expected got) - (with-syntax ([line (syntax-line (syntax got))] - [fn (if (path? (syntax-source (syntax got))) - (path->string (syntax-source (syntax got))) - "")]) - (syntax/loc stx (test/proc (λ () expected) got line fn)))])) - -(define-syntax (test-syn-err stx) - (syntax-case stx () - [(_ exp regexp) - (syntax/loc stx - (test - (parameterize ([current-namespace syn-err-test-namespace]) - (with-handlers ((exn:fail:syntax? exn-message)) - (expand 'exp) - 'no-error-raised)) - regexp))])) - -(define tests 0) -(define failures 0) -(define (reset-count) - (set! tests 0) - (set! failures 0)) - -(define (print-tests-passed filename) - (cond - [(= 0 failures) - (printf "~a: all ~a tests passed.\n" filename tests)] - [else - (printf "~a: ~a test~a failed.\n" filename failures (if (= 1 failures) "" "s"))])) - -(define (test/proc run expected line filename) - ;(printf "testing line ~s:~s\n" filename line) - (let ([got (with-handlers ((exn:fail? values)) (run))]) - (set! tests (+ tests 1)) - (unless (and (not (exn? got)) - (matches? got expected)) - (set! failures (+ 1 failures)) - (fprintf (current-error-port) - "test/proc: file ~a line ~a:\n got ~s\nexpected ~s\n\n" - filename - line - got - expected)))) - -(define (matches? got expected) - (cond - [(regexp? expected) - (and (string? got) (regexp-match expected got) #t)] - [else - (equal/bindings? got expected)])) - -;; equal/bindings? : any any -> boolean -;; compares two sexps (with embedded bindings) for equality. -;; uses an order-insensitive comparison for the bindings -(define (equal/bindings? fst snd) - (let loop ([fst fst] - [snd snd]) - (cond - [(pair? fst) - (and (pair? snd) - (loop (car fst) (car snd)) - (loop (cdr fst) (cdr snd)))] - [(mtch? fst) - (and (mtch? snd) - (loop (mtch-bindings fst) - (mtch-bindings snd)) - (let ([g1 (gensym 'run-match-test-sym)]) - (equal/bindings? (mtch-context fst) - (mtch-context snd))) - (equal/bindings? (mtch-hole fst) - (mtch-hole snd)))] - [(bindings? fst) - (and (bindings? snd) - (let ([fst-table (bindings-table fst)] - [snd-table (bindings-table snd)]) - (and (= (length fst-table) - (length snd-table)) - (andmap - loop - (sort fst-table rib-lt) - (sort snd-table rib-lt)))))] - [(and (bind? fst) - (bind? snd) - (context? (bind-exp fst)) - (context? (bind-exp snd))) - (and (equal? (bind-name fst) (bind-name snd)) - (let ([g (gensym 'run-match-test-sym2)]) - (equal/bindings? (bind-exp fst) - (bind-exp snd))))] - [(and (hole? fst) - (hole? snd)) - #t] - [else (equal? fst snd)]))) - -;; rib-lt : rib rib -> boolean -(define (rib-lt r1 r2) (string<=? (format "~s" (bind-name r1)) - (format "~s" (bind-name r2)))) - -(define (runtime-error-source sexp src) - (let/ec return - (cadar - (continuation-mark-set->list - (exn-continuation-marks - (with-handlers ((exn:fail? values)) - (parameterize ([current-compile (make-errortrace-compile-handler)]) - (eval (read-syntax src (open-input-string (format "~s" sexp))))) - (return 'no-source))) - errortrace-key)))) - -(define (syntax-error-sources sexp src) - (let ([p (read-syntax src (open-input-string (format "~s" sexp)))]) - (with-handlers ((exn:srclocs? (λ (x) (map srcloc-source ((exn:srclocs-accessor x) x))))) - (expand p) - null))) \ No newline at end of file diff --git a/collects/redex/private/tl-test.ss b/collects/redex/private/tl-test.ss deleted file mode 100644 index 8dd90a3884..0000000000 --- a/collects/redex/private/tl-test.ss +++ /dev/null @@ -1,1850 +0,0 @@ -(module tl-test scheme - (require "../reduction-semantics.ss" - "test-util.ss" - (only-in "matcher.ss" make-bindings make-bind) - scheme/match - "struct.ss") - - (reset-count) - - -; -; -; ;; -; ; -; ; ;;; ;; ;; ;; ;;;; ;; ;;; ;; ;; ;;; -; ; ; ; ;; ; ; ;; ; ; ; ; ; ;; ; ; -; ; ;;;; ; ; ; ; ; ; ;;;; ; ; ;;;;; -; ; ; ; ; ; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ;; ; ; ; ; ; -; ;;;;; ;;;;;;;; ;;; ;;;; ;; ;; ;;;;; ;;;; ;;;; -; ; ; -; ;;; ;;; -; -; - - - (define-language empty-language) - - (define-language grammar - (M (M M) - number) - (E hole - (E M) - (number E)) - (X (number any) - (any number)) - (Q (Q ...) - variable) - (UN (add1 UN) - zero)) - - (test (pair? (redex-match grammar M '(1 1))) #t) - (test (pair? (redex-match grammar M '(1 1 1))) #f) - (test (pair? (redex-match grammar - (side-condition (M_1 M_2) (equal? (term M_1) (term M_2))) - '(1 1))) - #t) - (test (pair? (redex-match grammar - (side-condition (M_1 M_2) (equal? (term M_1) (term M_2))) - '(1 2))) - #f) - - (test (pair? ((redex-match grammar M) '(1 1))) - #t) - - ;; next 3: test naming of subscript-less non-terminals - (test (pair? (redex-match grammar (M M) (term (1 1)))) #t) - (test (pair? (redex-match grammar (M M) (term (1 2)))) #f) - (test (pair? (redex-match grammar (M_1 M_2) (term (1 2)))) #t) - - (define-language base-grammar - (q 1) - (e (+ e e) number) - (x (variable-except +))) - - (define-extended-language extended-grammar - base-grammar - (e .... (* e e)) - (x (variable-except + *)) - (r 2)) - - (test (pair? (redex-match extended-grammar e '(+ 1 1))) #t) - (test (pair? (redex-match extended-grammar e '(* 2 2))) #t) - (test (pair? (redex-match extended-grammar r '2)) #t) - (test (pair? (redex-match extended-grammar q '1)) #t) - (test (pair? (redex-match extended-grammar x '*)) #f) - (test (pair? (redex-match extended-grammar x '+)) #f) - (test (pair? (redex-match extended-grammar e '....)) #f) - - ;; make sure that `language' with a four period ellipses signals an error - (test (regexp-match #rx"[.][.][.][.]" (with-handlers ([exn? exn-message]) - (let () - (define-language x (e ....)) - 12))) - '("....")) - - - - ;; test multiple variable non-terminals - (let () - (define-language lang - ((l m) (l m) x) - (x variable-not-otherwise-mentioned)) - (test (pair? (redex-match lang m (term x))) - #t)) - - ;; test multiple variable non-terminals - (let () - (define-language lang - ((l m) (l m) x) - (x variable-not-otherwise-mentioned)) - (test (pair? (redex-match lang l (term x))) - #t)) - - (let () - (define-language lang - ((x y) 1 2 3)) - (define-extended-language lang2 lang - (x .... 4)) - (test (pair? (redex-match lang2 x 4)) #t) - (test (pair? (redex-match lang2 y 4)) #t) - (test (pair? (redex-match lang2 x 1)) #t) - (test (pair? (redex-match lang2 y 2)) #t)) - - ;; test that the variable "e" is not bound in the right-hand side of a side-condition - ;; this one signaled an error at some point - (let () - (define-language bad - (e 2 (side-condition (e) #t))) - (test (pair? (redex-match bad e '(2))) - #t)) - - ;; test that the variable "e" is not bound in the right-hand side of a side-condition - ;; this one tests to make sure it really isn't bound - (let ([x #f]) - (define-language bad - (e 2 (side-condition (e) (set! x (term e))))) - (redex-match bad e '(2)) - (test x 'e)) - - ;; test multiple variable non-terminals being extended - (let () - (define-language lang - ((x y) 1 2 3)) - (define-extended-language lang2 lang - (x .... 4)) - (test (pair? (redex-match lang2 x 4)) #t) - (test (pair? (redex-match lang2 y 4)) #t) - (test (pair? (redex-match lang2 x 1)) #t) - (test (pair? (redex-match lang2 y 2)) #t)) - - ;; test multiple variable non-terminals in an extended language - (let () - (define-language lang - ((x y) 1 2 3)) - (define-extended-language lang2 lang - ((z w) 5 6 7)) - (test (pair? (redex-match lang2 z 5)) #t) - (test (pair? (redex-match lang2 w 6)) #t)) - - ;; test cases that ensure that extending any one of a - ;; multiply defined non-terminal gets extended properly - (let () - (define-language iswim - ((V U W) AA)) - - (define-extended-language iswim-cont - iswim - (W .... QQ)) - - (test (pair? (redex-match iswim-cont U (term QQ))) - #t)) - - (let () - (define-language iswim - ((V U W) AA)) - - (define-extended-language iswim-cont - iswim - (W .... QQ)) - - (test (pair? (redex-match iswim-cont V (term QQ))) - #t) - (test (pair? (redex-match iswim-cont U (term QQ))) - #t) - (test (pair? (redex-match iswim-cont W (term QQ))) - #t)) - - (let () - (define-language iswim - ((V U W) AA)) - - (define-extended-language iswim-cont - iswim - (V .... QQ)) - - (test (pair? (redex-match iswim-cont V (term QQ))) - #t) - (test (pair? (redex-match iswim-cont U (term QQ))) - #t) - (test (pair? (redex-match iswim-cont W (term QQ))) - #t)) - - (let () - (define-language okay - [(X Y) z]) - - (define-extended-language replace-both - okay - [(X Y) q]) - - ;; this test ran into an infinite loop in an earlier version of redex. - (test (redex-match replace-both X (term explode)) #f)) - - (test (with-handlers ([exn? exn-message]) - (let () - (define-language main - [(X Y) z]) - (define-extended-language new - main - [(X Y Z) q]) - (void))) - "extend-language: new language extends old non-terminal X and also adds new shortcut Z") - - (test (with-handlers ([exn? exn-message]) - (let () - (define-language main - [(X Y) z] - [(P Q) w]) - (define-extended-language new - main - [(X P) q]) - (void))) - "extend-language: new language does not have the same non-terminal aliases as the old, non-terminal P was not in the same group as X in the old language") - - ;; test caching - (let () - (define match? #t) - - (define-language lang - (x (side-condition any match?))) - - (test (pair? (redex-match lang x 1)) #t) - (set! match? #f) - (test (pair? (redex-match lang x 1)) #t) - (parameterize ([caching-enabled? #f]) - (test (pair? (redex-match lang x 1)) #f))) - - - (let () - (define sc-eval-count 0) - (define-language lang - (x (side-condition any (begin (set! sc-eval-count (+ sc-eval-count 1)) - #t)))) - - (redex-match lang x 1) - (redex-match lang x 1) - (parameterize ([caching-enabled? #f]) - (redex-match lang x 1)) - (test sc-eval-count 2)) - - (let () - (define rhs-eval-count 0) - (define-metafunction empty-language - [(f any) ,(begin (set! rhs-eval-count (+ rhs-eval-count 1)) - 1)]) - - (term (f 1)) - (term (f 1)) - (parameterize ([caching-enabled? #f]) - (term (f 1))) - (test rhs-eval-count 2)) - - (define-namespace-anchor here) - (define ns (namespace-anchor->namespace here)) - - (let ([src 'bad-underscore]) - (test - (parameterize ([current-namespace ns]) - (syntax-error-sources - '(define-language L (n m_1)) - src)) - (list src))) - -; -; -; ;;; ; -; ; ; ; -; ;;; ; ;;; ;;;;; ;;; ;;;;; ;; ;; ;; ;; ;;;; ;;;;; ;;; ;;; ;; ;; ;;;; -; ; ; ; ; ; ; ; ; ; ; ; ;; ; ; ; ; ; ; ; ;; ; ; ; -; ; ; ; ;;;;; ; ;;;; ; ; ; ; ; ; ; ; ; ; ; ; ;;; -; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; -; ;;;;;;; ;;;; ;;; ;;;;; ;;;;; ;; ;;;;; ;;; ;;; ;;; ;;;;; ;;; ;;; ;;; ;;;; -; -; -; -; - - - (define-metafunction grammar - [(f (side-condition (number_1 number_2) - (< (term number_1) - (term number_2)))) - x] - [(f (number 1)) y] - [(f (number_1 2)) ,(+ (term number_1) 2)] - [(f (4 4)) q] - [(f (4 4)) r]) - - (define-metafunction grammar - [(g X) x]) - - (test (term (f (1 17))) 'x) - (test (term (f (11 1))) 'y) - (test (term (f (11 2))) 13) - - - ;; match two clauess => take first one - (test (term (f (4 4))) 'q) - - ;; match one clause two ways => error - (let () - (define-metafunction empty-language - [(ll (number_1 ... number_2 ...)) (number_1 ...)]) - (test (with-handlers ((exn? (λ (x) 'exn-raised))) - (term (ll ())) - 'no-exn) - 'no-exn) - (test (with-handlers ((exn? (λ (x) 'exn-raised))) - (term (ll (4 4))) - 'no-exn) - 'exn-raised)) - - ;; match no ways => error - (test (with-handlers ((exn? (λ (x) 'exn-raised))) (term (f mis-match)) 'no-exn) - 'exn-raised) - - (define-metafunction grammar - [(h (M_1 M_2)) ((h M_2) (h M_1))] - [(h number_1) ,(+ (term number_1) 1)]) - - (test (term (h ((1 2) 3))) - (term (4 (3 2)))) - - (define-metafunction grammar - [(h2 (Q_1 ...)) ((h2 Q_1) ...)] - [(h2 variable) z]) - - (test (term (h2 ((x y) a b c))) - (term ((z z) z z z))) - - (let () - (define-metafunction empty-language - [(f (1)) 1] - [(f (2)) 2] - [(f 3) 3]) - (test (in-domain? (f 1)) #f) - (test (in-domain? (f (1))) #t) - (test (in-domain? (f ((1)))) #f) - (test (in-domain? (f 3)) #t) - (test (in-domain? (f 4)) #f)) - - (let () - (define-metafunction empty-language - f : number -> number - [(f 1) 1]) - (test (in-domain? (f 1)) #t) - (test (in-domain? (f 2)) #t) - (test (in-domain? (f x)) #f)) - - (let () - (define-metafunction empty-language - [(f x) x]) - (test - (term-let ((y 'x)) - (in-domain? (f y))) - #t) - (test - (term-let ((y 'z)) - (in-domain? (f y))) - #f)) - - ;; mutually recursive metafunctions - (define-metafunction grammar - [(odd zero) #f] - [(odd (add1 UN_1)) (even UN_1)]) - - (define-metafunction grammar - [(even zero) #t] - [(even (add1 UN_1)) (odd UN_1)]) - - (test (term (odd (add1 (add1 (add1 (add1 zero)))))) - (term #f)) - - (let () - (define-metafunction empty-language - [(pRe xxx) 1]) - - (define-metafunction empty-language - [(Merge-Exns any_1) any_1]) - - (test (term (pRe (Merge-Exns xxx))) - 1)) - - (let () - (define-metafunction empty-language - [(f (x)) ,(term-let ([var-should-be-lookedup 'y]) (term (f var-should-be-lookedup)))] - [(f y) y] - [(f var-should-be-lookedup) var-should-be-lookedup]) ;; taking this case is bad! - - (test (term (f (x))) (term y))) - - (let () - (define-metafunction empty-language - [(f (x)) (x ,@(term-let ([var-should-be-lookedup 'y]) (term (f var-should-be-lookedup))) x)] - [(f y) (y)] - [(f var-should-be-lookedup) (var-should-be-lookedup)]) ;; taking this case is bad! - - (test (term (f (x))) (term (x y x)))) - - (let () - (define-metafunction empty-language - [(f (any_1 any_2)) - case1 - (side-condition (not (equal? (term any_1) (term any_2)))) - (side-condition (not (equal? (term any_1) 'x)))] - [(f (any_1 any_2)) - case2 - (side-condition (not (equal? (term any_1) (term any_2))))] - [(f (any_1 any_2)) - case3]) - (test (term (f (q r))) (term case1)) - (test (term (f (x y))) (term case2)) - (test (term (f (x x))) (term case3))) - - (let () - (define-metafunction empty-language - [(f (n number)) (n number)] - [(f (a any)) (a any)] - [(f (v variable)) (v variable)] - [(f (s string)) (s string)]) - (test (term (f (n 1))) (term (n 1))) - (test (term (f (a (#f "x" whatever)))) (term (a (#f "x" whatever)))) - (test (term (f (v x))) (term (v x))) - (test (term (f (s "x"))) (term (s "x")))) - - ;; test ..._1 patterns - (let () - (define-metafunction empty-language - [(zip ((variable_id ..._1) (number_val ..._1))) - ((variable_id number_val) ...)]) - - (test (term (zip ((a b) (1 2)))) (term ((a 1) (b 2))))) - - (let () - (define-metafunction empty-language - [(f any_1 any_2 any_3) (any_3 any_2 any_1)]) - (test (term (f 1 2 3)) - (term (3 2 1)))) - - (let () - (define-metafunction empty-language - [(f (any_1 any_2 any_3)) 3]) - (define-metafunction/extension f empty-language - [(g (any_1 any_2)) 2]) - (define-metafunction/extension g empty-language - [(h (any_1)) 1]) - (test (term (h (1))) 1) - (test (term (h (1 2))) 2) - (test (term (h (1 2 3))) 3)) - - (let () - (define-metafunction empty-language - [(f any_1 any_2 any_3) 3]) - (define-metafunction/extension f empty-language - [(g any_1 any_2) 2]) - (define-metafunction/extension g empty-language - [(h any_1) 1]) - (test (term (h 1)) 1) - (test (term (h 1 2)) 2) - (test (term (h 1 2 3)) 3)) - - (let () - (define-metafunction empty-language - [(f number_1 number_2) (f number_1)]) - (define-metafunction/extension f empty-language - [(g number_1) number_1]) - (define-metafunction empty-language - [(h number_1 number_2) (h number_1)] - [(h number_1) number_1]) - (test (term (g 11 17)) 11) - (test (term (h 11 17)) 11)) - - (let () - (define-metafunction empty-language - [(f (number_1 number_2)) - number_3 - (where number_3 ,(+ (term number_1) (term number_2)))]) - (test (term (f (11 17))) 28)) - - (let () - (define-metafunction empty-language - [(f variable) - (any_x any_x) - (where any_x (variable variable))]) - (test (term (f z)) - (term ((z z) (z z))))) - - (let () - (define-metafunction empty-language - [(f number_1) - number_1 - (where number_2 ,(add1 (term number_1))) - (where number_3 ,(add1 (term number_2))) - (side-condition (and (number? (term number_3)) - (= (term number_3) 4)))] - [(f any) 0]) - (test (term (f 2)) 2)) - - (let () - (define-language x-lang - (x variable)) - (define-metafunction x-lang - f : x x -> x - [(f x_1 x_2) x_1]) - (test (term (f p q)) (term p)) - (test (in-domain? (f p q)) #t)) - - (let () - (define-metafunction empty-language - [(err number_1 ... number_2 ...) (number_1 ...)]) - (test (term (err)) (term ())) - (test (with-handlers ((exn:fail:redex? (λ (x) 'right-exn)) - ((λ (x) #t) (λ (x) 'wrong-exn))) - (term (err 1 2)) - 'no-exn) - 'right-exn)) - - (let () - (define-metafunction empty-language - err : number ... -> number - [(err number ...) 1]) - (test (with-handlers ((exn:fail:redex? (λ (x) 'right-exn)) - ((λ (x) #t) (λ (x) 'wrong-exn))) - (term (err #f #t)) - 'no-exn) - 'right-exn)) - - (let () - (define-metafunction empty-language - err : number ... -> number - [(err number ...) #f]) - (test (with-handlers ((exn:fail:redex? (λ (x) 'right-exn)) - ((λ (x) #t) (λ (x) 'wrong-exn))) - (term (err 1 2)) - 'no-exn) - 'right-exn)) - - (let () - (define-metafunction empty-language - err : number ... -> (number number) - [(err number ...) (number ...)]) - (test (with-handlers ((exn:fail:redex? (λ (x) 'right-exn)) - ((λ (x) #t) (λ (x) 'wrong-exn))) - (term (err 1 2)) - 'no-exn) - 'no-exn) - (test (with-handlers ((exn:fail:redex? (λ (x) 'right-exn)) - ((λ (x) #t) (λ (x) 'wrong-exn))) - (term (err 1 1)) - 'no-exn) - 'no-exn)) - - (let () - ;; test that 'where' clauses can contain recursive calls. - (define-metafunction empty-language - [(f (any)) - x - (where x (f any))] - [(f any) any]) - (test (term (f ((((x)))))) - (term x))) - - (let () - (define-language lamv - (z variable hole)) - - (define-metafunction lamv - foo : z -> any - [(foo hole) dontcare] - [(foo variable) docare]) - - (test (term (foo hole)) - (term dontcare)) - (test (term (foo y)) - (term docare))) - - (let () - (define f-called? #f) - (define-metafunction empty-language - f : (side-condition any_1 (begin (set! f-called? #t) #t)) -> any - [(f any_1) any_1]) - (test (term (f 1)) 1) - (test f-called? #t)) - - (let () - (define g-called? #f) - (define-metafunction empty-language - g : any -> (side-condition any_1 (begin (set! g-called? #t) #t)) - [(g any_1) any_1]) - (test (term (g 1)) 1) - (test g-called? #t)) - - ;; test that tracing works properly - ;; note that caching comes into play here (which is why we don't see the recursive calls) - (let () - (define-metafunction empty-language - [(f 0) 0] - [(f number) (f ,(- (term number) 1))]) - - (let ([sp (open-output-string)]) - (parameterize ([current-output-port sp]) - (term (f 1))) - (test (get-output-string sp) "")) - - (let ([sp (open-output-string)]) - (parameterize ([current-output-port sp] - [current-traced-metafunctions 'all]) - (term (f 1))) - (test (get-output-string sp) ">(f 1)\n<0\n")) - - (let ([sp (open-output-string)]) - (parameterize ([current-output-port sp] - [current-traced-metafunctions '(f)]) - (term (f 1))) - (test (get-output-string sp) ">(f 1)\n<0\n"))) - - (let () - (define-language var-lang [(x y z w) variable]) - - ;; this should produce the second case, - ;; since the where clause (should) fail to match - ;; in the first case. - (define-metafunction var-lang - [(f x) - first-case - (where (AnotherAtom y) (Atom x))] - [(f x) - second-case]) - - (test (term (f a)) (term second-case))) - - (let () - - ;; this is an ambiguous function - ;; and should signal an error if it is ever called - ;; with multiple different arguments, but if the - ;; arguments are all the same, it will return - ;; the same result for any parse, and thus should be allowed. - (define-metafunction empty-language - [(f any_x ... any_y any_z ...) - any_y]) - - (test (term (f 1 1 1 1 1)) (term 1))) - - (let () - (define-metafunction empty-language - [(ex variable_x) - variable_x - (where quote variable_x)]) - - (test (term (ex quote)) (term quote))) - - (let () - (define-metafunction empty-language - [(f any ...) - (any ...) - (where variable_1 x) - (side-condition #f) - (where (number ...) y)] - [(f any ...) - 12345]) - - (test (term (f 8)) 12345)) - - -; -; -; -; -; -; -; ;; ;;; ;; ;; ;; ;; -; ;; ;;; ;; ;; ;;; ;; -; ;;;;; ;;;; ;;;;; ;; ;; ;;; ;;;; ;;;; ;;;; ;; ;;;; ;;;;; ;; ;;;; ;; ;;; -; ;;;;;; ;; ;; ;;;; ;; ;;;;;; ;; ;; ;;;; ;; ;; ;; ;; ;; ;;;; ;; ;;;;;; ;;;;;; -; ;;; ;; ;;;;;;;; ;; ;; ;; ;; ;;;;;;;;;;;; ;; ;;;;;;;; ;; ;;;; ;;; ;; ;;; ;;; ;; ;; -; ;;; ;; ;;; ;; ;; ;; ;; ;;; ;;;; ;; ;;; ;; ;;; ;; ;;; ;; ;;; ;;; ;; ;; -; ;;;;;; ;;; ;; ;; ;; ;; ;; ;;; ;; ;; ;;; ;; ;; ;;; ;; ;;;; ;; ;;;;;; ;; ;; -; ;;;;; ;;;; ;; ;; ;; ;; ;;;; ;; ;;;; ;; ;;;;;; ;;; ;; ;;;; ;; ;; -; -; -; - - - (let () - (define-relation empty-language - [(<: any any) #t]) - - (test (term (<: 1 1)) #t) - (test (term (<: 1 2)) #f)) - - (let () - (define-relation empty-language - [(<: number_1 number_2) ,(< (term number_1) (term number_2))] - [(<: number_1 number_1) #t]) - - (test (term (<: 1 2)) #t) - (test (term (<: 1 1)) #t) - (test (term (<: 2 1)) #f)) - - (let () - (define-relation empty-language - [(<: number_1 ... number_2 number_3 ... number_2 number_4 ...) #t]) - - (test (term (<: 1 2 3 4)) #f) - (test (term (<: 1 1 2 3 4)) #t) - (test (term (<: 1 2 1 3 4)) #t) - (test (term (<: 1 2 3 1 4)) #t) - (test (term (<: 1 2 3 4 1)) #t)) - - (let () - (define-relation empty-language - [(<: number_1 number_1)]) - (test (term (<: 1 1)) #t) - (test (term (<: 1 2)) #f)) - - (let () - (define-relation empty-language - [(<: number_1 number_2 number_3) - ,(= (term number_1) (term number_2)) - ,(= (term number_2) (term number_3))]) - (test (term (<: 1 2 3)) #f) - (test (term (<: 1 1 2)) #f) - (test (term (<: 1 2 2)) #f) - (test (term (<: 1 1 1)) #t)) - - -; ;; ; ;; ; -; ; ; ; ; -; ;; ;; ;;; ;; ; ;; ;; ;;;; ;;;;; ;;; ;;; ;; ;; ;; ;; ;;; ; ;;; ;;;;; ;;; ;;; ;; ;; -; ;; ; ; ; ;; ; ; ; ; ; ; ; ; ;; ; ;; ; ; ; ; ; ; ; ; ; ;; ; -; ; ;;;;; ; ; ; ; ; ; ; ; ; ; ; ;;;;; ; ;;;;; ; ;;;; ; ; ; ; ; ; -; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; -; ; ; ; ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; -; ;;;;; ;;;; ;;;;; ;; ;; ;;; ;;; ;;;;; ;;; ;;; ;;; ;;;;; ;;;; ;;;;; ;;;;; ;;; ;;;;; ;;; ;;; ;;; -; -; -; -; - - - - (test (apply-reduction-relation - (reduction-relation - grammar - (--> (in-hole E_1 (number_1 number_2)) - (in-hole E_1 ,(* (term number_1) (term number_2))))) - '((2 3) (4 5))) - (list '(6 (4 5)))) - - (test (apply-reduction-relation - (reduction-relation - grammar - (~~> (number_1 number_2) - ,(* (term number_1) (term number_2))) - with - [(--> (in-hole E_1 a) (in-hole E_1 b)) (~~> a b)]) - '((2 3) (4 5))) - (list '(6 (4 5)))) - - (test (apply-reduction-relation - (reduction-relation - grammar - (==> (number_1 number_2) - ,(* (term number_1) (term number_2))) - with - [(--> (M_1 a) (M_1 b)) (~~> a b)] - [(~~> (M_1 a) (M_1 b)) (==> a b)]) - '((1 2) ((2 3) (4 5)))) - (list '((1 2) ((2 3) 20)))) - - (test (apply-reduction-relation - (reduction-relation - grammar - (~~> (number_1 number_2) - ,(* (term number_1) (term number_2))) - (==> (number_1 number_2) - ,(* (term number_1) (term number_2))) - with - [(--> (M_1 a) (M_1 b)) (~~> a b)] - [(--> (a M_1) (b M_1)) (==> a b)]) - '((2 3) (4 5))) - (list '(6 (4 5)) - '((2 3) 20))) - - (test (apply-reduction-relation - (reduction-relation - grammar - (--> (M_1 (number_1 number_2)) - (M_1 ,(* (term number_1) (term number_2)))) - (==> (number_1 number_2) - ,(* (term number_1) (term number_2))) - with - [(--> (a M_1) (b M_1)) (==> a b)]) - '((2 3) (4 5))) - (list '((2 3) 20) - '(6 (4 5)))) - - ; shortcuts like this fail if compilation fails to preserve - ; lexical context for side-conditions expressions. - (test (let ([x #t]) - (apply-reduction-relation - (reduction-relation - grammar - (==> variable variable) - with - [(--> (a (side-condition number x)) b) - (==> a b)]) - '(x 4))) - '(x)) - - (test (apply-reduction-relation/tag-with-names - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mul)) - '(4 5)) - (list (list "mul" 20))) - - (test (apply-reduction-relation/tag-with-names - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - "mul")) - '(4 5)) - (list (list "mul" 20))) - - (test (apply-reduction-relation/tag-with-names - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)))) - '(4 5)) - (list (list #f 20))) - - (test (apply-reduction-relation/tag-with-names - (reduction-relation - grammar - (==> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult) - with - [(--> (M_1 a) (M_1 b)) (==> a b)]) - '((2 3) (4 5))) - (list (list "mult" '((2 3) 20)))) - - (test (apply-reduction-relation - (union-reduction-relations - (reduction-relation empty-language - (--> x a) - (--> x b)) - (reduction-relation empty-language - (--> x c) - (--> x d))) - 'x) - (list 'a 'b 'c 'd)) - - (test (apply-reduction-relation - (union-reduction-relations - (reduction-relation empty-language (--> x a)) - (reduction-relation empty-language (--> x b)) - (reduction-relation empty-language (--> x c)) - (reduction-relation empty-language (--> x d))) - 'x) - (list 'a 'b 'c 'd)) - - (test (apply-reduction-relation - (reduction-relation - empty-language - (--> (number_1 number_2) - number_2 - (side-condition (< (term number_1) (term number_2)))) - (--> (number_1 number_2) - number_1 - (side-condition (< (term number_2) (term number_1))))) - '(1 2)) - (list 2)) - - (test (apply-reduction-relation - (reduction-relation - empty-language - (--> x #f)) - (term x)) - (list #f)) - - (define-language x-language - (x variable)) - - (test (apply-reduction-relation - (reduction-relation - x-language - (--> x (x x))) - 'y) - (list '(y y))) - - (test (apply-reduction-relation - (reduction-relation - x-language - (--> (x ...) ((x ...)))) - '(p q r)) - (list '((p q r)))) - - #; - (test (apply-reduction-relation - (reduction-relation - empty-language - #:main-arrow :-> - (:-> 1 2)) - 1) - '(2)) - - (test (apply-reduction-relation - (reduction-relation - empty-language - #:domain number - (--> 1 2)) - 1) - '(2)) - - - (test (let ([red - (reduction-relation - empty-language - #:domain number - (--> 1 2))]) - (with-handlers ((exn? exn-message)) - (apply-reduction-relation red 'x) - 'no-exception-raised)) - "reduction-relation: relation not defined for x") - - (test (let ([red - (reduction-relation - empty-language - #:domain number - (--> 1 x))]) - (with-handlers ((exn? exn-message)) - (apply-reduction-relation red 1) - 'no-exception-raised)) - "reduction-relation: relation reduced to x via rule #0 (counting from 0), which is outside its domain") - - (let* ([red1 - (reduction-relation - empty-language - #:domain (side-condition number_1 (even? (term number_1))) - (--> number number))] - [red2 - (reduction-relation - empty-language - #:domain (side-condition number_1 (odd? (term number_1))) - (--> number number))] - [red-c - (union-reduction-relations red1 red2)]) - - ;; ensure first branch of 'union' is checked - (test (with-handlers ((exn? exn-message)) - (apply-reduction-relation red-c 1) - 'no-exception-raised) - "reduction-relation: relation not defined for 1") - - ;; ensure second branch of 'union' is checked - (test (with-handlers ((exn? exn-message)) - (apply-reduction-relation red-c 2) - 'no-exception-raised) - "reduction-relation: relation not defined for 2")) - - (let () - (define-language l1 - (D 0 1 2)) - (define r1 - (reduction-relation - l1 - #:domain D - (--> D D))) - (define-language l2 - (D 0 1 2 3)) - (define r2 - (extend-reduction-relation r1 l2)) - - ;; test that the domain is re-interpreted for the extended reduction-relation - (test (apply-reduction-relation r2 3) - '(3))) - - (let () - (define-language l1 - (D 0 1 2)) - (define r1 - (reduction-relation - l1 - #:domain (D D) - (--> (D_1 D_2) (D_2 D_1)))) - - ;; test that duplicated identifiers in the domain contract do not have to be equal - (test (apply-reduction-relation r1 (term (1 2))) - (list (term (2 1))))) - - ;;test that #:arrow keyword works - (test (apply-reduction-relation - (reduction-relation - empty-language - #:arrow :-> - (:-> 1 2)) - 1) - '(2)) - - (let () - (define-language n-lang - [n number]) - (test (apply-reduction-relation - (reduction-relation n-lang [--> any ,(length (redex-match n-lang n 1))]) - 11) - '(1))) - - (parameterize ([current-namespace syn-err-test-namespace]) - (eval (quote-syntax - (define-language grammar - (M (M M) - number) - (E hole - (E M) - (number E)) - (X (number any) - (any number)) - (Q (Q ...) - variable) - (UN (add1 UN) - zero))))) - - (test-syn-err (reduction-relation - grammar - (~~> (number_1 number_2) - ,(* (term number_1) (term number_2))) - with - [(--> (M a) (M b)) (~~> a b)] - [(~~> (M a) (M b)) (==> a b)]) - #rx"no rules") - - (test-syn-err (reduction-relation grammar) - #rx"no rules use -->") - - (test-syn-err (reduction-relation - grammar - (~~> (number_1 number_2) - ,(* (term number_1) (term number_2)))) - #rx"~~> relation is not defined") - - (test-syn-err (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult) - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult)) - #rx"same name on multiple rules") - - (test-syn-err (reduction-relation - grammar - (--> 1 2) - (==> 3 4)) - #rx"not defined.*==>") - - (test-syn-err (reduction-relation - empty-language - (--> 1 2) - (==> 3 4) - with - [(~> a b) (==> a b)]) - #rx"not defined.*~>") - - (test-syn-err (define-language bad-lang1 (e name)) #rx"name") - (test-syn-err (define-language bad-lang2 (name x)) #rx"name") - (test-syn-err (define-language bad-lang3 (x_y x)) #rx"x_y") - (test-syn-err (define-language bad-lang4 (a 1 2) (b)) #rx"no productions") - (test-syn-err (let () - (define-language good-lang (a 1 2)) - (define-extended-language bad-lang5 good-lang (a) (b 2))) - #rx"no productions") - - ;; expect union with duplicate names to fail - (test (with-handlers ((exn? (λ (x) 'passed))) - (union-reduction-relations - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult)) - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult))) - 'failed) - 'passed) - - (test (with-handlers ((exn? (λ (x) 'passed))) - (union-reduction-relations - (union-reduction-relations - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult)) - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult3))) - - (union-reduction-relations - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult)) - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult2)))) - 'passed) - 'passed) - - ;; sorting in this test case is so that the results come out in a predictable manner. - (test (sort - (apply-reduction-relation - (compatible-closure - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult)) - grammar - M) - '((2 3) (4 5))) - (λ (x y) (string<=? (format "~s" x) (format "~s" y)))) - (list '((2 3) 20) - '(6 (4 5)))) - - (test (apply-reduction-relation - (compatible-closure - (reduction-relation - grammar - (--> (number_1 number_2) - ,(* (term number_1) (term number_2)) - mult)) - grammar - M) - '(4 2)) - (list '8)) - - (test (apply-reduction-relation - (context-closure - (context-closure - (reduction-relation grammar (--> 1 2)) - grammar - (y hole)) - grammar - (x hole)) - '(x (y 1))) - (list '(x (y 2)))) - - (test (apply-reduction-relation - (reduction-relation - grammar - (--> (variable_1 variable_2) - (variable_1 variable_2 x) - mul - (fresh x))) - '(x x1)) - (list '(x x1 x2))) - - (test (apply-reduction-relation - (reduction-relation - grammar - (~~> number - x - (fresh x)) - with - [(--> (variable_1 variable_2 a) (variable_1 variable_2 b)) (~~> a b)]) - '(x x1 2)) - (list '(x x1 x2))) - - (test (apply-reduction-relation - (reduction-relation - x-language - (--> (x_1 ...) - (x ...) - (fresh ((x ...) (x_1 ...))))) - '(x y x1)) - (list '(x2 x3 x4))) - - (test (apply-reduction-relation - (reduction-relation - empty-language - (--> (variable_1 ...) - (x ... variable_1 ...) - (fresh ((x ...) (variable_1 ...) (variable_1 ...))))) - '(x y z)) - (list '(x1 y1 z1 x y z))) - - (test (apply-reduction-relation - (reduction-relation - empty-language - (--> any (any_y x) - (where any_y x) - (fresh x))) - (term junk)) - (list '(x x1))) - - (test (apply-reduction-relation - (reduction-relation - empty-language - (--> (variable ...) (variable_0 ... variable_1 ...) - (fresh ((variable_0 ...) (variable ...))) - (fresh ((variable_1 ...) (variable ...))))) - (term (x y))) - (list '(variable_0 variable_1 variable_2 variable_3))) - - - ;; test that redex match can be used in a side-condition - ;; with the same language that is used to define the - ;; reduction relation. - (test (apply-reduction-relation - (reduction-relation - empty-language - (--> any_1 3 - (side-condition (redex-match empty-language (any_1 any_2) (term any_1))))) - '(a b)) - '(3)) - - (test (apply-reduction-relation - (reduction-relation - empty-language - (--> variable_1 - (x variable_1) - (fresh (x variable_1)))) - 'q) - (list '(q1 q))) - - (test (apply-reduction-relation - (extend-reduction-relation (reduction-relation empty-language (--> 1 2)) - empty-language - (--> 1 3)) - 1) - '(3 2)) - - (let () - (define-language e1 - (e 1)) - (define-language e2 - (e 2)) - (define red1 (reduction-relation e1 (--> e (e e)))) - (define red2 (extend-reduction-relation red1 e2 (--> ignoreme ignoreme))) - (test (apply-reduction-relation red1 1) '((1 1))) - (test (apply-reduction-relation red1 2) '()) - (test (apply-reduction-relation red2 1) '()) - (test (apply-reduction-relation red2 2) '((2 2)))) - - (let () - (define red1 (reduction-relation empty-language - (--> a (a a) - a) - (--> b (b b) - b) - (--> q x))) - (define red2 (extend-reduction-relation red1 - empty-language - (--> a (c c) - a) - (--> q z))) - (test (apply-reduction-relation red1 (term a)) (list (term (a a)))) - (test (apply-reduction-relation red1 (term b)) (list (term (b b)))) - (test (apply-reduction-relation red1 (term q)) (list (term x))) - (test (apply-reduction-relation red2 (term a)) (list (term (c c)))) - (test (apply-reduction-relation red2 (term b)) (list (term (b b)))) - (test (apply-reduction-relation red2 (term q)) (list (term z) (term x)))) - - (let () - (define red1 - (reduction-relation - empty-language - (==> a (a a) - a) - (==> b (b b) - b) - (==> q w) - with - [(--> (X a) (X b)) (==> a b)])) - - (define red2 - (extend-reduction-relation - red1 - empty-language - (==> a (c c) - a) - (==> q z) - with - [(--> (X a) (X b)) (==> a b)])) - - (test (apply-reduction-relation red1 (term (X a))) (list (term (X (a a))))) - (test (apply-reduction-relation red1 (term (X b))) (list (term (X (b b))))) - (test (apply-reduction-relation red1 (term (X q))) (list (term (X w)))) - (test (apply-reduction-relation red2 (term (X a))) (list (term (X (c c))))) - (test (apply-reduction-relation red2 (term (X b))) (list (term (X (b b))))) - (test (apply-reduction-relation red2 (term (X q))) (list (term (X z)) - (term (X w))))) - - (test (reduction-relation->rule-names - (reduction-relation - empty-language - (--> x y a))) - '(a)) - - (test (reduction-relation->rule-names - (reduction-relation - empty-language - (--> x y a) - (--> y z b) - (--> z w c))) - '(a b c)) - - (test (reduction-relation->rule-names - (reduction-relation - empty-language - (--> x y a) - (--> y z b) - (--> z w c) - (--> p q z) - (--> q r y) - (--> r p x))) - '(a b c z y x)) - - (test (reduction-relation->rule-names - (extend-reduction-relation - (reduction-relation - empty-language - (--> x y a) - (--> y z b) - (--> z w c)) - empty-language - (--> p q z) - (--> q r y) - (--> r p x))) - '(a b c z y x)) - - (test (reduction-relation->rule-names - (union-reduction-relations - (reduction-relation - empty-language - (--> x y a) - (--> y z b) - (--> z w c)) - (reduction-relation - empty-language - (--> p q z) - (--> q r y) - (--> r p x)))) - '(a b c z y x)) - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;; - ;; examples from doc.txt - ;; - - (define-language lc-lang - (e (e e ...) - x - v) - (c (v ... c e ...) - hole) - (v (lambda (x ...) e)) - (x variable-not-otherwise-mentioned)) - - (test (let ([m (redex-match lc-lang e (term (lambda (x) x)))]) - (and m (length m))) - 1) - - (define-extended-language qabc-lang lc-lang (q a b c)) - - (test (redex-match qabc-lang - e - (term (lambda (a) a))) - #f) - - (test (let ([m (redex-match qabc-lang - e - (term (lambda (z) z)))]) - (and m (length m))) - 1) - - (require (lib "list.ss")) - (let () - (define-metafunction lc-lang - free-vars : e -> (x ...) - [(free-vars (e_1 e_2 ...)) - (∪ (free-vars e_1) (free-vars e_2) ...)] - [(free-vars x) (x)] - [(free-vars (lambda (x ...) e)) - (- (free-vars e) (x ...))]) - - (define-metafunction lc-lang - ∪ : (x ...) ... -> (x ...) - [(∪ (x_1 ...) (x_2 ...) (x_3 ...) ...) - (∪ (x_1 ... x_2 ...) (x_3 ...) ...)] - [(∪ (x_1 ...)) - (x_1 ...)] - [(∪) ()]) - - (define-metafunction lc-lang - - : (x ...) (x ...) -> (x ...) - [(- (x ...) ()) (x ...)] - [(- (x_1 ... x_2 x_3 ...) (x_2 x_4 ...)) - (- (x_1 ... x_3 ...) (x_2 x_4 ...)) - (side-condition (not (memq (term x_2) (term (x_3 ...)))))] - [(- (x_1 ...) (x_2 x_3 ...)) - (- (x_1 ...) (x_3 ...))]) - - (test (term (∪)) (term ())) - (test (term (∪ (x y) (z a) (b c))) (term (x y z a b c))) - - (test (term (- (x y) ())) (term (x y))) - (test (term (- (x y) (x))) (term (y))) - (test (term (- (y x) (x))) (term (y))) - (test (term (- (x x x x x) (x))) (term ())) - - (test (term (free-vars (lambda (x) (x y)))) (list 'y)) - (test (term (free-vars (a (b (c (d e)))))) (term (a b c d e)))) - - (test (variable-not-in (term (x y z)) 'x) - (term x1)) - - (test (variable-not-in (term (y z)) 'x) - (term x)) - (test (variable-not-in (term (x x1 x2 x3 x4 x5 x6 x7 x8 x9 x10)) 'x) - (term x11)) - (test (variable-not-in (term (x x11)) 'x) - (term x1)) - (test (variable-not-in (term (x x1 x2 x3)) 'x1) - (term x4)) - (test (variable-not-in (term (x x1 x1 x2 x2)) 'x) - (term x3)) - - (test (variables-not-in (term (x y z)) '(x)) - '(x1)) - (test (variables-not-in (term (x2 y z)) '(x x x)) - '(x x1 x3)) - - (test ((term-match/single empty-language - [(variable_x variable_y) - (cons (term variable_x) - (term variable_y))]) - '(x y)) - '(x . y)) - - (test ((term-match/single empty-language - [(side-condition (variable_x variable_y) - (eq? (term variable_x) 'x)) - (cons (term variable_x) - (term variable_y))]) - '(x y)) - '(x . y)) - - - (test (with-handlers ((exn:fail:redex? (λ (x) 'right-exn)) - ((λ (x) #t) (λ (x) 'wrong-exn))) - ((term-match/single empty-language - [(number_1 ... number_2 ...) 1]) - '(1 2 3)) - 'no-exn) - 'right-exn) - - (test (with-handlers ((exn:fail:redex? (λ (x) 'right-exn)) - ((λ (x) #t) (λ (x) 'wrong-exn))) - ((term-match/single empty-language - [(number_1 ... number_2 ...) 1]) - 'x) - 'no-exn) - 'right-exn) - - (test ((term-match empty-language - [(number_1 ... number_2 ...) 1]) - 'x) - '()) - - (define-language x-is-1-language - [x 1]) - - (test ((term-match/single x-is-1-language - [(x x) - 1]) - '(1 1)) - 1) - - (test (call-with-values - (λ () - ((term-match/single empty-language - [() (values 1 2)]) - '())) - list) - '(1 2)) - - (test (let ([x 0]) - (cons ((term-match empty-language - [(any_a ... number_1 any_b ...) - (begin (set! x (+ x 1)) - (term number_1))]) - '(1 2 3)) - x)) - '((3 2 1) . 3)) - - (test ((term-match empty-language - [number_1 - (term number_1)] - [number_1 - (term number_1)]) - '1) - '(1 1)) - - (test (apply-reduction-relation - (reduction-relation - x-language - (--> (x_one x_!_one x_!_one x_!_one) - (x_one x_!_one))) - (term (a a b c))) - (list (term (a x_!_one)))) - - ;; tests `where' clauses in reduction relation - (test (apply-reduction-relation - (reduction-relation empty-language - (--> number_1 - any_y - (where any_y ,(+ 1 (term number_1))))) - 3) - '(4)) - - ;; tests `where' clauses scoping - (test (let ([x 5]) - (apply-reduction-relation - (reduction-relation empty-language - (--> any - any_z - (where any_y ,x) - (where any_x 2) - (where any_z ,(+ (term any_y) (term any_x))))) - 'whatever)) - '(7)) - - ;; tests `where' clauses bind in side-conditions - (test (let ([x 'unk]) - (apply-reduction-relation - (reduction-relation empty-language - (--> any - the-result - (where any_y any) - (side-condition (eq? (term any_y) 'whatever)))) - 'whatever)) - '(the-result)) - - ;; test that where clauses bind in side-conditions that follow - (let ([save1 #f] - [save2 #f]) - (term-let ([any_y (term outer-y)]) - (test (begin (apply-reduction-relation - (reduction-relation empty-language - (--> number_1 - any_y - (side-condition (set! save1 (term any_y))) - (where any_y inner-y) - (side-condition (set! save2 (term any_y))))) - 3) - (list save1 save2)) - (list 'outer-y 'inner-y)))) - - (test (apply-reduction-relation - (reduction-relation empty-language - (--> any - any_y - (fresh x) - (where any_y x))) - 'x) - '(x1)) - - (let () - ;; tests where's ability to have redex patterns, not just syntax-case patterns - (define-language var-lang [(x y z w) variable]) - - (define red - (reduction-relation - var-lang - (--> (x ...) - (y ... z ...) - (where (y ... w z ...) (x ...))))) - - (test (apply-reduction-relation red (term (a b c))) - (list (term (a b)) (term (a c)) (term (b c))))) - - - (let ([r (reduction-relation - grammar - (->1 1 2) - (->2 3 4) - (->4 5 6) - with - [(--> (side-condition (a number) (even? (term number))) b) - (->1 a b)] - [(--> (X - (number number) - (X_1 X_1) - (M_!_1 M_!_1) - (1 ..._1 1 ..._1) - (1 ..._!_1 1 ..._!_1)) - b) - (->2 X b)] - [(--> (a 1) b) - (->3 a b)] - [(->3 (a 2) b) - (->4 a b)])]) - - ; test that names are properly bound for side-conditions in shortcuts - (let* ([lhs ((rewrite-proc-lhs (first (reduction-relation-make-procs r))) grammar)] - [proc (third lhs)] - [name (cadadr lhs)] - [bind (λ (n) (make-bindings (list (make-bind name n))))]) - (test (and (proc (bind 4)) (not (proc (bind 3)))) #t)) - - ; test binder renaming - (let ([sym-mtch? (λ (rx) (λ (s) (and (symbol? s) (regexp-match? rx (symbol->string s)))))]) - (match (rewrite-proc-lhs (second (reduction-relation-make-procs r))) - [`(3 - (,(and n1 (? (sym-mtch? #px"^number_\\d+$"))) ,n1) - (,(and n2 (? (sym-mtch? #px"^X_1\\d+$"))) ,n2) - (,(and m1 (? (sym-mtch? #px"^M_!_1\\d+$"))) ,m1) - (1 ,(and ...1 (? (sym-mtch? #px"^\\.\\.\\._1\\d+$"))) 1 ,...1) - (1 ,(and ...!1 (? (sym-mtch? #px"^\\.\\.\\._!_1\\d+$"))) 1 ,...!1)) - #t] - [else #f])) - - ; test shortcut in terms of shortcut - (test (match ((rewrite-proc-lhs (third (reduction-relation-make-procs r))) grammar) - [`(((side-condition 5 ,(? procedure?) ,_) 2) 1) #t] - [else #f]) - #t)) - - (let ([< (λ (c d) (string number (q ,(add1 (term number))) - (side-condition (odd? (term number))) - side-condition) - (--> 1 4 plain) - (==> 2 t - shortcut) - with - [(--> (q a) b) - (==> a b)])] - [c (make-coverage R)]) - (parameterize ([relation-coverage (list c)]) - (apply-reduction-relation R 4) - (test (sort (covered-cases c) <) - '(("plain" . 0) ("shortcut" . 0) ("side-condition" . 0))) - - (apply-reduction-relation R 3) - (test (sort (covered-cases c) <) - '(("plain" . 0) ("shortcut" . 0) ("side-condition" . 1))) - - (apply-reduction-relation* R 1) - (test (sort (covered-cases c) <) - '(("plain" . 1) ("shortcut" . 1) ("side-condition" . 2))))) - - (let* ([S (reduction-relation - empty-language - (--> 1 1 uno))] - [S+ (extend-reduction-relation - S empty-language - (--> 2 2 dos))]) - (let ([c (make-coverage S+)]) - (parameterize ([relation-coverage (list c)]) - (apply-reduction-relation S (term 1)) - (test (sort (covered-cases c) <) - '(("dos" . 0) ("uno" . 1))))) - (let ([c (make-coverage S)]) - (parameterize ([relation-coverage (list c)]) - (apply-reduction-relation S+ (term 1)) - (test (sort (covered-cases c) <) - '(("uno" . 1)))))) - - (let* ([T (reduction-relation empty-language (--> any any))] - [c (make-coverage T)]) - (parameterize ([relation-coverage (list c)]) - (apply-reduction-relation T (term q)) - (test (and (regexp-match #px"tl-test.ss:\\d+:\\d+" (caar (covered-cases c))) #t) - #t)))) - - (let* ([R (reduction-relation - empty-language - (--> any any id))] - [c (make-coverage R)] - [c* (make-coverage R)]) - (parameterize ([relation-coverage (list c c*)]) - (apply-reduction-relation R 4) - (test (covered-cases c) '(("id" . 1))) - (test (covered-cases c*) '(("id" . 1))))) - - (let* ([< (λ (c d) - (let ([line-no (compose - string->number - second - (curry regexp-match #px".*:(\\d+):\\d+"))]) - (< (line-no (car c)) (line-no (car d)))))] - [src-ok? (curry regexp-match? #px"tl-test.ss:\\d+:\\d+")] - [sorted-counts (λ (cc) (map cdr (sort (covered-cases cc) <)))]) - (define-metafunction empty-language - [(f 1) 1] - [(f 2) 2]) - (define-metafunction/extension f empty-language - [(g 3) 3]) - (define-relation empty-language - [(R number) - ,(even? (term number))] - [(R number) - ,(= 3 (term number))]) - - (let ([fc (make-coverage f)] - [rc (make-coverage (reduction-relation empty-language (--> any any)))]) - (parameterize ([relation-coverage (list rc fc)]) - (term (f 2)) - (test (andmap (compose src-ok? car) (covered-cases fc)) - #t) - (test (sorted-counts fc) '(0 1)) - - (term (f 1)) - (term (f 1)) - (test (sorted-counts fc) '(2 1)))) - - (let ([c (make-coverage f)]) - (parameterize ([relation-coverage (list c)]) - (term (g 1)) - (test (sorted-counts c) '(1 0)))) - (let ([c (make-coverage g)]) - (parameterize ([relation-coverage (list c)]) - (term (f 1)) - (test (sorted-counts c) '(1 0 0)))) - - (let ([c (make-coverage R)]) - (parameterize ([relation-coverage (list c)]) - (term (R 2)) - (term (R 3)) - (term (R 5)) - (test (sorted-counts c) '(1 1)))) - - (let ([c (make-coverage f)] - [c* (make-coverage f)]) - (parameterize ([relation-coverage (list c* c)]) - (term (f 1)) - (test (sorted-counts c) '(1 0)) - (test (sorted-counts c*) '(1 0))))) - -; -; -; -; -; ;;; -; ;; ;; ; ;; ;; -; ;; ;; ; ;; ;; -; ;;;;; ;;; ;;; ;;;;; ;; ;;; ;;;; ;;;; -; ;; ;; ;; ;; ; ;; ;;;;;;;; ;; ;;; ;; ; ;; ;; -; ;; ;;;;; ;;; ;; ;;; ;; ; ;; ;; ;; ;; -; ;; ;; ;; ;; ;;; ;; ;;;; ;; ;; ;; -; ;; ;; ; ; ;; ;; ;; ;; ;; ;; ; ;; ;; -; ;;;; ;;; ;;; ;;;; ; ;;;;; ;; ;;;; ;;;; -; -; -; - - - (define-syntax-rule - (capture-output arg1 args ...) - (let ([p (open-output-string)]) - (parameterize ([current-output-port p] - [current-error-port p]) - arg1 args ...) - (get-output-string p))) - - (let () - (define red (reduction-relation empty-language (--> 1 2))) - (test (capture-output (test-->> red 1 2) (test-results)) - "One test passed.\n") - (test (capture-output (test-->> red 2 3) (test-results)) - #rx"FAILED tl-test.ss:[0-9.]+\nexpected: 3\n actual: 2\n1 test failed \\(out of 1 total\\).\n")) - - (let () - (define red-share (reduction-relation - empty-language - (--> a b) - (--> a c) - (--> c d) - (--> b d))) - (test (capture-output (test-->> red-share (term a) (term d)) (test-results)) - "One test passed.\n")) - - (let () - (define red-cycle (reduction-relation - empty-language - (--> a a))) - (test (capture-output (test-->> red-cycle #:cycles-ok (term a)) (test-results)) - "One test passed.\n") - (test (capture-output (test-->> red-cycle (term a)) (test-results)) - #rx"FAILED tl-test.ss:[0-9.]+\nfound a cycle in the reduction graph\n1 test failed \\(out of 1 total\\).\n")) - - (let () - (define-metafunction empty-language [(f any) ((any))]) - (test (capture-output (test-equal (term (f 1)) (term ((1)))) - (test-results)) - "One test passed.\n")) - - (let () - (test (capture-output (test-predicate odd? 1) - (test-results)) - "One test passed.\n")) - - (let () - (define red (reduction-relation empty-language (--> any (any)))) - (test (capture-output (test--> red (term (1 2 3)) (term ((1 2 3)))) (test-results)) - "One test passed.\n")) - - (let () - (define red (reduction-relation empty-language - (--> any (any)) - (--> (any) any))) - (test (capture-output (test--> red (term (x)) (term ((x))) (term x)) (test-results)) - "One test passed.\n") - (test (capture-output (test--> red (term (x)) (term x) (term ((x)))) (test-results)) - "One test passed.\n")) - - (print-tests-passed 'tl-test.ss))