From b1606a5efcba32abe722759dbfca02586ff2179a Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sun, 28 Jun 2020 21:32:43 -0400 Subject: The "for" macro can now work directly with definitions. No text literals necessary. --- stdlib/source/test/lux.lux | 8 +- stdlib/source/test/lux/extension.lux | 90 ++-- stdlib/source/test/lux/target/jvm.lux | 806 +++++++++++++++++----------------- 3 files changed, 462 insertions(+), 442 deletions(-) (limited to 'stdlib/source/test') diff --git a/stdlib/source/test/lux.lux b/stdlib/source/test/lux.lux index 14360da93..e2d9fb258 100644 --- a/stdlib/source/test/lux.lux +++ b/stdlib/source/test/lux.lux @@ -315,10 +315,10 @@ on-default))) (_.test "Can pick code depending on the host/platform being targeted." (n.= on-valid-host - (`` (for {(~~ (static @.old)) on-valid-host - (~~ (static @.jvm)) on-valid-host - (~~ (static @.js)) on-valid-host} - on-default))))))) + (for {@.old on-valid-host + @.jvm on-valid-host + @.js on-valid-host} + on-default)))))) (def: test (<| (_.context (name.module (name-of /._))) diff --git a/stdlib/source/test/lux/extension.lux b/stdlib/source/test/lux/extension.lux index 702ea2272..da6f89187 100644 --- a/stdlib/source/test/lux/extension.lux +++ b/stdlib/source/test/lux/extension.lux @@ -36,53 +36,53 @@ (def: my-directive "my directive") ## Generation -(`` (for {(~~ (static @.old)) - (as-is)} - - (as-is (analysis: (..my-generation self phase archive {parameters (<>.some .any)}) - (do phase.monad - [_ (type.infer .Text)] - (wrap (#analysis.Extension self (list))))) +(for {@.old + (as-is)} + + (as-is (analysis: (..my-generation self phase archive {parameters (<>.some .any)}) + (do phase.monad + [_ (type.infer .Text)] + (wrap (#analysis.Extension self (list))))) - (synthesis: (..my-generation self phase archive {parameters (<>.some .any)}) - (do phase.monad - [] - (wrap (#synthesis.Extension self (list))))) - ))) + (synthesis: (..my-generation self phase archive {parameters (<>.some .any)}) + (do phase.monad + [] + (wrap (#synthesis.Extension self (list))))) + )) -(`` (for {(~~ (static @.jvm)) - (as-is (generation: (..my-generation self phase archive {parameters (<>.some .any)}) - (do phase.monad - [] - (wrap (row.row (#jvm.Constant (#jvm.LDC (#jvm.String self))))))))})) +(for {@.jvm + (as-is (generation: (..my-generation self phase archive {parameters (<>.some .any)}) + (do phase.monad + [] + (wrap (row.row (#jvm.Constant (#jvm.LDC (#jvm.String self))))))))}) -(`` (for {(~~ (static @.old)) - (as-is)} - - (as-is (analysis: (..my-analysis self phase archive {parameters (<>.some .any)}) - (do phase.monad - [_ (type.infer .Text)] - (wrap (#analysis.Primitive (#analysis.Text self))))) +(for {@.old + (as-is)} + + (as-is (analysis: (..my-analysis self phase archive {parameters (<>.some .any)}) + (do phase.monad + [_ (type.infer .Text)] + (wrap (#analysis.Primitive (#analysis.Text self))))) - ## Synthesis - (analysis: (..my-synthesis self phase archive {parameters (<>.some .any)}) - (do phase.monad - [_ (type.infer .Text)] - (wrap (#analysis.Extension self (list))))) + ## Synthesis + (analysis: (..my-synthesis self phase archive {parameters (<>.some .any)}) + (do phase.monad + [_ (type.infer .Text)] + (wrap (#analysis.Extension self (list))))) - (synthesis: (..my-synthesis self phase archive {parameters (<>.some .any)}) - (do phase.monad - [] - (wrap (synthesis.text self)))) - - ## Directive - (directive: (..my-directive self phase archive {parameters (<>.some .any)}) - (do phase.monad - [#let [_ (log! (format "Successfully installed directive " (%.text self) "!"))]] - (wrap directive.no-requirements))) + (synthesis: (..my-synthesis self phase archive {parameters (<>.some .any)}) + (do phase.monad + [] + (wrap (synthesis.text self)))) + + ## Directive + (directive: (..my-directive self phase archive {parameters (<>.some .any)}) + (do phase.monad + [#let [_ (log! (format "Successfully installed directive " (%.text self) "!"))]] + (wrap directive.no-requirements))) - (`` ((~~ (static ..my-directive)))) - ))) + (`` ((~~ (static ..my-directive)))) + )) (def: #export test Test @@ -90,10 +90,10 @@ (`` ($_ _.and (~~ (template [ ] [(_.cover [] - (`` (for {(~~ (static @.old)) - false} - (text@= ((~~ (static ))) - ))))] + (for {@.old + false} + (text@= (`` ((~~ (static )))) + )))] [/.analysis: ..my-analysis] [/.synthesis: ..my-synthesis] diff --git a/stdlib/source/test/lux/target/jvm.lux b/stdlib/source/test/lux/target/jvm.lux index 6abfdb92d..f572b7e1e 100644 --- a/stdlib/source/test/lux/target/jvm.lux +++ b/stdlib/source/test/lux/target/jvm.lux @@ -288,38 +288,39 @@ #random ..$String::random #literal ..$String::literal}) -(`` (with-expansions [ (for {(~~ (static @.old)) - "jvm leq" - (~~ (static @.jvm)) - "jvm long ="})] - (template [ ] - [(def: - Test - (do {@ random.monad} - [expected (:: @ map (i64.and (i64.mask )) random.nat)] - (<| (_.lift ) - (..bytecode (for {(~~ (static @.old)) - (|>> (:coerce ) ( expected)) - (~~ (static @.jvm)) - (|>> (:coerce ) "jvm object cast" ( ("jvm object cast" (:coerce java/lang/Long expected))))})) - (do /.monad - [_ ( (|> expected try.assume))] - ))))] +(with-expansions [ (for {@.old + "jvm leq" + @.jvm + "jvm long ="})] + (template [ ] + [(def: + Test + (do {@ random.monad} + [expected (:: @ map (i64.and (i64.mask )) random.nat)] + (<| (_.lift ) + (..bytecode (for {@.old + (|>> (:coerce ) ( expected)) + @.jvm + (|>> (:coerce ) "jvm object cast" ( ("jvm object cast" (:coerce java/lang/Long expected))))})) + (do /.monad + [_ ( (|> expected try.assume))] + ))))] - [byte 7 java/lang/Byte /.bipush ..$Byte::wrap "BIPUSH" host.byte-to-long /unsigned.u1] - [short 15 java/lang/Short /.sipush ..$Short::wrap "SIPUSH" host.short-to-long /unsigned.u2] - ))) + [byte 7 java/lang/Byte /.bipush ..$Byte::wrap "BIPUSH" host.byte-to-long /unsigned.u1] + [short 15 java/lang/Short /.sipush ..$Short::wrap "SIPUSH" host.short-to-long /unsigned.u2] + )) (template [ ] - [(`` (template: ( ) - (: (-> ) - (function (_ parameter subject) - (for {(~~ (static @.old)) - ( subject parameter) - (~~ (static @.jvm)) - ("jvm object cast" - ( ("jvm object cast" subject) - ("jvm object cast" parameter)))})))))] + [(template: ( ) + (: (-> ) + (function (_ parameter subject) + (for {@.old + ( subject parameter) + + @.jvm + ("jvm object cast" + ( ("jvm object cast" subject) + ("jvm object cast" parameter)))}))))] [int/2 java/lang/Integer] [long/2 java/lang/Long] @@ -327,32 +328,32 @@ [double/2 java/lang/Double] ) -(`` (template: (long+int/2 ) - (: (-> java/lang/Integer java/lang/Long java/lang/Long) - (function (_ parameter subject) - (for {(~~ (static @.old)) - ( subject parameter) - (~~ (static @.jvm)) - ("jvm object cast" - ( ("jvm object cast" subject) - ("jvm object cast" parameter)))}))))) +(template: (long+int/2 ) + (: (-> java/lang/Integer java/lang/Long java/lang/Long) + (function (_ parameter subject) + (for {@.old + ( subject parameter) + + @.jvm + ("jvm object cast" + ( ("jvm object cast" subject) + ("jvm object cast" parameter)))})))) (def: int Test - (let [int (`` (with-expansions [ (for {(~~ (static @.old)) - "jvm ieq" - (~~ (static @.jvm)) - "jvm int ="})] - (: (-> java/lang/Integer (Bytecode Any) (Random Bit)) - (function (_ expected bytecode) - (<| (..bytecode (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Integer) ( expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Integer) "jvm object cast" - ( ("jvm object cast" expected)))}))) - (do /.monad - [_ bytecode] - ..$Integer::wrap)))))) + (let [int (with-expansions [ (for {@.old "jvm ieq" + @.jvm "jvm int ="})] + (: (-> java/lang/Integer (Bytecode Any) (Random Bit)) + (function (_ expected bytecode) + (<| (..bytecode (for {@.old + (|>> (:coerce java/lang/Integer) ( expected)) + + @.jvm + (|>> (:coerce java/lang/Integer) "jvm object cast" + ( ("jvm object cast" expected)))})) + (do /.monad + [_ bytecode] + ..$Integer::wrap))))) unary (: (-> (-> java/lang/Integer java/lang/Integer) (Bytecode Any) (Random Bit)) (function (_ reference instruction) (do random.monad @@ -424,291 +425,295 @@ (def: long Test - (`` (with-expansions [ (for {(~~ (static @.old)) - "jvm leq" - (~~ (static @.jvm)) - "jvm long ="})] - (let [long (: (-> java/lang/Long (Bytecode Any) (Random Bit)) - (function (_ expected bytecode) - (<| (..bytecode (`` (for {(~~ (static @.old)) - (|>> (:coerce Int) (i.= expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Long) "jvm object cast" ( ("jvm object cast" expected)))}))) - (do /.monad - [_ bytecode] - ..$Long::wrap)))) - unary (: (-> (-> java/lang/Long java/lang/Long) (Bytecode Any) (Random Bit)) - (function (_ reference instruction) - (do random.monad - [subject ..$Long::random] - (long (reference subject) - (do /.monad - [_ (..$Long::literal subject)] - instruction))))) - binary (: (-> (-> java/lang/Long java/lang/Long java/lang/Long) (Bytecode Any) (Random Bit)) - (function (_ reference instruction) - (do random.monad - [parameter ..$Long::random - subject ..$Long::random] - (long (reference parameter subject) - (do /.monad - [_ (..$Long::literal subject) - _ (..$Long::literal parameter)] - instruction))))) - shift (: (-> (-> java/lang/Integer java/lang/Long java/lang/Long) (Bytecode Any) (Random Bit)) - (function (_ reference instruction) - (do {@ random.monad} - [parameter (:: @ map (|>> (n.% 64) (:coerce java/lang/Long)) random.nat) - subject ..$Long::random] - (long (reference (host.long-to-int parameter) subject) - (do /.monad - [_ (..$Long::literal subject) - _ (..$Integer::literal (host.long-to-int parameter))] - instruction))))) - literal ($_ _.and - (_.lift "LCONST_0" (long (:coerce java/lang/Long +0) /.lconst-0)) - (_.lift "LCONST_1" (long (:coerce java/lang/Long +1) /.lconst-1)) - (_.lift "LDC2_W/LONG" - (do random.monad - [expected ..$Long::random] - (long expected (..$Long::literal expected))))) - arithmetic ($_ _.and - (_.lift "LADD" (binary (long/2 "jvm ladd" "jvm long +") /.ladd)) - (_.lift "LSUB" (binary (long/2 "jvm lsub" "jvm long -") /.lsub)) - (_.lift "LMUL" (binary (long/2 "jvm lmul" "jvm long *") /.lmul)) - (_.lift "LDIV" (binary (long/2 "jvm ldiv" "jvm long /") /.ldiv)) - (_.lift "LREM" (binary (long/2 "jvm lrem" "jvm long %") /.lrem)) - (_.lift "LNEG" (unary (function (_ value) - ((long/2 "jvm lsub" "jvm long -") - value - (:coerce java/lang/Long +0))) - /.lneg))) - bitwise ($_ _.and - (_.lift "LAND" (binary (long/2 "jvm land" "jvm long and") /.land)) - (_.lift "LOR" (binary (long/2 "jvm lor" "jvm long or") /.lor)) - (_.lift "LXOR" (binary (long/2 "jvm lxor" "jvm long xor") /.lxor)) - (_.lift "LSHL" (shift (long+int/2 "jvm lshl" "jvm long shl") /.lshl)) - (_.lift "LSHR" (shift (long+int/2 "jvm lshr" "jvm long shr") /.lshr)) - (_.lift "LUSHR" (shift (long+int/2 "jvm lushr" "jvm long ushr") /.lushr))) - comparison (_.lift "LCMP" - (do random.monad - [reference ..$Long::random - subject ..$Long::random - #let [expected (cond (i.= (:coerce Int reference) (:coerce Int subject)) - (:coerce java/lang/Long +0) + (with-expansions [ (for {@.old "jvm leq" + @.jvm "jvm long ="})] + (let [long (: (-> java/lang/Long (Bytecode Any) (Random Bit)) + (function (_ expected bytecode) + (<| (..bytecode (for {@.old + (|>> (:coerce Int) (i.= expected)) + + @.jvm + (|>> (:coerce java/lang/Long) "jvm object cast" ( ("jvm object cast" expected)))})) + (do /.monad + [_ bytecode] + ..$Long::wrap)))) + unary (: (-> (-> java/lang/Long java/lang/Long) (Bytecode Any) (Random Bit)) + (function (_ reference instruction) + (do random.monad + [subject ..$Long::random] + (long (reference subject) + (do /.monad + [_ (..$Long::literal subject)] + instruction))))) + binary (: (-> (-> java/lang/Long java/lang/Long java/lang/Long) (Bytecode Any) (Random Bit)) + (function (_ reference instruction) + (do random.monad + [parameter ..$Long::random + subject ..$Long::random] + (long (reference parameter subject) + (do /.monad + [_ (..$Long::literal subject) + _ (..$Long::literal parameter)] + instruction))))) + shift (: (-> (-> java/lang/Integer java/lang/Long java/lang/Long) (Bytecode Any) (Random Bit)) + (function (_ reference instruction) + (do {@ random.monad} + [parameter (:: @ map (|>> (n.% 64) (:coerce java/lang/Long)) random.nat) + subject ..$Long::random] + (long (reference (host.long-to-int parameter) subject) + (do /.monad + [_ (..$Long::literal subject) + _ (..$Integer::literal (host.long-to-int parameter))] + instruction))))) + literal ($_ _.and + (_.lift "LCONST_0" (long (:coerce java/lang/Long +0) /.lconst-0)) + (_.lift "LCONST_1" (long (:coerce java/lang/Long +1) /.lconst-1)) + (_.lift "LDC2_W/LONG" + (do random.monad + [expected ..$Long::random] + (long expected (..$Long::literal expected))))) + arithmetic ($_ _.and + (_.lift "LADD" (binary (long/2 "jvm ladd" "jvm long +") /.ladd)) + (_.lift "LSUB" (binary (long/2 "jvm lsub" "jvm long -") /.lsub)) + (_.lift "LMUL" (binary (long/2 "jvm lmul" "jvm long *") /.lmul)) + (_.lift "LDIV" (binary (long/2 "jvm ldiv" "jvm long /") /.ldiv)) + (_.lift "LREM" (binary (long/2 "jvm lrem" "jvm long %") /.lrem)) + (_.lift "LNEG" (unary (function (_ value) + ((long/2 "jvm lsub" "jvm long -") + value + (:coerce java/lang/Long +0))) + /.lneg))) + bitwise ($_ _.and + (_.lift "LAND" (binary (long/2 "jvm land" "jvm long and") /.land)) + (_.lift "LOR" (binary (long/2 "jvm lor" "jvm long or") /.lor)) + (_.lift "LXOR" (binary (long/2 "jvm lxor" "jvm long xor") /.lxor)) + (_.lift "LSHL" (shift (long+int/2 "jvm lshl" "jvm long shl") /.lshl)) + (_.lift "LSHR" (shift (long+int/2 "jvm lshr" "jvm long shr") /.lshr)) + (_.lift "LUSHR" (shift (long+int/2 "jvm lushr" "jvm long ushr") /.lushr))) + comparison (_.lift "LCMP" + (do random.monad + [reference ..$Long::random + subject ..$Long::random + #let [expected (cond (i.= (:coerce Int reference) (:coerce Int subject)) + (:coerce java/lang/Long +0) - (i.> (:coerce Int reference) (:coerce Int subject)) - (:coerce java/lang/Long +1) + (i.> (:coerce Int reference) (:coerce Int subject)) + (:coerce java/lang/Long +1) - ## (i.< (:coerce Int reference) (:coerce Int subject)) - (:coerce java/lang/Long -1))]] - (<| (..bytecode (`` (for {(~~ (static @.old)) - (|>> (:coerce Int) (i.= expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Long) "jvm object cast" ( ("jvm object cast" expected)))}))) - (do /.monad - [_ (..$Long::literal subject) - _ (..$Long::literal reference) - _ /.lcmp - _ /.i2l] - ..$Long::wrap))))] - ($_ _.and - (<| (_.context "literal") - literal) - (<| (_.context "arithmetic") - arithmetic) - (<| (_.context "bitwise") - bitwise) - (<| (_.context "comparison") - comparison) - ))))) + ## (i.< (:coerce Int reference) (:coerce Int subject)) + (:coerce java/lang/Long -1))]] + (<| (..bytecode (for {@.old + (|>> (:coerce Int) (i.= expected)) + + @.jvm + (|>> (:coerce java/lang/Long) "jvm object cast" ( ("jvm object cast" expected)))})) + (do /.monad + [_ (..$Long::literal subject) + _ (..$Long::literal reference) + _ /.lcmp + _ /.i2l] + ..$Long::wrap))))] + ($_ _.and + (<| (_.context "literal") + literal) + (<| (_.context "arithmetic") + arithmetic) + (<| (_.context "bitwise") + bitwise) + (<| (_.context "comparison") + comparison) + )))) (def: float Test - (`` (with-expansions [ (for {(~~ (static @.old)) - "jvm feq" - (~~ (static @.jvm)) - "jvm float ="})] - (let [float (: (-> java/lang/Float (Bytecode Any) (Random Bit)) - (function (_ expected bytecode) - (<| (..bytecode (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Float) ("jvm feq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Float) "jvm object cast" ( ("jvm object cast" expected)))}))) - (do /.monad - [_ bytecode] - ..$Float::wrap)))) - unary (: (-> (-> java/lang/Float java/lang/Float) - (Bytecode Any) - (Random Bit)) - (function (_ reference instruction) - (do random.monad - [subject ..$Float::random] - (float (reference subject) - (do /.monad - [_ (..$Float::literal subject)] - instruction))))) - binary (: (-> (-> java/lang/Float java/lang/Float java/lang/Float) - (Bytecode Any) - (Random Bit)) - (function (_ reference instruction) - (do random.monad - [parameter ..$Float::random - subject ..$Float::random] - (float (reference parameter subject) - (do /.monad - [_ (..$Float::literal subject) - _ (..$Float::literal parameter)] - instruction))))) - literal ($_ _.and - (_.lift "FCONST_0" (float (host.double-to-float (:coerce java/lang/Double +0.0)) /.fconst-0)) - (_.lift "FCONST_1" (float (host.double-to-float (:coerce java/lang/Double +1.0)) /.fconst-1)) - (_.lift "FCONST_2" (float (host.double-to-float (:coerce java/lang/Double +2.0)) /.fconst-2)) - (_.lift "LDC_W/FLOAT" - (do random.monad - [expected ..$Float::random] - (float expected (..$Float::literal expected))))) - arithmetic ($_ _.and - (_.lift "FADD" (binary (float/2 "jvm fadd" "jvm float +") /.fadd)) - (_.lift "FSUB" (binary (float/2 "jvm fsub" "jvm float -") /.fsub)) - (_.lift "FMUL" (binary (float/2 "jvm fmul" "jvm float *") /.fmul)) - (_.lift "FDIV" (binary (float/2 "jvm fdiv" "jvm float /") /.fdiv)) - (_.lift "FREM" (binary (float/2 "jvm frem" "jvm float %") /.frem)) - (_.lift "FNEG" (unary (function (_ value) - ((float/2 "jvm fsub" "jvm float -") - value - (host.double-to-float (:coerce java/lang/Double +0.0)))) - /.fneg))) - comparison (: (-> (Bytecode Any) (-> java/lang/Float java/lang/Float Bit) (Random Bit)) - (function (_ instruction standard) + (with-expansions [ (for {@.old "jvm feq" + @.jvm "jvm float ="})] + (let [float (: (-> java/lang/Float (Bytecode Any) (Random Bit)) + (function (_ expected bytecode) + (<| (..bytecode (for {@.old + (|>> (:coerce java/lang/Float) ("jvm feq" expected)) + + @.jvm + (|>> (:coerce java/lang/Float) "jvm object cast" ( ("jvm object cast" expected)))})) + (do /.monad + [_ bytecode] + ..$Float::wrap)))) + unary (: (-> (-> java/lang/Float java/lang/Float) + (Bytecode Any) + (Random Bit)) + (function (_ reference instruction) + (do random.monad + [subject ..$Float::random] + (float (reference subject) + (do /.monad + [_ (..$Float::literal subject)] + instruction))))) + binary (: (-> (-> java/lang/Float java/lang/Float java/lang/Float) + (Bytecode Any) + (Random Bit)) + (function (_ reference instruction) + (do random.monad + [parameter ..$Float::random + subject ..$Float::random] + (float (reference parameter subject) + (do /.monad + [_ (..$Float::literal subject) + _ (..$Float::literal parameter)] + instruction))))) + literal ($_ _.and + (_.lift "FCONST_0" (float (host.double-to-float (:coerce java/lang/Double +0.0)) /.fconst-0)) + (_.lift "FCONST_1" (float (host.double-to-float (:coerce java/lang/Double +1.0)) /.fconst-1)) + (_.lift "FCONST_2" (float (host.double-to-float (:coerce java/lang/Double +2.0)) /.fconst-2)) + (_.lift "LDC_W/FLOAT" (do random.monad - [reference ..$Float::random - subject ..$Float::random - #let [expected (if (`` (for {(~~ (static @.old)) - ("jvm feq" reference subject) - (~~ (static @.jvm)) - ( ("jvm object cast" reference) ("jvm object cast" subject))})) - +0 - (if (standard reference subject) - +1 - -1))]] - (<| (..bytecode (|>> (:coerce Int) (i.= expected))) - (do /.monad - [_ (..$Float::literal subject) - _ (..$Float::literal reference) - _ instruction - _ /.i2l] - ..$Long::wrap))))) - comparison ($_ _.and - (_.lift "FCMPL" (comparison /.fcmpl (function (_ reference subject) - (`` (for {(~~ (static @.old)) - ("jvm fgt" subject reference) - (~~ (static @.jvm)) - ("jvm float <" ("jvm object cast" reference) ("jvm object cast" subject))}))))) - (_.lift "FCMPG" (comparison /.fcmpg (function (_ reference subject) - (`` (for {(~~ (static @.old)) - ("jvm fgt" subject reference) - (~~ (static @.jvm)) - ("jvm float <" ("jvm object cast" subject) ("jvm object cast" reference))}))))))] - ($_ _.and - (<| (_.context "literal") - literal) - (<| (_.context "arithmetic") - arithmetic) - (<| (_.context "comparison") - comparison) - ))))) + [expected ..$Float::random] + (float expected (..$Float::literal expected))))) + arithmetic ($_ _.and + (_.lift "FADD" (binary (float/2 "jvm fadd" "jvm float +") /.fadd)) + (_.lift "FSUB" (binary (float/2 "jvm fsub" "jvm float -") /.fsub)) + (_.lift "FMUL" (binary (float/2 "jvm fmul" "jvm float *") /.fmul)) + (_.lift "FDIV" (binary (float/2 "jvm fdiv" "jvm float /") /.fdiv)) + (_.lift "FREM" (binary (float/2 "jvm frem" "jvm float %") /.frem)) + (_.lift "FNEG" (unary (function (_ value) + ((float/2 "jvm fsub" "jvm float -") + value + (host.double-to-float (:coerce java/lang/Double +0.0)))) + /.fneg))) + comparison (: (-> (Bytecode Any) (-> java/lang/Float java/lang/Float Bit) (Random Bit)) + (function (_ instruction standard) + (do random.monad + [reference ..$Float::random + subject ..$Float::random + #let [expected (if (for {@.old + ("jvm feq" reference subject) + + @.jvm + ( ("jvm object cast" reference) ("jvm object cast" subject))}) + +0 + (if (standard reference subject) + +1 + -1))]] + (<| (..bytecode (|>> (:coerce Int) (i.= expected))) + (do /.monad + [_ (..$Float::literal subject) + _ (..$Float::literal reference) + _ instruction + _ /.i2l] + ..$Long::wrap))))) + comparison ($_ _.and + (_.lift "FCMPL" (comparison /.fcmpl (function (_ reference subject) + (for {@.old + ("jvm fgt" subject reference) + + @.jvm + ("jvm float <" ("jvm object cast" reference) ("jvm object cast" subject))})))) + (_.lift "FCMPG" (comparison /.fcmpg (function (_ reference subject) + (for {@.old + ("jvm fgt" subject reference) + + @.jvm + ("jvm float <" ("jvm object cast" subject) ("jvm object cast" reference))})))))] + ($_ _.and + (<| (_.context "literal") + literal) + (<| (_.context "arithmetic") + arithmetic) + (<| (_.context "comparison") + comparison) + )))) (def: double Test - (`` (with-expansions [ (for {(~~ (static @.old)) - "jvm deq" - (~~ (static @.jvm)) - "jvm double ="})] - (let [double (: (-> java/lang/Double (Bytecode Any) (Random Bit)) - (function (_ expected bytecode) - (<| (..bytecode (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Double) ("jvm deq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Double) "jvm object cast" ( ("jvm object cast" expected)))}))) - (do /.monad - [_ bytecode] - ..$Double::wrap)))) - unary (: (-> (-> java/lang/Double java/lang/Double) (Bytecode Any) (Random Bit)) - (function (_ reference instruction) - (do random.monad - [subject ..$Double::random] - (double (reference subject) - (do /.monad - [_ (..$Double::literal subject)] - instruction))))) - binary (: (-> (-> java/lang/Double java/lang/Double java/lang/Double) (Bytecode Any) (Random Bit)) - (function (_ reference instruction) - (do random.monad - [parameter ..$Double::random - subject ..$Double::random] - (double (reference parameter subject) - (do /.monad - [_ (..$Double::literal subject) - _ (..$Double::literal parameter)] - instruction))))) - literal ($_ _.and - (_.lift "DCONST_0" (double (:coerce java/lang/Double +0.0) /.dconst-0)) - (_.lift "DCONST_1" (double (:coerce java/lang/Double +1.0) /.dconst-1)) - (_.lift "LDC2_W/DOUBLE" - (do random.monad - [expected ..$Double::random] - (double expected (..$Double::literal expected))))) - arithmetic ($_ _.and - (_.lift "DADD" (binary (double/2 "jvm dadd" "jvm double +") /.dadd)) - (_.lift "DSUB" (binary (double/2 "jvm dsub" "jvm double -") /.dsub)) - (_.lift "DMUL" (binary (double/2 "jvm dmul" "jvm double *") /.dmul)) - (_.lift "DDIV" (binary (double/2 "jvm ddiv" "jvm double /") /.ddiv)) - (_.lift "DREM" (binary (double/2 "jvm drem" "jvm double %") /.drem)) - (_.lift "DNEG" (unary (function (_ value) - ((double/2 "jvm dsub" "jvm double -") - value - (:coerce java/lang/Double +0.0))) - /.dneg))) - comparison (: (-> (Bytecode Any) (-> java/lang/Double java/lang/Double Bit) (Random Bit)) - (function (_ instruction standard) + (with-expansions [ (for {@.old "jvm deq" + @.jvm "jvm double ="})] + (let [double (: (-> java/lang/Double (Bytecode Any) (Random Bit)) + (function (_ expected bytecode) + (<| (..bytecode (for {@.old + (|>> (:coerce java/lang/Double) ("jvm deq" expected)) + + @.jvm + (|>> (:coerce java/lang/Double) "jvm object cast" ( ("jvm object cast" expected)))})) + (do /.monad + [_ bytecode] + ..$Double::wrap)))) + unary (: (-> (-> java/lang/Double java/lang/Double) (Bytecode Any) (Random Bit)) + (function (_ reference instruction) + (do random.monad + [subject ..$Double::random] + (double (reference subject) + (do /.monad + [_ (..$Double::literal subject)] + instruction))))) + binary (: (-> (-> java/lang/Double java/lang/Double java/lang/Double) (Bytecode Any) (Random Bit)) + (function (_ reference instruction) + (do random.monad + [parameter ..$Double::random + subject ..$Double::random] + (double (reference parameter subject) + (do /.monad + [_ (..$Double::literal subject) + _ (..$Double::literal parameter)] + instruction))))) + literal ($_ _.and + (_.lift "DCONST_0" (double (:coerce java/lang/Double +0.0) /.dconst-0)) + (_.lift "DCONST_1" (double (:coerce java/lang/Double +1.0) /.dconst-1)) + (_.lift "LDC2_W/DOUBLE" (do random.monad - [reference ..$Double::random - subject ..$Double::random - #let [expected (if (`` (for {(~~ (static @.old)) - ("jvm deq" reference subject) - (~~ (static @.jvm)) - ( ("jvm object cast" reference) ("jvm object cast" subject))})) - +0 - (if (standard reference subject) - +1 - -1))]] - (<| (..bytecode (|>> (:coerce Int) (i.= expected))) - (do /.monad - [_ (..$Double::literal subject) - _ (..$Double::literal reference) - _ instruction - _ /.i2l] - ..$Long::wrap))))) - comparison ($_ _.and - (_.lift "DCMPL" (comparison /.dcmpl (function (_ reference subject) - (`` (for {(~~ (static @.old)) - ("jvm dlt" subject reference) - (~~ (static @.jvm)) - ("jvm double <" ("jvm object cast" reference) ("jvm object cast" subject))}))))) - (_.lift "DCMPG" (comparison /.dcmpg (function (_ reference subject) - (`` (for {(~~ (static @.old)) - ("jvm dgt" subject reference) - (~~ (static @.jvm)) - ("jvm double <" ("jvm object cast" subject) ("jvm object cast" reference))}))))))] - ($_ _.and - (<| (_.context "literal") - literal) - (<| (_.context "arithmetic") - arithmetic) - (<| (_.context "comparison") - comparison) - ))))) + [expected ..$Double::random] + (double expected (..$Double::literal expected))))) + arithmetic ($_ _.and + (_.lift "DADD" (binary (double/2 "jvm dadd" "jvm double +") /.dadd)) + (_.lift "DSUB" (binary (double/2 "jvm dsub" "jvm double -") /.dsub)) + (_.lift "DMUL" (binary (double/2 "jvm dmul" "jvm double *") /.dmul)) + (_.lift "DDIV" (binary (double/2 "jvm ddiv" "jvm double /") /.ddiv)) + (_.lift "DREM" (binary (double/2 "jvm drem" "jvm double %") /.drem)) + (_.lift "DNEG" (unary (function (_ value) + ((double/2 "jvm dsub" "jvm double -") + value + (:coerce java/lang/Double +0.0))) + /.dneg))) + comparison (: (-> (Bytecode Any) (-> java/lang/Double java/lang/Double Bit) (Random Bit)) + (function (_ instruction standard) + (do random.monad + [reference ..$Double::random + subject ..$Double::random + #let [expected (if (for {@.old + ("jvm deq" reference subject) + + @.jvm + ( ("jvm object cast" reference) ("jvm object cast" subject))}) + +0 + (if (standard reference subject) + +1 + -1))]] + (<| (..bytecode (|>> (:coerce Int) (i.= expected))) + (do /.monad + [_ (..$Double::literal subject) + _ (..$Double::literal reference) + _ instruction + _ /.i2l] + ..$Long::wrap))))) + comparison ($_ _.and + (_.lift "DCMPL" (comparison /.dcmpl (function (_ reference subject) + (for {@.old + ("jvm dlt" subject reference) + + @.jvm + ("jvm double <" ("jvm object cast" reference) ("jvm object cast" subject))})))) + (_.lift "DCMPG" (comparison /.dcmpg (function (_ reference subject) + (for {@.old + ("jvm dgt" subject reference) + + @.jvm + ("jvm double <" ("jvm object cast" subject) ("jvm object cast" reference))})))))] + ($_ _.and + (<| (_.context "literal") + literal) + (<| (_.context "arithmetic") + arithmetic) + (<| (_.context "comparison") + comparison) + )))) (def: primitive Test @@ -774,10 +779,11 @@ (<| (_.lift "INVOKESTATIC") (do random.monad [expected ..$Double::random]) - (..bytecode (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Double) ("jvm deq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Double) "jvm object cast" ("jvm double =" ("jvm object cast" expected)))}))) + (..bytecode (for {@.old + (|>> (:coerce java/lang/Double) ("jvm deq" expected)) + + @.jvm + (|>> (:coerce java/lang/Double) "jvm object cast" ("jvm double =" ("jvm object cast" expected)))})) (do /.monad [_ (/.double (:coerce Frac expected))] (/.invokestatic ..$Double "valueOf" (/type.method [(list /type.double) ..$Double (list)])))) @@ -793,10 +799,11 @@ (<| (_.lift "INVOKESPECIAL") (do random.monad [expected ..$Double::random]) - (..bytecode (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Double) ("jvm deq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Double) "jvm object cast" ("jvm double =" ("jvm object cast" expected)))}))) + (..bytecode (for {@.old + (|>> (:coerce java/lang/Double) ("jvm deq" expected)) + + @.jvm + (|>> (:coerce java/lang/Double) "jvm object cast" ("jvm double =" ("jvm object cast" expected)))})) (do /.monad [_ (/.new ..$Double) _ /.dup @@ -820,11 +827,12 @@ part0 ..$Long::random part1 ..$Long::random #let [expected (: java/lang/Long - (`` (for {(~~ (static @.old)) - ("jvm ladd" part0 part1) - (~~ (static @.jvm)) - ("jvm object cast" - ("jvm long +" ("jvm object cast" part0) ("jvm object cast" part1)))}))) + (for {@.old + ("jvm ladd" part0 part1) + + @.jvm + ("jvm object cast" + ("jvm long +" ("jvm object cast" part0) ("jvm object cast" part1)))})) $Self (/type.class class-name (list)) class-field "class_field" object-field "object_field" @@ -938,52 +946,59 @@ (_.context "byte" (array (/.newarray /instruction.t-byte) $Byte::random $Byte::literal [/.bastore /.baload $Byte::wrap] (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Byte) host.byte-to-long ("jvm leq" (host.byte-to-long expected))) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Byte) host.byte-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.byte-to-long (:coerce java/lang/Byte expected)))))}))))) + (for {@.old + (|>> (:coerce java/lang/Byte) host.byte-to-long ("jvm leq" (host.byte-to-long expected))) + + @.jvm + (|>> (:coerce java/lang/Byte) host.byte-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.byte-to-long (:coerce java/lang/Byte expected)))))})))) (_.context "short" (array (/.newarray /instruction.t-short) $Short::random $Short::literal [/.sastore /.saload $Short::wrap] (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Short) host.short-to-long ("jvm leq" (host.short-to-long expected))) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Short) host.short-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.short-to-long (:coerce java/lang/Short expected)))))}))))) + (for {@.old + (|>> (:coerce java/lang/Short) host.short-to-long ("jvm leq" (host.short-to-long expected))) + + @.jvm + (|>> (:coerce java/lang/Short) host.short-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.short-to-long (:coerce java/lang/Short expected)))))})))) (_.context "int" (array (/.newarray /instruction.t-int) $Integer::random $Integer::literal [/.iastore /.iaload $Integer::wrap] (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Integer) ("jvm ieq" (host.int-to-long expected))) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Integer) "jvm object cast" ("jvm int =" ("jvm object cast" (:coerce java/lang/Integer expected))))}))))) + (for {@.old + (|>> (:coerce java/lang/Integer) ("jvm ieq" (host.int-to-long expected))) + + @.jvm + (|>> (:coerce java/lang/Integer) "jvm object cast" ("jvm int =" ("jvm object cast" (:coerce java/lang/Integer expected))))})))) (_.context "long" (array (/.newarray /instruction.t-long) $Long::random $Long::literal [/.lastore /.laload $Long::wrap] (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Long) ("jvm leq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Long) "jvm object cast" ("jvm long =" ("jvm object cast" (:coerce java/lang/Long expected))))}))))) + (for {@.old + (|>> (:coerce java/lang/Long) ("jvm leq" expected)) + + @.jvm + (|>> (:coerce java/lang/Long) "jvm object cast" ("jvm long =" ("jvm object cast" (:coerce java/lang/Long expected))))})))) (_.context "float" (array (/.newarray /instruction.t-float) $Float::random $Float::literal [/.fastore /.faload $Float::wrap] (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Float) ("jvm feq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Float) "jvm object cast" ("jvm float =" ("jvm object cast" (:coerce java/lang/Float expected))))}))))) + (for {@.old + (|>> (:coerce java/lang/Float) ("jvm feq" expected)) + + @.jvm + (|>> (:coerce java/lang/Float) "jvm object cast" ("jvm float =" ("jvm object cast" (:coerce java/lang/Float expected))))})))) (_.context "double" (array (/.newarray /instruction.t-double) $Double::random $Double::literal [/.dastore /.daload $Double::wrap] (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Double) ("jvm deq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Double) "jvm object cast" ("jvm double =" ("jvm object cast" (:coerce java/lang/Double expected))))}))))) + (for {@.old + (|>> (:coerce java/lang/Double) ("jvm deq" expected)) + + @.jvm + (|>> (:coerce java/lang/Double) "jvm object cast" ("jvm double =" ("jvm object cast" (:coerce java/lang/Double expected))))})))) (_.context "char" (array (/.newarray /instruction.t-char) $Character::random $Character::literal [/.castore /.caload $Character::wrap] (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Character) ("jvm ceq" expected)) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Character) "jvm object cast" ("jvm char =" ("jvm object cast" (:coerce java/lang/Character expected))))}))))) + (for {@.old + (|>> (:coerce java/lang/Character) ("jvm ceq" expected)) + + @.jvm + (|>> (:coerce java/lang/Character) "jvm object cast" ("jvm char =" ("jvm object cast" (:coerce java/lang/Character expected))))})))) (_.context "object" (array (/.anewarray ..$String) $String::random $String::literal [/.aastore /.aaload /.nop] (function (_ expected) (|>> (:coerce Text) (text@= (:coerce Text expected)))))) @@ -1013,10 +1028,11 @@ (template: (!::= ) (: (-> Any Bit) (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce ) ( expected)) - (~~ (static @.jvm)) - (|>> (:coerce ) "jvm object cast" ( ("jvm object cast" (:coerce expected))))}))))) + (for {@.old + (|>> (:coerce ) ( expected)) + + @.jvm + (|>> (:coerce ) "jvm object cast" ( ("jvm object cast" (:coerce expected))))})))) (def: conversion Test @@ -1043,18 +1059,20 @@ (_.lift "I2D" (conversion ..$Integer::primitive ..$Double::primitive /.i2d (|>> host.int-to-double) double::=)) (_.lift "I2B" (conversion ..$Integer::primitive ..$Byte::primitive /.i2b (|>> host.int-to-byte) (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Byte) host.byte-to-long ("jvm leq" (host.byte-to-long expected))) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Byte) host.byte-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.byte-to-long (:coerce java/lang/Byte expected)))))}))))) + (for {@.old + (|>> (:coerce java/lang/Byte) host.byte-to-long ("jvm leq" (host.byte-to-long expected))) + + @.jvm + (|>> (:coerce java/lang/Byte) host.byte-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.byte-to-long (:coerce java/lang/Byte expected)))))})))) (_.lift "I2C" (conversion ..$Integer::primitive ..$Character::primitive /.i2c (|>> host.int-to-char) (!::= java/lang/Character "jvm ceq" "jvm char ="))) (_.lift "I2S" (conversion ..$Integer::primitive ..$Short::primitive /.i2s (|>> host.int-to-short) (function (_ expected) - (`` (for {(~~ (static @.old)) - (|>> (:coerce java/lang/Short) host.short-to-long ("jvm leq" (host.short-to-long expected))) - (~~ (static @.jvm)) - (|>> (:coerce java/lang/Short) host.short-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.short-to-long (:coerce java/lang/Short expected)))))}))))))) + (for {@.old + (|>> (:coerce java/lang/Short) host.short-to-long ("jvm leq" (host.short-to-long expected))) + + @.jvm + (|>> (:coerce java/lang/Short) host.short-to-long "jvm object cast" ("jvm long =" ("jvm object cast" (host.short-to-long (:coerce java/lang/Short expected)))))})))))) (<| (_.context "long") ($_ _.and (_.lift "L2I" (conversion ..$Long::primitive ..$Integer::primitive /.l2i (|>> host.long-to-int) int::=)) @@ -1126,15 +1144,16 @@ increment (:: @ map (|>> (n.% 100) /unsigned.u1 try.assume) random.nat) #let [expected (: java/lang/Long - (`` (for {(~~ (static @.old)) - ("jvm ladd" - (host.byte-to-long base) - (.int (/unsigned.value increment))) - (~~ (static @.jvm)) - ("jvm object cast" - ("jvm long +" - ("jvm object cast" (host.byte-to-long base)) - ("jvm object cast" (:coerce java/lang/Long (/unsigned.value increment)))))})))]] + (for {@.old + ("jvm ladd" + (host.byte-to-long base) + (.int (/unsigned.value increment))) + + @.jvm + ("jvm object cast" + ("jvm long +" + ("jvm object cast" (host.byte-to-long base)) + ("jvm object cast" (:coerce java/lang/Long (/unsigned.value increment)))))}))]] (..bytecode (|>> (:coerce Int) (i.= (:coerce Int expected))) (do /.monad [_ (..$Byte::literal base) @@ -1385,10 +1404,11 @@ reference ..$Integer::random subject (|> ..$Integer::random (random.filter (|>> ((!::= java/lang/Integer "jvm ieq" "jvm int =") reference) not))) - #let [[lesser greater] (if (`` (for {(~~ (static @.old)) - ("jvm ilt" reference subject) - (~~ (static @.jvm)) - ("jvm int <" ("jvm object cast" subject) ("jvm object cast" reference))})) + #let [[lesser greater] (if (for {@.old + ("jvm ilt" reference subject) + + @.jvm + ("jvm int <" ("jvm object cast" subject) ("jvm object cast" reference))}) [reference subject] [subject reference]) int-comparison ($_ _.and -- cgit v1.2.3