Rebol [ Date: 13-Nov-2005/10:13:46+1:00 Title: "RC tests" Author: "Ladislav Mecir" Type: 'test Purpose: {Advanced opcode coverage} ] ni: ask "Verbose Output? (y/N)? " verbose: find/match ni "y" lc: ask "Number of loops (ENTER = 1, . = forever)? " repeat-count: either empty? lc [1] [ either lc = "." [999'999'999][load lc] ] datatype-examples: reduce [ :abs ; action! datatype! action! #{1234} ; binary! datatype! binary! charset "123" ; bitset! datatype! bitset! [1 2 3] ; block! datatype! block! #"1" ; char! datatype! char! :integer! ; datatype! datatype! datatype! 14-Oct-2005/8:17:45+2:00 ; date! datatype! date! 12.35 ; decimal! datatype! decimal! dont@spam.me ; email! datatype! email! ; error! datatype! error! ; event! datatype! event! %a/b/c/abc.def ; file! datatype! file! func [a] [123] ; function! datatype! function! first [:abc] ; get-word! datatype! get-word! make hash! [1 2 3] ; hash! datatype! hash! ( img: make image! [2x2] img/1: 255.0.0.0 img/2: 0.255.0.0 img/3: 0.0.255.0 img/4: 0.0.0.255 img ) ; image! datatype! image! 123 ; integer! datatype! integer! #123 ; issue! datatype! issue! ; library! datatype! library! make list! [1 2 3] ; list! datatype! list! first ['a/b/c] ; lit-path! datatype! lit-path! first ['word] ; lit-word! datatype! lit-word! true ; logic! datatype! logic! US$1.50 ; money! datatype! money! :type? ; native! datatype! native! none ; none! datatype! none! make object! [a: 123] ; object! datatype! object! :+ ; op! datatype! op! 1x2 ; pair! datatype! pair! first [(123)] ; paren! datatype! paren! 'a/b/c ; path! datatype! path! ; percent! datatype! percent! ; port! datatype! port! adds: rebcode [a b] [ add.i a b return a ] ; rebcode! datatype! rebcode! /refinement ; refinement! datatype! refinement! ; routine! datatype! routine! first [a/b/c:] ; set-path! datatype! set-path! first [abc:] ; set-word! datatype! set-word! "123" ; string! datatype! string! ; struct! datatype! struct! ; symbol! datatype! symbol! <123> ; tag! datatype! tag! 9:10 ; time! datatype! time! 1.2.3 ; tuple! datatype! tuple! ; unicode! datatype! unicode! () ; unset! datatype! unset! http://a.b.c ; url! datatype! url! ; vector! datatype! vector! ; word! datatype! word! ] substitute: func [ {substitute values for variables in a block prototype} prototype [block! paren!] variables [block!] /local result value word position err ] [ result: make prototype length? prototype parse prototype [ any [ set value [block! | paren!] ( insert/only tail result substitute value variables ) | set value get-word! ( either word: find variables to word! value [ insert/only tail result get/any first word ] [insert/only tail result value] ) | set value word! position: ( if word: find variables to word! value [ change position: back position first word set/any [value position] do/next :position ] insert tail result value ) :position | set value skip (insert/only tail result get/any 'value) ] ] result ] generate-test: func [ prototype [block!] variables [block!] values [block!] /local generated-tests add-test ] [ generated-tests: copy [] add-test: func [a-test] [ append generated-tests compose/deep [ set testing [(a-test)] (either verbose [[?? testing]] [[]]) (a-test) braf fail ] ] foreach :variables values compose/deep [ add-test substitute prototype [(variables)] ] generated-tests ] combine: func [ {Cartesian product of blocks} [catch] block1 [block!] n1 [integer!] block2 [block!] n2 [integer!] /local result k1 k2 b2 part ] [ unless zero? (length? block1) // n1 [ throw make error! "combine: length of block1 not divisible by n1" ] unless zero? (length? block2) // n2 [ throw make error! "combine: length of block2 not divisible by n2" ] k1: (length? block1) / n1 k2: (length? block2) / n2 result: make block! n1 + n2 * k1 * k2 while [not tail? block1] [ part: copy/part block1 n1 b2: block2 while [not tail? b2] [ insert tail result part insert tail result copy/part b2 n2 b2: skip b2 n2 ] block1: skip block1 n1 ] result ] comment [ ; testing test functions ; substitution test x: 11 substitute [x] [x] ; == [11] ; generation test tests: generate-test [ set variable value eq.i variable 1 ] [value] [1 2] probe tests ; complex generation test tests: substitute [ generate-test [ set variable value eq.i variable 1 ] [value] [1 2] return "OK" label fail do discard [print ["test:" mold testing "failed"] halt] ] [generate-test] ; Cartesian product test combine [1 2 3 4] 2 [a b c d] 2 ; == [1 2 a b 1 2 c d 3 4 a b 3 4 c d] combine [1 2 3 4] 1 [a b c d] 2 ; == [1 a b 1 c d 2 a b 2 c d 3 a b 3 c d 4 a b 4 c d] ] ints: reduce [0 1 -1 to-integer #7fffffff to-integer #80000000] decs: [-1e308 -1.1 -1.0 -1e-308 0.0 1e-308 1.0 1.1 1e308] time: func [b /local start] [ start: now/precise do b print ["Time:" difference now/precise start] ] print "Testing..." rc: rebcode ["Test Code" /local a b c d i j k f] substitute [ repeat count repeat-count [ ; brat test generate-test [ sett true brat :value bra fail print "Should not print!" label brat-end ] [value] [brat-end] generate-test [ sett true brat :value bra fail print "Should not print!" label brat2-end ] [value] [4] ; braf test generate-test [ sett false braf :value bra fail print "Should not print!" label braf-end sett true ] [value] [braf-end] generate-test [ sett false braf :value bra fail print "Should not print!" sett true ] [value] [4] ; bra test generate-test [ bra 9 print "Should not print" label bra-first set i 1 bra bra-second bra :value bra fail print "Should not print!" label bra-second sett true ] [value] [bra-first] generate-test [ bra 7 print "Should not print" set i 1 bra 6 bra :value bra fail print "Should not print!" sett true ] [value] [4 -7] ; brab tests generate-test [ set i :value brab [l0 l1] i bra fail label l0 bra l3 label l1 bra fail label l3 sett true ] [value] [0] generate-test [ set i :value brab [k0 k1] i bra fail label k0 bra fail label k1 sett true ] [value] [1] generate-test [ set i :value brab :blk i bra fail sett true ] [value blk] [0 [2 0] 1 [0 2]] ; set integer tests generate-test [ set a :value eq.i a a ] [value] ints ; set logic tests generate-test [ set a :value eq.i a a ] [value] [true false] generate-test [ set a :value1 eq.i a :value2 brat fail sett true ] [value1 value2] [ true false false true ] ; set and type? tests generate-test [ set a :value type? c a eq.i b word! brat fail sett true ] [value] datatype-examples generate-test [ set a :value set b :datatype type? c a eq.i b c ] [value datatype] ( z: [] foreach value datatype-examples [ insert/only tail z get/any 'value insert/only tail z type? get/any 'value ] z ) ; set.i tests generate-test [ set.i i :value eq.i i i ] [value] ints generate-test [ set i :value eq.i i :value ] [value] ints ; set.d tests set d 0.0 generate-test [ set.d d :value eq.d d d ] [value] decs generate-test [ set.d d :value eq.d d :value ] [value] decs ; sett and gett tests generate-test [ set a :value sett a :branch fail sett true ] [value branch] [true braf false brat] generate-test [ set a :value sett a gett b eq.i b a ] [value] [true false] ; getw tests generate-test [ set a [i] pick j a 1 set i :value getw k j eq.i k :value ] [value] ints ;setw tests generate-test [ set a [i] pick j a 1 setw j :value eq.i i :value ] [value] ints ; comment test generate-test [ comment [] sett true ] [value] [1] ; escape? test generate-test [ escape? sett true ] [value] [1] ; apply, return and recursion tests generate-test [ set z :function apply a z :args set b :result eq.i a b ] [function args result] reduce [ :abs [-1] 1 rebcode [i] [add.i i 1 return i] [1] 2 rebcode [] [return -1] [] -1 rebcode [i /local j] [eq.i i 0 braf 2 return 3 apply j z [0]] [0] 3 rebcode [i /local j] [eq.i i 0 braf 2 return 3 apply j z [0] return j] [1] 3 ] generate-test [ set z :function set b :args apply a z b set b :result eq.i a b ] [function args result] reduce [ :abs [-1] 1 rebcode [i] [add.i i 1 return i] [1] 2 rebcode [] [return -1] [] -1 rebcode [i /local j] [eq.i i 0 braf 2 return 3 apply j z [0]] [0] 3 rebcode [i /local j] [eq.i i 0 braf 2 return 3 apply j z [0] return j] [1] 3 ] ; exit test generate-test [ set f :function apply a f [] eq.i z :result ] [function result] reduce [ rebcode [] [set z 1 exit set z 2] 1 rebcode [] [set z 2 exit set z 1] 2 ] ; do test generate-test [ do i [1 - 1] eq.i i 0 ] [value] [1] ; break* tests generate-test [ repeat j 2 [ set i j sett :value :brk ] eq.i i :result ] [value brk result] [ true breakt 1 false breakf 1 true breakf 2 false breakt 2 ] ; ift and iff tests generate-test [ set a :g2 sett :value :tst [set a :g1] sett a ] [value tst g1 g2] [ true ift true false false iff true false true iff false true false ift false true ] ; either test generate-test [ set a :value sett a either [set b true] [set b false] eq.i a b ] [value] reduce [true false] ; integer operators generate-test [ set i :value1 :op i :value2 eq.i i :result ] [op value1 value2 result] reduce [ 'add.i to-integer #80000000 0 to-integer #80000000 'add.i to-integer #80000000 1 to-integer #80000001 'add.i to-integer #80000000 to-integer #7fffffff -1 'add.i to-integer #80000001 -1 to-integer #80000000 'add.i to-integer #c0000000 to-integer #c0000000 to-integer #80000000 'add.i -1 to-integer #80000001 to-integer #80000000 'add.i -1 -1 -2 'add.i -1 0 -1 'add.i -1 1 0 'add.i -1 to-integer #7fffffff to-integer #7ffffffe 'add.i 0 to-integer #80000000 to-integer #80000000 'add.i 0 -1 -1 'add.i 0 0 0 'add.i 0 1 1 'add.i 0 to-integer #7fffffff to-integer #7fffffff 'add.i 1 to-integer #80000000 to-integer #80000001 'add.i 1 -1 0 'add.i 1 0 1 'add.i 1 1 2 'add.i 1 to-integer #7ffffffe to-integer #7fffffff 'add.i to-integer #3fffffff to-integer #3fffffff to-integer #7ffffffe 'add.i to-integer #7ffffffe 1 to-integer #7fffffff 'add.i to-integer #7fffffff to-integer #80000000 -1 'add.i to-integer #7fffffff -1 to-integer #7ffffffe 'add.i to-integer #7fffffff 0 to-integer #7fffffff 'sub.i to-integer #80000000 to-integer #80000000 0 'sub.i to-integer #80000000 -1 to-integer #80000001 'sub.i to-integer #80000000 0 to-integer #80000000 'sub.i to-integer #80000001 1 to-integer #80000000 'sub.i to-integer #c0000000 to-integer #40000000 to-integer #80000000 'sub.i -1 to-integer #80000000 to-integer #7fffffff 'sub.i -1 -1 0 'sub.i -1 0 -1 'sub.i -1 1 -2 'sub.i -1 to-integer #7fffffff to-integer #80000000 'sub.i 0 to-integer #80000001 to-integer #7fffffff 'sub.i 0 -1 1 'sub.i 0 0 0 'sub.i 0 1 -1 'sub.i 0 to-integer #7fffffff to-integer #80000001 'sub.i 1 to-integer #80000002 to-integer #7fffffff 'sub.i 1 0 1 'sub.i 1 -1 2 'sub.i 1 1 0 'sub.i to-integer #3fffffff to-integer #c0000001 to-integer #7ffffffe 'sub.i to-integer #7ffffffe -1 to-integer #7fffffff 'sub.i to-integer #7fffffff 0 to-integer #7fffffff 'sub.i to-integer #7fffffff 1 to-integer #7ffffffe 'sub.i to-integer #7fffffff to-integer #7fffffff 0 'mul.i to-integer #80000000 0 0 'mul.i to-integer #80000000 1 to-integer #80000000 'mul.i to-integer #ffff8000 to-integer #ffff0001 to-integer #7fff8000 'mul.i -1 to-integer #80000001 to-integer #7fffffff 'mul.i -1 -1 1 'mul.i -1 0 0 'mul.i -1 1 -1 'mul.i -1 to-integer #7fffffff to-integer #80000001 'mul.i 0 to-integer #80000000 0 'mul.i 0 -1 0 'mul.i 0 0 0 'mul.i 0 1 0 'mul.i 0 to-integer #7fffffff 0 'mul.i 1 to-integer #80000000 to-integer #80000000 'mul.i 1 -1 -1 'mul.i 1 0 0 'mul.i 1 1 1 'mul.i 1 to-integer #7fffffff to-integer #7fffffff 'mul.i to-integer #00008000 to-integer #0000ffff to-integer #7fff8000 'mul.i to-integer #0000ffff to-integer #00008000 to-integer #7fff8000 'mul.i to-integer #ffff0001 to-integer #ffff8000 to-integer #7fff8000 'mul.i to-integer #7fffffff 0 0 'mul.i to-integer #7fffffff 1 to-integer #7fffffff 'mul.i to-integer #ffff0001 to-integer #00008000 to-integer #80008000 'mul.i to-integer #00008000 to-integer #ffff0001 to-integer #80008000 'div.i to-integer #80000000 to-integer #80000000 1 'div.i to-integer #80000000 1 to-integer #80000000 'div.i to-integer #80000001 -1 to-integer #7fffffff 'div.i to-integer #80008000 to-integer #ffff0001 to-integer #00008000 'div.i to-integer #80008000 to-integer #00008000 to-integer #ffff0001 'div.i -1 -1 1 'div.i -1 1 -1 'div.i 0 to-integer #80000000 0 'div.i 0 -1 0 'div.i 0 1 0 'div.i 0 to-integer #7fffffff 0 'div.i 1 -1 -1 'div.i 1 1 1 'div.i 23 12 1 'div.i to-integer #7fff8000 to-integer #0000ffff to-integer #00008000 'div.i to-integer #7fff8000 to-integer #00008000 to-integer #0000ffff 'div.i to-integer #7fff8000 to-integer #ffff0001 to-integer #ffff8000 'div.i to-integer #7fff8000 to-integer #ffff8000 to-integer #ffff0001 'div.i to-integer #7fffffff -1 to-integer #80000001 'div.i to-integer #7fffffff 1 to-integer #7fffffff 'div.i to-integer #7fffffff to-integer #7fffffff 1 'rem.i to-integer #80000000 to-integer #80000000 0 ; this crashes: 'rem.i to-integer #80000000 -1 0 'rem.i to-integer #80000000 1 0 'rem.i to-integer #80000000 to-integer #7fffffff -1 'rem.i -23 12 -11 'rem.i -22 12 -10 'rem.i -21 12 -9 'rem.i -20 12 -8 'rem.i -19 12 -7 'rem.i -18 12 -6 'rem.i -17 12 -5 'rem.i -16 -12 -4 'rem.i -16 12 -4 'rem.i -15 12 -3 'rem.i -14 12 -2 'rem.i -13 12 -1 'rem.i -12 12 0 'rem.i -1 to-integer #80000000 -1 'rem.i -1 -1 0 'rem.i -1 1 0 'rem.i -1 to-integer #7fffffff -1 'rem.i 0 to-integer #80000000 0 'rem.i 0 -1 0 'rem.i 0 1 0 'rem.i 0 to-integer #7fffffff 0 'rem.i 1 to-integer #80000000 1 'rem.i 1 -1 0 'rem.i 1 1 0 'rem.i 1 to-integer #7fffffff 1 'rem.i 12 12 0 'rem.i 13 12 1 'rem.i 14 12 2 'rem.i 15 12 3 'rem.i 16 -12 4 'rem.i 16 12 4 'rem.i 17 12 5 'rem.i 18 12 6 'rem.i 19 12 7 'rem.i 20 12 8 'rem.i 21 12 9 'rem.i 22 12 10 'rem.i 23 -12 11 'rem.i 23 12 11 'rem.i to-integer #7fffffff to-integer #80000000 to-integer #7fffffff 'rem.i to-integer #7fffffff -1 0 'rem.i to-integer #7fffffff 1 0 'rem.i to-integer #7fffffff to-integer #7fffffff 0 'max.i to-integer #80000000 to-integer #80000000 to-integer #80000000 'max.i to-integer #80000000 -1 -1 'max.i to-integer #80000000 0 0 'max.i to-integer #80000000 1 1 'max.i to-integer #80000000 to-integer #7fffffff to-integer #7fffffff 'max.i -1 to-integer #80000000 -1 'max.i -1 -1 -1 'max.i -1 0 0 'max.i -1 1 1 'max.i -1 to-integer #7fffffff to-integer #7fffffff 'max.i 0 to-integer #80000000 0 'max.i 0 -1 0 'max.i 0 0 0 'max.i 0 1 1 'max.i 0 to-integer #7fffffff to-integer #7fffffff 'max.i 1 to-integer #80000000 1 'max.i 1 -1 1 'max.i 1 0 1 'max.i 1 1 1 'max.i 1 to-integer #7fffffff to-integer #7fffffff 'max.i to-integer #7fffffff to-integer #80000000 to-integer #7fffffff 'max.i to-integer #7fffffff -1 to-integer #7fffffff 'max.i to-integer #7fffffff 0 to-integer #7fffffff 'max.i to-integer #7fffffff 1 to-integer #7fffffff 'max.i to-integer #7fffffff to-integer #7fffffff to-integer #7fffffff 'min.i to-integer #80000000 to-integer #80000000 to-integer #80000000 'min.i to-integer #80000000 -1 to-integer #80000000 'min.i to-integer #80000000 0 to-integer #80000000 'min.i to-integer #80000000 1 to-integer #80000000 'min.i to-integer #80000000 to-integer #7fffffff to-integer #80000000 'min.i -1 to-integer #80000000 to-integer #80000000 'min.i -1 -1 -1 'min.i -1 0 -1 'min.i -1 1 -1 'min.i -1 to-integer #7fffffff -1 'min.i 0 to-integer #80000000 to-integer #80000000 'min.i 0 -1 -1 'min.i 0 0 0 'min.i 0 1 0 'min.i 0 to-integer #7fffffff 0 'min.i 1 to-integer #80000000 to-integer #80000000 'min.i 1 -1 -1 'min.i 1 0 0 'min.i 1 1 1 'min.i 1 to-integer #7fffffff 1 'min.i to-integer #7fffffff to-integer #80000000 to-integer #80000000 'min.i to-integer #7fffffff -1 -1 'min.i to-integer #7fffffff 0 0 'min.i to-integer #7fffffff 1 1 'min.i to-integer #7fffffff to-integer #7fffffff to-integer #7fffffff 'and to-integer #80000000 to-integer #80000000 to-integer #80000000 'and to-integer #80000000 -1 to-integer #80000000 'and to-integer #80000000 0 0 'and to-integer #80000000 1 0 'and to-integer #80000000 to-integer #7fffffff 0 'and -1 to-integer #80000000 to-integer #80000000 'and -1 -1 -1 'and -1 0 0 'and -1 1 1 'and -1 to-integer #7fffffff to-integer #7fffffff 'and 0 to-integer #80000000 0 'and 0 -1 0 'and 0 0 0 'and 0 1 0 'and 0 to-integer #7fffffff 0 'and 1 to-integer #80000000 0 'and 1 -1 1 'and 1 0 0 'and 1 1 1 'and 1 to-integer #7fffffff 1 'and to-integer #7fffffff to-integer #80000000 0 'and to-integer #7fffffff -1 to-integer #7fffffff 'and to-integer #7fffffff 0 0 'and to-integer #7fffffff 1 1 'and to-integer #7fffffff to-integer #7fffffff to-integer #7fffffff 'and 'false 'false 'false 'and 'false 'true 'false 'and 'true 'false 'false 'and 'true 'true 'true 'or to-integer #80000000 to-integer #80000000 to-integer #80000000 'or to-integer #80000000 -1 -1 'or to-integer #80000000 0 to-integer #80000000 'or to-integer #80000000 1 to-integer #80000001 'or to-integer #80000000 to-integer #7fffffff -1 'or -1 to-integer #80000000 -1 'or -1 -1 -1 'or -1 0 -1 'or -1 1 -1 'or -1 to-integer #7fffffff -1 'or 0 to-integer #80000000 to-integer #80000000 'or 0 -1 -1 'or 0 0 0 'or 0 1 1 'or 0 to-integer #7fffffff to-integer #7fffffff 'or 1 to-integer #80000000 to-integer #80000001 'or 1 -1 -1 'or 1 0 1 'or 1 1 1 'or 1 to-integer #7fffffff to-integer #7fffffff 'or to-integer #7fffffff to-integer #80000000 -1 'or to-integer #7fffffff -1 -1 'or to-integer #7fffffff 0 to-integer #7fffffff 'or to-integer #7fffffff 1 to-integer #7fffffff 'or to-integer #7fffffff to-integer #7fffffff to-integer #7fffffff 'or 'false 'false 'false 'or 'false 'true 'true 'or 'true 'false 'true 'or 'true 'true 'true 'xor to-integer #80000000 to-integer #80000000 0 'xor to-integer #80000000 -1 to-integer #7fffffff 'xor to-integer #80000000 0 to-integer #80000000 'xor to-integer #80000000 1 to-integer #80000001 'xor to-integer #80000000 to-integer #7fffffff -1 'xor -1 to-integer #80000000 to-integer #7fffffff 'xor -1 -1 0 'xor -1 0 -1 'xor -1 1 -2 'xor -1 to-integer #7fffffff to-integer #80000000 'xor 0 to-integer #80000000 to-integer #80000000 'xor 0 -1 -1 'xor 0 0 0 'xor 0 1 1 'xor 0 to-integer #7fffffff to-integer #7fffffff 'xor 1 to-integer #80000000 to-integer #80000001 'xor 1 -1 -2 'xor 1 0 1 'xor 1 1 0 'xor 1 to-integer #7fffffff to-integer #7ffffffe 'xor to-integer #7fffffff to-integer #80000000 -1 'xor to-integer #7fffffff -1 to-integer #80000000 'xor to-integer #7fffffff 0 to-integer #7fffffff 'xor to-integer #7fffffff 1 to-integer #7ffffffe 'xor to-integer #7fffffff to-integer #7fffffff 0 'xor 'false 'false 'false 'xor 'false 'true 'true 'xor 'true 'false 'true 'xor 'true 'true 'false 'lsl to-integer #80000000 0 to-integer #80000000 'lsl to-integer #80000000 1 0 'lsl to-integer #80000000 2 0 'lsl to-integer #80000000 30 0 'lsl to-integer #80000000 31 0 'lsl -1 0 -1 'lsl -1 1 -2 'lsl -1 2 -4 'lsl -1 30 to-integer #c0000000 'lsl -1 31 to-integer #80000000 'lsl 0 0 0 'lsl 0 1 0 'lsl 0 2 0 'lsl 0 30 0 'lsl 0 31 0 'lsl 1 0 1 'lsl 1 1 2 'lsl 1 2 4 'lsl 1 30 to-integer #40000000 'lsl 1 31 to-integer #80000000 'lsl to-integer #7fffffff 0 to-integer #7fffffff 'lsl to-integer #7fffffff 1 to-integer #fffffffe 'lsl to-integer #7fffffff 2 to-integer #fffffffc 'lsl to-integer #7fffffff 30 to-integer #c0000000 'lsl to-integer #7fffffff 31 to-integer #80000000 'lsr to-integer #80000000 0 to-integer #80000000 'lsr to-integer #80000000 1 to-integer #c0000000 'lsr to-integer #80000000 2 to-integer #e0000000 'lsr to-integer #80000000 30 -2 'lsr to-integer #80000000 31 -1 'lsr -1 0 -1 'lsr -1 1 -1 'lsr -1 2 -1 'lsr -1 30 -1 'lsr -1 31 -1 'lsr 0 0 0 'lsr 0 1 0 'lsr 0 2 0 'lsr 0 30 0 'lsr 0 31 0 'lsr 1 0 1 'lsr 1 1 0 'lsr 1 2 0 'lsr 1 30 0 'lsr 1 31 0 'lsr to-integer #7fffffff 0 to-integer #7fffffff 'lsr to-integer #7fffffff 1 to-integer #3fffffff 'lsr to-integer #7fffffff 2 to-integer #1fffffff 'lsr to-integer #7fffffff 30 1 'lsr to-integer #7fffffff 31 0 'rotl to-integer #80000000 0 to-integer #80000000 'rotl to-integer #80000000 1 1 'rotl to-integer #80000000 2 2 'rotl to-integer #80000000 30 to-integer #20000000 'rotl to-integer #80000000 31 to-integer #40000000 'rotl -1 0 -1 'rotl -1 1 -1 'rotl -1 2 -1 'rotl -1 30 -1 'rotl -1 31 -1 'rotl 0 0 0 'rotl 0 1 0 'rotl 0 2 0 'rotl 0 30 0 'rotl 0 31 0 'rotl 1 0 1 'rotl 1 1 2 'rotl 1 2 4 'rotl 1 30 to-integer #40000000 'rotl 1 31 to-integer #80000000 'rotl to-integer #7fffffff 0 to-integer #7fffffff 'rotl to-integer #7fffffff 1 to-integer #fffffffe 'rotl to-integer #7fffffff 2 to-integer #fffffffd 'rotl to-integer #7fffffff 30 to-integer #dfffffff 'rotl to-integer #7fffffff 31 to-integer #bfffffff 'rotr to-integer #80000000 0 to-integer #80000000 'rotr to-integer #80000000 1 to-integer #40000000 'rotr to-integer #80000000 2 to-integer #20000000 'rotr to-integer #80000000 30 to-integer 2 'rotr to-integer #80000000 31 1 'rotr -1 0 -1 'rotr -1 1 -1 'rotr -1 2 -1 'rotr -1 30 -1 'rotr -1 31 -1 'rotr 0 0 0 'rotr 0 1 0 'rotr 0 2 0 'rotr 0 30 0 'rotr 0 31 0 'rotr 1 0 1 'rotr 1 1 to-integer #80000000 'rotr 1 2 to-integer #40000000 'rotr 1 30 4 'rotr 1 31 2 'rotr to-integer #7fffffff 0 to-integer #7fffffff 'rotr to-integer #7fffffff 1 to-integer #bfffffff 'rotr to-integer #7fffffff 2 to-integer #dfffffff 'rotr to-integer #7fffffff 30 to-integer #fffffffd 'rotr to-integer #7fffffff 31 to-integer #fffffffe ] ; unary operators - integer generate-test [ set i :value :op i eq.i i :result ] [op value result] reduce [ 'abs.i -1 1 'abs.i 0 0 'abs.i 1 1 'abs.i to-integer #7fffffff to-integer #7fffffff 'neg.i -1 1 'neg.i 0 0 'neg.i 1 -1 'neg.i to-integer #7fffffff to-integer #80000001 'bswap to-integer #80000000 to-integer #00000080 'bswap -1 -1 'bswap 0 0 'bswap 1 to-integer #01000000 'bswap to-integer #00000080 to-integer #80000000 'bswap to-integer #01000000 1 'bswap to-integer #ffffff7f to-integer #7fffffff 'bswap to-integer #7fffffff to-integer #ffffff7f 'cmpl to-integer #80000000 to-integer #7fffffff 'cmpl -1 0 'cmpl 0 -1 'cmpl 1 to-integer #fffffffe 'cmpl to-integer #fffffffe 1 'cmpl to-integer #7fffffff to-integer #80000000 'ext16 0 0 'ext16 1 1 'ext16 255 255 'ext16 32767 32767 'ext16 32768 -32768 'ext16 65535 -1 'ext8 0 0 'ext8 1 1 'ext8 127 127 'ext8 128 -128 'ext8 255 -1 'to-int -2147483648.0 -2147483648 'to-int -1.0 -1 'to-int 0.0 0 'to-int 1.0 1 'to-int 2147483647.0 2147483647 'not 'true 'false 'not 'false 'true ] ; T flag unary operators generate-test [ set a :value type? b a print b :op a gett b eq.i b :result ] [op value result] reduce [ 'value? 'undefined 'false 'value? 'system 'true 'past? [] 'false 'past? [1 2 3] 'false 'past? (past-var: tail [1 2 3] clear head past-var 'past-var) 'true 'head? [] 'true 'head? tail [1 2 3] 'false 'head? [1 2 3] 'true 'tail? [] 'true 'tail? tail [1 2 3] 'true 'tail? [1 2 3] 'false ] ; comparison operators generate-test [ set a :value1 :op a :value2 gett b eq.i b :result ] [op value1 value2 result] reduce [ 'eq.i to-integer #80000000 to-integer #80000000 'true 'eq.i to-integer #80000000 -1 'false 'eq.i to-integer #80000000 0 'false 'eq.i to-integer #80000000 1 'false 'eq.i to-integer #80000000 to-integer #7fffffff 'false 'eq.i -1 to-integer #80000000 'false 'eq.i -1 -1 'true 'eq.i -1 0 'false 'eq.i -1 1 'false 'eq.i -1 to-integer #7fffffff 'false 'eq.i 0 to-integer #80000000 'false 'eq.i 0 -1 'false 'eq.i 0 0 'true 'eq.i 0 1 'false 'eq.i 0 to-integer #7fffffff 'false 'eq.i 1 to-integer #80000000 'false 'eq.i 1 -1 'false 'eq.i 1 0 'false 'eq.i 1 1 'true 'eq.i 1 to-integer #7fffffff 'false 'eq.i to-integer #7fffffff to-integer #80000000 'false 'eq.i to-integer #7fffffff -1 'false 'eq.i to-integer #7fffffff 0 'false 'eq.i to-integer #7fffffff 1 'false 'eq.i to-integer #7fffffff to-integer #7fffffff 'true 'neq.i to-integer #80000000 to-integer #80000000 'false 'neq.i to-integer #80000000 -1 'true 'neq.i to-integer #80000000 0 'true 'neq.i to-integer #80000000 1 'true 'neq.i to-integer #80000000 to-integer #7fffffff 'true 'neq.i -1 to-integer #80000000 'true 'neq.i -1 -1 'false 'neq.i -1 0 'true 'neq.i -1 1 'true 'neq.i -1 to-integer #7fffffff 'true 'neq.i 0 to-integer #80000000 'true 'neq.i 0 -1 'true 'neq.i 0 0 'false 'neq.i 0 1 'true 'neq.i 0 to-integer #7fffffff 'true 'neq.i 1 to-integer #80000000 'true 'neq.i 1 -1 'true 'neq.i 1 0 'true 'neq.i 1 1 'false 'neq.i 1 to-integer #7fffffff 'true 'neq.i to-integer #7fffffff to-integer #80000000 'true 'neq.i to-integer #7fffffff -1 'true 'neq.i to-integer #7fffffff 0 'true 'neq.i to-integer #7fffffff 1 'true 'neq.i to-integer #7fffffff to-integer #7fffffff 'false 'gt.i to-integer #80000000 to-integer #80000000 'false 'gt.i to-integer #80000000 -1 'false 'gt.i to-integer #80000000 0 'false 'gt.i to-integer #80000000 1 'false 'gt.i to-integer #80000000 to-integer #7fffffff 'false 'gt.i -1 to-integer #80000000 'true 'gt.i -1 -1 'false 'gt.i -1 0 'false 'gt.i -1 1 'false 'gt.i -1 to-integer #7fffffff 'false 'gt.i 0 to-integer #80000000 'true 'gt.i 0 -1 'true 'gt.i 0 0 'false 'gt.i 0 1 'false 'gt.i 0 to-integer #7fffffff 'false 'gt.i 1 to-integer #80000000 'true 'gt.i 1 -1 'true 'gt.i 1 0 'true 'gt.i 1 1 'false 'gt.i 1 to-integer #7fffffff 'false 'gt.i to-integer #7fffffff to-integer #80000000 'true 'gt.i to-integer #7fffffff -1 'true 'gt.i to-integer #7fffffff 0 'true 'gt.i to-integer #7fffffff 1 'true 'gt.i to-integer #7fffffff to-integer #7fffffff 'false 'gteq.i to-integer #80000000 to-integer #80000000 'true 'gteq.i to-integer #80000000 -1 'false 'gteq.i to-integer #80000000 0 'false 'gteq.i to-integer #80000000 1 'false 'gteq.i to-integer #80000000 to-integer #7fffffff 'false 'gteq.i -1 to-integer #80000000 'true 'gteq.i -1 -1 'true 'gteq.i -1 0 'false 'gteq.i -1 1 'false 'gteq.i -1 to-integer #7fffffff 'false 'gteq.i 0 to-integer #80000000 'true 'gteq.i 0 -1 'true 'gteq.i 0 0 'true 'gteq.i 0 1 'false 'gteq.i 0 to-integer #7fffffff 'false 'gteq.i 1 to-integer #80000000 'true 'gteq.i 1 -1 'true 'gteq.i 1 0 'true 'gteq.i 1 1 'true 'gteq.i 1 to-integer #7fffffff 'false 'gteq.i to-integer #7fffffff to-integer #80000000 'true 'gteq.i to-integer #7fffffff -1 'true 'gteq.i to-integer #7fffffff 0 'true 'gteq.i to-integer #7fffffff 1 'true 'gteq.i to-integer #7fffffff to-integer #7fffffff 'true 'lt.i to-integer #80000000 to-integer #80000000 'false 'lt.i to-integer #80000000 -1 'true 'lt.i to-integer #80000000 0 'true 'lt.i to-integer #80000000 1 'true 'lt.i to-integer #80000000 to-integer #7fffffff 'true 'lt.i -1 to-integer #80000000 'false 'lt.i -1 -1 'false 'lt.i -1 0 'true 'lt.i -1 1 'true 'lt.i -1 to-integer #7fffffff 'true 'lt.i 0 to-integer #80000000 'false 'lt.i 0 -1 'false 'lt.i 0 0 'false 'lt.i 0 1 'true 'lt.i 0 to-integer #7fffffff 'true 'lt.i 1 to-integer #80000000 'false 'lt.i 1 -1 'false 'lt.i 1 0 'false 'lt.i 1 1 'false 'lt.i 1 to-integer #7fffffff 'true 'lt.i to-integer #7fffffff to-integer #80000000 'false 'lt.i to-integer #7fffffff -1 'false 'lt.i to-integer #7fffffff 0 'false 'lt.i to-integer #7fffffff 1 'false 'lt.i to-integer #7fffffff to-integer #7fffffff 'false 'lteq.i to-integer #80000000 to-integer #80000000 'true 'lteq.i to-integer #80000000 -1 'true 'lteq.i to-integer #80000000 0 'true 'lteq.i to-integer #80000000 1 'true 'lteq.i to-integer #80000000 to-integer #7fffffff 'true 'lteq.i -1 to-integer #80000000 'false 'lteq.i -1 -1 'true 'lteq.i -1 0 'true 'lteq.i -1 1 'true 'lteq.i -1 to-integer #7fffffff 'true 'lteq.i 0 to-integer #80000000 'false 'lteq.i 0 -1 'false 'lteq.i 0 0 'true 'lteq.i 0 1 'true 'lteq.i 0 to-integer #7fffffff 'true 'lteq.i 1 to-integer #80000000 'false 'lteq.i 1 -1 'false 'lteq.i 1 0 'false 'lteq.i 1 1 'true 'lteq.i 1 to-integer #7fffffff 'true 'lteq.i to-integer #7fffffff to-integer #80000000 'false 'lteq.i to-integer #7fffffff -1 'false 'lteq.i to-integer #7fffffff 0 'false 'lteq.i to-integer #7fffffff 1 'false 'lteq.i to-integer #7fffffff to-integer #7fffffff 'true 'eq.d -1e308 -1e308 'true 'eq.d -1e308 -1.1 'false 'eq.d -1e308 -1.0 'false 'eq.d -1e308 -1e-308 'false 'eq.d -1e308 0.0 'false 'eq.d -1e308 1e-308 'false 'eq.d -1e308 1.0 'false 'eq.d -1e308 1.1 'false 'eq.d -1e308 1e308 'false 'eq.d -1.1 -1e308 'false 'eq.d -1.1 -1.1 'true 'eq.d -1.1 -1.0 'false 'eq.d -1.1 -1e-308 'false 'eq.d -1.1 0.0 'false 'eq.d -1.1 1e-308 'false 'eq.d -1.1 1.0 'false 'eq.d -1.1 1.1 'false 'eq.d -1.1 1e308 'false 'eq.d -1.0 -1e308 'false 'eq.d -1.0 -1.1 'false 'eq.d -1.0 -1.0 'true 'eq.d -1.0 -1e-308 'false 'eq.d -1.0 0.0 'false 'eq.d -1.0 1e-308 'false 'eq.d -1.0 1.0 'false 'eq.d -1.0 1.1 'false 'eq.d -1.0 1e308 'false 'eq.d -1e-308 -1e308 'false 'eq.d -1e-308 -1.1 'false 'eq.d -1e-308 -1.0 'false 'eq.d -1e-308 -1e-308 'true 'eq.d -1e-308 0.0 'false 'eq.d -1e-308 1e-308 'false 'eq.d -1e-308 1.0 'false 'eq.d -1e-308 1.1 'false 'eq.d -1e-308 1e308 'false 'eq.d 0.0 -1e308 'false 'eq.d 0.0 -1.1 'false 'eq.d 0.0 -1.0 'false 'eq.d 0.0 -1e-308 'false 'eq.d 0.0 0.0 'true 'eq.d 0.0 1e-308 'false 'eq.d 0.0 1.0 'false 'eq.d 0.0 1.1 'false 'eq.d 0.0 1e308 'false 'eq.d 1e-308 -1e308 'false 'eq.d 1e-308 -1.1 'false 'eq.d 1e-308 -1.0 'false 'eq.d 1e-308 -1e-308 'false 'eq.d 1e-308 0.0 'false 'eq.d 1e-308 1e-308 'true 'eq.d 1e-308 1.0 'false 'eq.d 1e-308 1.1 'false 'eq.d 1e-308 1e308 'false 'eq.d 1.0 -1e308 'false 'eq.d 1.0 -1.1 'false 'eq.d 1.0 -1.0 'false 'eq.d 1.0 -1e-308 'false 'eq.d 1.0 0.0 'false 'eq.d 1.0 1e-308 'false 'eq.d 1.0 1.0 'true 'eq.d 1.0 1.1 'false 'eq.d 1.0 1e308 'false 'eq.d 1.1 -1e308 'false 'eq.d 1.1 -1.1 'false 'eq.d 1.1 -1.0 'false 'eq.d 1.1 -1e-308 'false 'eq.d 1.1 0.0 'false 'eq.d 1.1 1e-308 'false 'eq.d 1.1 1.0 'false 'eq.d 1.1 1.1 'true 'eq.d 1.1 1e308 'false 'eq.d 1e308 -1e308 'false 'eq.d 1e308 -1.1 'false 'eq.d 1e308 -1.0 'false 'eq.d 1e308 -1e-308 'false 'eq.d 1e308 0.0 'false 'eq.d 1e308 1e-308 'false 'eq.d 1e308 1.0 'false 'eq.d 1e308 1.1 'false 'eq.d 1e308 1e308 'true 'neq.d -1e308 -1e308 'false 'neq.d -1e308 -1.1 'true 'neq.d -1e308 -1.0 'true 'neq.d -1e308 -1e-308 'true 'neq.d -1e308 0.0 'true 'neq.d -1e308 1e-308 'true 'neq.d -1e308 1.0 'true 'neq.d -1e308 1.1 'true 'neq.d -1e308 1e308 'true 'neq.d -1.1 -1e308 'true 'neq.d -1.1 -1.1 'false 'neq.d -1.1 -1.0 'true 'neq.d -1.1 -1e-308 'true 'neq.d -1.1 0.0 'true 'neq.d -1.1 1e-308 'true 'neq.d -1.1 1.0 'true 'neq.d -1.1 1.1 'true 'neq.d -1.1 1e308 'true 'neq.d -1.0 -1e308 'true 'neq.d -1.0 -1.1 'true 'neq.d -1.0 -1.0 'false 'neq.d -1.0 -1e-308 'true 'neq.d -1.0 0.0 'true 'neq.d -1.0 1e-308 'true 'neq.d -1.0 1.0 'true 'neq.d -1.0 1.1 'true 'neq.d -1.0 1e308 'true 'neq.d -1e-308 -1e308 'true 'neq.d -1e-308 -1.1 'true 'neq.d -1e-308 -1.0 'true 'neq.d -1e-308 -1e-308 'false 'neq.d -1e-308 0.0 'true 'neq.d -1e-308 1e-308 'true 'neq.d -1e-308 1.0 'true 'neq.d -1e-308 1.1 'true 'neq.d -1e-308 1e308 'true 'neq.d 0.0 -1e308 'true 'neq.d 0.0 -1.1 'true 'neq.d 0.0 -1.0 'true 'neq.d 0.0 -1e-308 'true 'neq.d 0.0 0.0 'false 'neq.d 0.0 1e-308 'true 'neq.d 0.0 1.0 'true 'neq.d 0.0 1.1 'true 'neq.d 0.0 1e308 'true 'neq.d 1e-308 -1e308 'true 'neq.d 1e-308 -1.1 'true 'neq.d 1e-308 -1.0 'true 'neq.d 1e-308 -1e-308 'true 'neq.d 1e-308 0.0 'true 'neq.d 1e-308 1e-308 'false 'neq.d 1e-308 1.0 'true 'neq.d 1e-308 1.1 'true 'neq.d 1e-308 1e308 'true 'neq.d 1.0 -1e308 'true 'neq.d 1.0 -1.1 'true 'neq.d 1.0 -1.0 'true 'neq.d 1.0 -1e-308 'true 'neq.d 1.0 0.0 'true 'neq.d 1.0 1e-308 'true 'neq.d 1.0 1.0 'false 'neq.d 1.0 1.1 'true 'neq.d 1.0 1e308 'true 'neq.d 1.1 -1e308 'true 'neq.d 1.1 -1.1 'true 'neq.d 1.1 -1.0 'true 'neq.d 1.1 -1e-308 'true 'neq.d 1.1 0.0 'true 'neq.d 1.1 1e-308 'true 'neq.d 1.1 1.0 'true 'neq.d 1.1 1.1 'false 'neq.d 1.1 1e308 'true 'neq.d 1e308 -1e308 'true 'neq.d 1e308 -1.1 'true 'neq.d 1e308 -1.0 'true 'neq.d 1e308 -1e-308 'true 'neq.d 1e308 0.0 'true 'neq.d 1e308 1e-308 'true 'neq.d 1e308 1.0 'true 'neq.d 1e308 1.1 'true 'neq.d 1e308 1e308 'false 'lteq.d -1e308 -1e308 'true 'lteq.d -1e308 -1.1 'true 'lteq.d -1e308 -1.0 'true 'lteq.d -1e308 -1e-308 'true 'lteq.d -1e308 0.0 'true 'lteq.d -1e308 1e-308 'true 'lteq.d -1e308 1.0 'true 'lteq.d -1e308 1.1 'true 'lteq.d -1e308 1e308 'true 'lteq.d -1.1 -1e308 'false 'lteq.d -1.1 -1.1 'true 'lteq.d -1.1 -1.0 'true 'lteq.d -1.1 -1e-308 'true 'lteq.d -1.1 0.0 'true 'lteq.d -1.1 1e-308 'true 'lteq.d -1.1 1.0 'true 'lteq.d -1.1 1.1 'true 'lteq.d -1.1 1e308 'true 'lteq.d -1.0 -1e308 'false 'lteq.d -1.0 -1.1 'false 'lteq.d -1.0 -1.0 'true 'lteq.d -1.0 -1e-308 'true 'lteq.d -1.0 0.0 'true 'lteq.d -1.0 1e-308 'true 'lteq.d -1.0 1.0 'true 'lteq.d -1.0 1.1 'true 'lteq.d -1.0 1e308 'true 'lteq.d -1e-308 -1e308 'false 'lteq.d -1e-308 -1.1 'false 'lteq.d -1e-308 -1.0 'false 'lteq.d -1e-308 -1e-308 'true 'lteq.d -1e-308 0.0 'true 'lteq.d -1e-308 1e-308 'true 'lteq.d -1e-308 1.0 'true 'lteq.d -1e-308 1.1 'true 'lteq.d -1e-308 1e308 'true 'lteq.d 0.0 -1e308 'false 'lteq.d 0.0 -1.1 'false 'lteq.d 0.0 -1.0 'false 'lteq.d 0.0 -1e-308 'false 'lteq.d 0.0 0.0 'true 'lteq.d 0.0 1e-308 'true 'lteq.d 0.0 1.0 'true 'lteq.d 0.0 1.1 'true 'lteq.d 0.0 1e308 'true 'lteq.d 1e-308 -1e308 'false 'lteq.d 1e-308 -1.1 'false 'lteq.d 1e-308 -1.0 'false 'lteq.d 1e-308 -1e-308 'false 'lteq.d 1e-308 0.0 'false 'lteq.d 1e-308 1e-308 'true 'lteq.d 1e-308 1.0 'true 'lteq.d 1e-308 1.1 'true 'lteq.d 1e-308 1e308 'true 'lteq.d 1.0 -1e308 'false 'lteq.d 1.0 -1.1 'false 'lteq.d 1.0 -1.0 'false 'lteq.d 1.0 -1e-308 'false 'lteq.d 1.0 0.0 'false 'lteq.d 1.0 1e-308 'false 'lteq.d 1.0 1.0 'true 'lteq.d 1.0 1.1 'true 'lteq.d 1.0 1e308 'true 'lteq.d 1.1 -1e308 'false 'lteq.d 1.1 -1.1 'false 'lteq.d 1.1 -1.0 'false 'lteq.d 1.1 -1e-308 'false 'lteq.d 1.1 0.0 'false 'lteq.d 1.1 1e-308 'false 'lteq.d 1.1 1.0 'false 'lteq.d 1.1 1.1 'true 'lteq.d 1.1 1e308 'true 'lteq.d 1e308 -1e308 'false 'lteq.d 1e308 -1.1 'false 'lteq.d 1e308 -1.0 'false 'lteq.d 1e308 -1e-308 'false 'lteq.d 1e308 0.0 'false 'lteq.d 1e308 1e-308 'false 'lteq.d 1e308 1.0 'false 'lteq.d 1e308 1.1 'false 'lteq.d 1e308 1e308 'true 'lt.d -1e308 -1e308 'false 'lt.d -1e308 -1.1 'true 'lt.d -1e308 -1.0 'true 'lt.d -1e308 -1e-308 'true 'lt.d -1e308 0.0 'true 'lt.d -1e308 1e-308 'true 'lt.d -1e308 1.0 'true 'lt.d -1e308 1.1 'true 'lt.d -1e308 1e308 'true 'lt.d -1.1 -1e308 'false 'lt.d -1.1 -1.1 'false 'lt.d -1.1 -1.0 'true 'lt.d -1.1 -1e-308 'true 'lt.d -1.1 0.0 'true 'lt.d -1.1 1e-308 'true 'lt.d -1.1 1.0 'true 'lt.d -1.1 1.1 'true 'lt.d -1.1 1e308 'true 'lt.d -1.0 -1e308 'false 'lt.d -1.0 -1.1 'false 'lt.d -1.0 -1.0 'false 'lt.d -1.0 -1e-308 'true 'lt.d -1.0 0.0 'true 'lt.d -1.0 1e-308 'true 'lt.d -1.0 1.0 'true 'lt.d -1.0 1.1 'true 'lt.d -1.0 1e308 'true 'lt.d -1e-308 -1e308 'false 'lt.d -1e-308 -1.1 'false 'lt.d -1e-308 -1.0 'false 'lt.d -1e-308 -1e-308 'false 'lt.d -1e-308 0.0 'true 'lt.d -1e-308 1e-308 'true 'lt.d -1e-308 1.0 'true 'lt.d -1e-308 1.1 'true 'lt.d -1e-308 1e308 'true 'lt.d 0.0 -1e308 'false 'lt.d 0.0 -1.1 'false 'lt.d 0.0 -1.0 'false 'lt.d 0.0 -1e-308 'false 'lt.d 0.0 0.0 'false 'lt.d 0.0 1e-308 'true 'lt.d 0.0 1.0 'true 'lt.d 0.0 1.1 'true 'lt.d 0.0 1e308 'true 'lt.d 1e-308 -1e308 'false 'lt.d 1e-308 -1.1 'false 'lt.d 1e-308 -1.0 'false 'lt.d 1e-308 -1e-308 'false 'lt.d 1e-308 0.0 'false 'lt.d 1e-308 1e-308 'false 'lt.d 1e-308 1.0 'true 'lt.d 1e-308 1.1 'true 'lt.d 1e-308 1e308 'true 'lt.d 1.0 -1e308 'false 'lt.d 1.0 -1.1 'false 'lt.d 1.0 -1.0 'false 'lt.d 1.0 -1e-308 'false 'lt.d 1.0 0.0 'false 'lt.d 1.0 1e-308 'false 'lt.d 1.0 1.0 'false 'lt.d 1.0 1.1 'true 'lt.d 1.0 1e308 'true 'lt.d 1.1 -1e308 'false 'lt.d 1.1 -1.1 'false 'lt.d 1.1 -1.0 'false 'lt.d 1.1 -1e-308 'false 'lt.d 1.1 0.0 'false 'lt.d 1.1 1e-308 'false 'lt.d 1.1 1.0 'false 'lt.d 1.1 1.1 'false 'lt.d 1.1 1e308 'true 'lt.d 1e308 -1e308 'false 'lt.d 1e308 -1.1 'false 'lt.d 1e308 -1.0 'false 'lt.d 1e308 -1e-308 'false 'lt.d 1e308 0.0 'false 'lt.d 1e308 1e-308 'false 'lt.d 1e308 1.0 'false 'lt.d 1e308 1.1 'false 'lt.d 1e308 1e308 'false ] ; unary operators - decimal generate-test [ set a :value :op a eq.d a :result ] [op value result] reduce [ 'abs.d -1e308 1e308 'abs.d -1.0 1.0 'abs.d -1e-308 1e-308 'abs.d 0.0 0.0 'abs.d 1e-308 1e-308 'abs.d 1.0 1.0 'abs.d 1e308 1e308 ] ; binry decimal operator, exact test generate-test [ set a :value1 :op a :value2 eq.d a :result ] [op value1 value2 result] reduce [ 'min.d -1e308 -1e308 -1e308 'min.d -1e308 -1.1 -1e308 'min.d -1e308 -1.0 -1e308 'min.d -1e308 -1e-308 -1e308 'min.d -1e308 0.0 -1e308 'min.d -1e308 1e-308 -1e308 'min.d -1e308 1.0 -1e308 'min.d -1e308 1.1 -1e308 'min.d -1e308 1e308 -1e308 'min.d -1.1 -1e308 -1e308 'min.d -1.1 -1.1 -1.1 'min.d -1.1 -1.0 -1.1 'min.d -1.1 -1e-308 -1.1 'min.d -1.1 0.0 -1.1 'min.d -1.1 1e-308 -1.1 'min.d -1.1 1.0 -1.1 'min.d -1.1 1.1 -1.1 'min.d -1.1 1e308 -1.1 'min.d -1.0 -1e308 -1e308 'min.d -1.0 -1.1 -1.1 'min.d -1.0 -1.0 -1.0 'min.d -1.0 -1e-308 -1.0 'min.d -1.0 0.0 -1.0 'min.d -1.0 1e-308 -1.0 'min.d -1.0 1.0 -1.0 'min.d -1.0 1.1 -1.0 'min.d -1.0 1e308 -1.0 'min.d -1e-308 -1e308 -1e308 'min.d -1e-308 -1.1 -1.1 'min.d -1e-308 -1.0 -1.0 'min.d -1e-308 -1e-308 -1e-308 'min.d -1e-308 0.0 -1e-308 'min.d -1e-308 1e-308 -1e-308 'min.d -1e-308 1.0 -1e-308 'min.d -1e-308 1.1 -1e-308 'min.d -1e-308 1e308 -1e-308 'min.d 0.0 -1e308 -1e308 'min.d 0.0 -1.1 -1.1 'min.d 0.0 -1.0 -1.0 'min.d 0.0 -1e-308 -1e-308 'min.d 0.0 0.0 0.0 'min.d 0.0 1e-308 0.0 'min.d 0.0 1.0 0.0 'min.d 0.0 1.1 0.0 'min.d 0.0 1e308 0.0 'min.d 1e-308 -1e308 -1e308 'min.d 1e-308 -1.1 -1.1 'min.d 1e-308 -1.0 -1.0 'min.d 1e-308 -1e-308 -1e-308 'min.d 1e-308 0.0 0.0 'min.d 1e-308 1e-308 1e-308 'min.d 1e-308 1.0 1e-308 'min.d 1e-308 1.1 1e-308 'min.d 1e-308 1e308 1e-308 'min.d 1.0 -1e308 -1e308 'min.d 1.0 -1.1 -1.1 'min.d 1.0 -1.0 -1.0 'min.d 1.0 -1e-308 -1e-308 'min.d 1.0 0.0 0.0 'min.d 1.0 1e-308 1e-308 'min.d 1.0 1.0 1.0 'min.d 1.0 1.1 1.0 'min.d 1.0 1e308 1.0 'min.d 1.1 -1e308 -1e308 'min.d 1.1 -1.1 -1.1 'min.d 1.1 -1.0 -1.0 'min.d 1.1 -1e-308 -1e-308 'min.d 1.1 0.0 0.0 'min.d 1.1 1e-308 1e-308 'min.d 1.1 1.0 1.0 'min.d 1.1 1.1 1.1 'min.d 1.1 1e308 1.1 'min.d 1e308 -1e308 -1e308 'min.d 1e308 -1.1 -1.1 'min.d 1e308 -1.0 -1.0 'min.d 1e308 -1e-308 -1e-308 'min.d 1e308 0.0 0.0 'min.d 1e308 1e-308 1e-308 'min.d 1e308 1.0 1.0 'min.d 1e308 1.1 1.1 'min.d 1e308 1e308 1e308 ] ; three-operand comparison operators generate-test [ set a :value1 :op a :value2 :value3 gett b eq.i b :result ] [op value1 value2 value3 result] reduce [ 'glt.i 1 0 2 'true 'glt.i 1 1 2 'false 'glt.i 1 0 1 'false 'glte.i 1 1 1 'true 'glte.i 1 2 1 'false 'glte.i 1 1 0 'false ] ; end of the cycle block bra continue label fail do discard [print ["test:" mold testing "failed"] halt] label continue ] print "tests passed" return "Done" ] [generate-test] if any [ not rebcode? :rc not any-function? :rc not block? first :rc not block? second :rc not block? third :rc ][ print "Invalid REBCODE interface." halt ] time [print rc]