diff --git a/examples/cmp/Makefile b/examples/cmp/Makefile new file mode 100644 index 000000000..b2d38032c --- /dev/null +++ b/examples/cmp/Makefile @@ -0,0 +1,15 @@ +.PHONY: all clean test + +all: test + +clean: + rm -f *.prg *.asm *.vice-* test_*.p8 + +test: clean + python make_tests.py + p8compile -noopt *.p8 >/dev/null + for program in *.prg; do \ + echo "RUNNING:" $$program ; \ + x64sc $$program >/dev/null ; \ + done + diff --git a/examples/cmp/comparison_ifs_byte.p8 b/examples/cmp/comparison_ifs_byte.p8 deleted file mode 100644 index 902309ea0..000000000 --- a/examples/cmp/comparison_ifs_byte.p8 +++ /dev/null @@ -1,110 +0,0 @@ -%import textio -%zeropage basicsafe - -; Note: this program is compatible with C64 and CX16. - -main { - - sub start() { - - byte v1 - byte v2 - - v1 = 100 - v2 = 127 - if v1==v2 - txt.print("error in 100==127!\n") - else - txt.print("ok: 100 not == 127\n") - - if v1!=v2 - txt.print("ok: 100 != 127\n") - else - txt.print("error in 100!=127!\n") - - if v1v2 - txt.print("error in 100>127!\n") - else - txt.print("ok: 100 is not >127\n") - - if v1>=v2 - txt.print("error in 100>=127!\n") - else - txt.print("ok: 100 is not >=127\n") - - - v1 = 125 - v2 = 22 - if v1==v2 - txt.print("error in 125==22!\n") - else - txt.print("ok: 125 not == 22\n") - - if v1!=v2 - txt.print("ok: 125 != 22\n") - else - txt.print("error in 125!=22!\n") - - if v1v2 - txt.print("ok: 125 > 22\n") - else - txt.print("error in 125>22!\n") - - if v1>=v2 - txt.print("ok: 125 >= 22\n") - else - txt.print("error in 125>=22!\n") - - v1 = 22 - v2 = 22 - if v1==v2 - txt.print("ok: 22 == 22\n") - else - txt.print("error in 22==22!\n") - - if v1!=v2 - txt.print("error in 22!=22!\n") - else - txt.print("ok: 22 is not != 22\n") - - if v1v2 - txt.print("error in 22>22!\n") - else - txt.print("ok: 22 is not > 22\n") - - if v1>=v2 - txt.print("ok: 22 >= 22\n") - else - txt.print("error in 22>=22!\n") - } -} diff --git a/examples/cmp/comparison_ifs_float.p8 b/examples/cmp/comparison_ifs_float.p8 deleted file mode 100644 index fb98014fb..000000000 --- a/examples/cmp/comparison_ifs_float.p8 +++ /dev/null @@ -1,111 +0,0 @@ -%import textio -%import floats -%zeropage basicsafe - -; Note: this program is compatible with C64 and CX16. - -main { - - sub start() { - - float v1 - float v2 - - v1 = 1.11 - v2 = 699.99 - if v1==v2 - txt.print("error in 1.11==699.99!\n") - else - txt.print("ok: 1.11 not == 699.99\n") - - if v1!=v2 - txt.print("ok: 1.11 != 699.99\n") - else - txt.print("error in 1.11!=699.99!\n") - - if v1v2 - txt.print("error in 1.11>699.99!\n") - else - txt.print("ok: 1.11 is not >699.99\n") - - if v1>=v2 - txt.print("error in 1.11>=699.99!\n") - else - txt.print("ok: 1.11 is not >=699.99\n") - - - v1 = 555.5 - v2 = -22.2 - if v1==v2 - txt.print("error in 555.5==-22.2!\n") - else - txt.print("ok: 555.5 not == -22.2\n") - - if v1!=v2 - txt.print("ok: 555.5 != -22.2\n") - else - txt.print("error in 555.5!=-22.2!\n") - - if v1v2 - txt.print("ok: 555.5 > -22.2\n") - else - txt.print("error in 555.5>-22.2!\n") - - if v1>=v2 - txt.print("ok: 555.5 >= -22.2\n") - else - txt.print("error in 555.5>=-22.2!\n") - - v1 = -22.2 - v2 = -22.2 - if v1==v2 - txt.print("ok: -22.2 == -22.2\n") - else - txt.print("error in -22.2==-22.2!\n") - - if v1!=v2 - txt.print("error in -22.2!=-22.2!\n") - else - txt.print("ok: -22.2 is not != -22.2\n") - - if v1v2 - txt.print("error in -22.2>-22.2!\n") - else - txt.print("ok: -22.2 is not > -22.2\n") - - if v1>=v2 - txt.print("ok: -22.2 >= -22.2\n") - else - txt.print("error in -22.2>=-22.2!\n") - } -} diff --git a/examples/cmp/comparison_ifs_ubyte.p8 b/examples/cmp/comparison_ifs_ubyte.p8 deleted file mode 100644 index 4a85ead7b..000000000 --- a/examples/cmp/comparison_ifs_ubyte.p8 +++ /dev/null @@ -1,111 +0,0 @@ -%import textio -%zeropage basicsafe - - -; Note: this program is compatible with C64 and CX16. - -main { - - sub start() { - - ubyte v1 - ubyte v2 - - v1 = 100 - v2 = 200 - if v1==v2 - txt.print("error in 100==200!\n") - else - txt.print("ok: 100 not == 200\n") - - if v1!=v2 - txt.print("ok: 100 != 200\n") - else - txt.print("error in 100!=200!\n") - - if v1v2 - txt.print("error in 100>200!\n") - else - txt.print("ok: 100 is not >200\n") - - if v1>=v2 - txt.print("error in 100>=200!\n") - else - txt.print("ok: 100 is not >=200\n") - - - v1 = 155 - v2 = 22 - if v1==v2 - txt.print("error in 155==22!\n") - else - txt.print("ok: 155 not == 22\n") - - if v1!=v2 - txt.print("ok: 155 != 22\n") - else - txt.print("error in 155!=22!\n") - - if v1v2 - txt.print("ok: 155 > 22\n") - else - txt.print("error in 155>22!\n") - - if v1>=v2 - txt.print("ok: 155 >= 22\n") - else - txt.print("error in 155>=22!\n") - - v1 = 22 - v2 = 22 - if v1==v2 - txt.print("ok: 22 == 22\n") - else - txt.print("error in 22==22!\n") - - if v1!=v2 - txt.print("error in 22!=22!\n") - else - txt.print("ok: 22 is not != 22\n") - - if v1v2 - txt.print("error in 22>22!\n") - else - txt.print("ok: 22 is not > 22\n") - - if v1>=v2 - txt.print("ok: 22 >= 22\n") - else - txt.print("error in 22>=22!\n") - } -} diff --git a/examples/cmp/make_tests.py b/examples/cmp/make_tests.py new file mode 100644 index 000000000..42a8d013c --- /dev/null +++ b/examples/cmp/make_tests.py @@ -0,0 +1,341 @@ +import sys + +index = 0 + + +def minmaxvalues(dt): + if dt == "ubyte": + return 0, 255 + elif dt == "uword": + return 0, 65535 + elif dt == "byte": + return -128, 127 + elif dt == "word": + return -32768, 32767 + elif dt == "float": + return -99999999, 99999999 + else: + raise ValueError(dt) + + +def gen_test(dt, comparison, left, right, expected): + global index + etxt = f"{left} {comparison} {right}" + if eval(etxt) != expected: + raise ValueError("invalid comparison: "+etxt+" for "+dt) + if expected: + stmt_ok = lambda ix: "num_successes++" + stmt_else = lambda ix: f"error({ix})" + else: + stmt_ok = lambda ix: f"error({ix})" + stmt_else = lambda ix: "num_successes++" + + print( +f""" left = {left} + right = {right} +""" + ) + + # const const + index += 1 + print( +f""" ; test #{index} + if {left} {comparison} {right} {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # const var + index += 1 + print( +f""" ; test #{index} + if {left} {comparison} right {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # const expr + index += 1 + print( +f""" ; test #{index} + if {left} {comparison} right+zero {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # var const + index += 1 + print( +f""" ; test #{index} + if left {comparison} {right} {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # var var + index += 1 + print( +f""" ; test #{index} + if left {comparison} right {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # var expr + index += 1 + print( +f""" ; test #{index} + if left {comparison} right+zero {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # expr const + index += 1 + print( +f""" ; test #{index} + if left+zero {comparison} {right} {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # expr var + index += 1 + print( +f""" ; test #{index} + if left+zero {comparison} right {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + # expr expr + index += 1 + print( +f""" ; test #{index} + if left+zero {comparison} right+zero {{ + {stmt_ok(index)} + }} else {{ + {stmt_else(index)} + }} +""") + + +def gen_comp_equal(dt): + minval, maxval = minmaxvalues(dt) + print(" ; tests: ", dt, "==") + print(" comparison = \"==\"") + print(" txt.print(datatype)") + print(" txt.spc()") + print(" txt.print(comparison)") + print(" txt.nl()") + gen_test(dt, "==", 0, 0, True) + gen_test(dt, "==", 0, 1, False) + gen_test(dt, "==", 100, 100, True) + gen_test(dt, "==", 100, 101, False) + if maxval >= 200: + gen_test(dt, "==", 200, 200, True) + gen_test(dt, "==", 200, 201, False) + if maxval >= 9999: + gen_test(dt, "==", 9999, 9999, True) + gen_test(dt, "==", 9999, 10000, False) + gen_test(dt, "==", 0x5000, 0x5000, True) + gen_test(dt, "==", 0x5000, 0x5001, False) + gen_test(dt, "==", 0x5000, 0x4fff, False) + if maxval >= 30000: + gen_test(dt, "==", 30000, 30000, True) + gen_test(dt, "==", 30000, 30001, False) + if maxval >= 40000: + gen_test(dt, "==", 0xf000, 0xf000, True) + gen_test(dt, "==", 0xf000, 0xf001, False) + gen_test(dt, "==", 0xf000, 0xffff, False) + if minval < 0: + gen_test(dt, "==", 0, -1, False) + gen_test(dt, "==", -100, -100, True) + if minval < -200: + gen_test(dt, "==", -200, -200, True) + gen_test(dt, "==", -200, -201, False) + if minval < -9999: + gen_test(dt, "==", -0x5000, -0x5000, True) + gen_test(dt, "==", -0x5000, -0x5001, False) + gen_test(dt, "==", -0x5000, -0x4fff, False) + gen_test(dt, "==", -9999, -9999, True) + gen_test(dt, "==", -9999, -10000, False) + gen_test(dt, "==", minval, minval, True) + gen_test(dt, "==", minval, minval+1, False) + gen_test(dt, "==", maxval, maxval, True) + gen_test(dt, "==", maxval, maxval-1, False) + + +def gen_comp_notequal(dt): + minval, maxval = minmaxvalues(dt) + print(" ; tests: ", dt, "!=") + print(" comparison = \"!=\"") + print(" txt.print(datatype)") + print(" txt.spc()") + print(" txt.print(comparison)") + print(" txt.nl()") + gen_test(dt, "!=", 0, 0, False) + gen_test(dt, "!=", 0, 1, True) + gen_test(dt, "!=", 100, 100, False) + gen_test(dt, "!=", 100, 101, True) + if maxval >= 200: + gen_test(dt, "!=", 200, 200, False) + gen_test(dt, "!=", 200, 201, True) + if maxval >= 9999: + gen_test(dt, "!=", 9999, 9999, False) + gen_test(dt, "!=", 9999, 10000, True) + gen_test(dt, "!=", 0x5000, 0x5000, False) + gen_test(dt, "!=", 0x5000, 0x5001, True) + gen_test(dt, "!=", 0x5000, 0x4fff, True) + if maxval >= 30000: + gen_test(dt, "!=", 30000, 30000, False) + gen_test(dt, "!=", 30000, 30001, True) + if maxval >= 40000: + gen_test(dt, "!=", 0xf000, 0xf000, False) + gen_test(dt, "!=", 0xf000, 0xf001, True) + gen_test(dt, "!=", 0xf000, 0xffff, True) + if minval < 0: + gen_test(dt, "!=", 0, -1, True) + gen_test(dt, "!=", -100, -100, False) + if minval < -200: + gen_test(dt, "!=", -200, -200, False) + gen_test(dt, "!=", -200, -201, True) + if minval < -9999: + gen_test(dt, "!=", -0x5000, -0x5000, False) + gen_test(dt, "!=", -0x5000, -0x5001, True) + gen_test(dt, "!=", -0x5000, -0x4fff, True) + gen_test(dt, "!=", -9999, -9999, False) + gen_test(dt, "!=", -9999, -10000, True) + gen_test(dt, "!=", minval, minval, False) + gen_test(dt, "!=", minval, minval+1, True) + gen_test(dt, "!=", maxval, maxval, False) + gen_test(dt, "!=", maxval, maxval-1, True) + + +def gen_comp_less(dt): + minval, maxval = minmaxvalues(dt) + print(" ; tests: ", dt, "<") + + +def gen_comp_greater(dt): + minval, maxval = minmaxvalues(dt) + print(" ; tests: ", dt, ">") + + +def gen_comp_lessequal(dt): + minval, maxval = minmaxvalues(dt) + print(" ; tests: ", dt, "<=") + + +def gen_comp_greaterequal(dt): + minval, maxval = minmaxvalues(dt) + print(" ; tests: ", dt, ">=") + + +def generate_test_routine_equalsnotequals(dt): + print(f""" + sub test_comparisons() {{ + {dt} left + {dt} right + {dt} zero = 0 +""") + gen_comp_equal(dt) + gen_comp_notequal(dt) + print(" }") + + +def generate_test_routine_lessgreater(dt): + print(f""" + sub test_comparisons() {{ + {dt} left + {dt} right + {dt} zero = 0 +""") + gen_comp_less(dt) + gen_comp_greater(dt) + print(" }") + + +def generate_test_routine_lessequalsgreaterequals(dt): + print(f""" + sub test_comparisons() {{ + {dt} left + {dt} right + {dt} zero = 0 +""") + gen_comp_lessequal(dt) + gen_comp_greaterequal(dt) + print(" }") + + +def generate(dt, operators): + global index + index = 0 + print(f""" +%import textio +%import floats +%import test_stack +%zeropage basicsafe + +main {{ + uword num_errors = 0 + uword num_successes = 0 + str datatype = "{dt}" + uword comparison + + sub start() {{ + test_comparisons() + print_results() + test_stack.test() + }} + + sub error(uword index) {{ + txt.print(" ! error in test ") + txt.print_uw(index) + txt.chrout(' ') + txt.print(datatype) + txt.chrout(' ') + txt.print(comparison) + txt.nl() + num_errors++ + }} +""") + + if operators=="eq": + generate_test_routine_equalsnotequals(dt) + elif operators=="lt": + generate_test_routine_lessgreater(dt) + elif operators=="lteq": + generate_test_routine_lessequalsgreaterequals(dt) + else: + raise ValueError(operators) + + print(f""" + sub print_results() {{ + txt.nl() + txt.print("total {index}: ") + txt.print_uw(num_successes) + txt.print(" good, ") + txt.print_uw(num_errors) + txt.print(" errors!\\n") + }} +}} +""") + + +if __name__ == '__main__': + for dt in ["ubyte", "uword", "byte", "word", "float"]: + sys.stdout = open(f"test_{dt}_eq.p8", "wt") + generate(dt, "eq") + sys.stdout = open(f"test_{dt}_lt.p8", "wt") + generate(dt, "lt") + sys.stdout = open(f"test_{dt}_lteq.p8", "wt") + generate(dt, "lteq") diff --git a/examples/cmp/word_comps.p8 b/examples/cmp/word_comps.p8 deleted file mode 100644 index 18472afc2..000000000 --- a/examples/cmp/word_comps.p8 +++ /dev/null @@ -1,913 +0,0 @@ -%import textio -%import floats -%zeropage basicsafe -%import test_stack - -main { - - sub start() { - word_less() - word_lessequal() - word_greaterequal() - word_greater() - uword_lessequal() - } - - sub uword_lessequal() { - uword lessvar - uword comparevar - - txt.print("uword <=\n") - - txt.print_uw(65535) - txt.nl() - check_lesseq_uw(0, 65535) - txt.print_uw(0) - txt.nl() - check_not_lesseq_uw(65535, 0) - - comparevar = 65535 - txt.print_uw(comparevar) - txt.nl() - for lessvar in comparevar downto 0 { - check_lesseq_uw(lessvar, comparevar) - } - - comparevar = 65535-2 - txt.print_uw(comparevar) - txt.nl() - for lessvar in comparevar downto 0 { - check_lesseq_uw(lessvar, comparevar) - } - - comparevar = 65535-254 - txt.print_uw(comparevar) - txt.nl() - for lessvar in comparevar downto 0 { - check_lesseq_uw(lessvar, comparevar) - } - - comparevar = 65535-255 - txt.print_uw(comparevar) - txt.nl() - for lessvar in comparevar downto 0 { - check_lesseq_uw(lessvar, comparevar) - } - - comparevar = 65535-256 - txt.print_uw(comparevar) - txt.nl() - for lessvar in comparevar downto 0 { - check_lesseq_uw(lessvar, comparevar) - } - - comparevar = 65535-5000 - txt.print_uw(comparevar) - txt.nl() - for lessvar in comparevar downto 0 { - check_lesseq_uw(lessvar, comparevar) - } - - comparevar = 32769 - txt.print_uw(comparevar) - txt.nl() - for lessvar in comparevar downto 0 { - check_lesseq_uw(lessvar, comparevar) - } - - - comparevar = 32768 - txt.print_uw(comparevar) - txt.nl() - for lessvar in 65535 downto comparevar+1 { - check_not_lesseq_uw(lessvar, comparevar) - } - - comparevar = 1 - txt.print_uw(comparevar) - txt.nl() - for lessvar in 65535 downto comparevar+1 { - check_not_lesseq_uw(lessvar, comparevar) - } - - comparevar = 0 - txt.print_uw(comparevar) - txt.nl() - for lessvar in 65535 downto comparevar+1 { - check_not_lesseq_uw(lessvar, comparevar) - } - - comparevar = 11111 - txt.print_uw(comparevar) - txt.nl() - for lessvar in 65535 downto comparevar+1 { - check_not_lesseq_uw(lessvar, comparevar) - } - - comparevar = 255 - txt.print_uw(comparevar) - txt.nl() - for lessvar in 65535 downto comparevar+1 { - check_not_lesseq_uw(lessvar, comparevar) - } - - comparevar = 256 - txt.print_uw(comparevar) - txt.nl() - for lessvar in 65535 downto comparevar+1 { - check_not_lesseq_uw(lessvar, comparevar) - } - - - test_stack.test() - return - - sub check_lesseq_uw(uword w1, uword w2) { - uword zero = 0 - ubyte error=0 - - ubyte ub = w1<=w2 - if not ub { - error++ - txt.print("ub!") - } - - if w1<=(w2+zero) { - zero = 0 ; dummy - } else { - error++ - txt.print("c!") - } - - if error { - txt.print(" ") - txt.print_uw(w1) - txt.print(" <= ") - txt.print_uw(w2) - txt.nl() - sys.exit(1) - } - } - - sub check_not_lesseq_uw(uword w1, uword w2) { - uword zero = 0 - ubyte error=0 - - ubyte ub = w1<=w2 - if ub { - error++ - txt.print("ub!") - } - - if w1<=(w2+zero) { - error++ - txt.print("c!") - } else { - zero = 0 ; dummy - } - - if error { - txt.print(" ") - txt.print_uw(w1) - txt.print(" not <= ") - txt.print_uw(w2) - txt.nl() - sys.exit(1) - } - } - } - - sub word_greater() { - word biggervar - word comparevar - - txt.print("word >\n") - - txt.print_w(-32767) - txt.nl() - check_greater_w(32767, -32767) - txt.print_w(32766) - txt.nl() - check_not_greater_w(-32766, 32766) - - comparevar = 32765 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar downto -32768 { - check_not_greater_w(biggervar, comparevar) - } - - comparevar = -1 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar downto -32768 { - check_not_greater_w(biggervar, comparevar) - } - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar downto -32768 { - check_not_greater_w(biggervar, comparevar) - } - - comparevar = 11111 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar downto -32768 { - check_not_greater_w(biggervar, comparevar) - } - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = -2 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = -254 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = -255 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = -256 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = -5000 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = 1 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = 255 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = 256 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = 257 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - comparevar = 32760 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar+1 { - check_greater_w(biggervar, comparevar) - } - - - test_stack.test() - return - - sub check_greater_w(word w1, word w2) { - word zero = 0 - ubyte error=0 - - ubyte ub = w1>(w2+zero) - if not ub { - error++ - txt.print("ubz!") - } - - ub = w1>w2 - if not ub { - error++ - txt.print("ub!") - } - - if w1>(w2+zero) { - zero = 0 ; dummy - } else { - error++ - txt.print("c!") - } - - if error { - txt.print(" ") - txt.print_w(w1) - txt.print(" > ") - txt.print_w(w2) - txt.nl() - sys.exit(1) - } - } - - sub check_not_greater_w(word w1, word w2) { - word zero = 0 - ubyte error=0 - - ubyte ub = w1>w2 - if ub { - error++ - txt.print("ub!") - } - - if w1>(w2+zero) { - error++ - txt.print("c!") - } else { - zero = 0 ; dummy - } - - if w1>w2 { - error++ - txt.print("c2!") - } else { - zero = 0 ; dummy - } - - if error { - txt.print(" ") - txt.print_w(w1) - txt.print(" not > ") - txt.print_w(w2) - txt.nl() - sys.exit(1) - } - } - } - - sub word_greaterequal() { - word biggervar - word comparevar - - txt.print("word >=\n") - - txt.print_w(-32767) - txt.nl() - check_greatereq_w(32767, -32767) - txt.print_w(32766) - txt.nl() - check_not_greatereq_w(-32766, 32766) - - comparevar = 32765 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar-1 downto -32768 { - check_not_greatereq_w(biggervar, comparevar) - } - - comparevar = -1 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar-1 downto -32768 { - check_not_greatereq_w(biggervar, comparevar) - } - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar-1 downto -32768 { - check_not_greatereq_w(biggervar, comparevar) - } - - comparevar = 11111 - txt.print_w(comparevar) - txt.nl() - for biggervar in comparevar-1 downto -32768 { - check_not_greatereq_w(biggervar, comparevar) - } - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = -2 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = -254 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = -255 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = -256 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = -5000 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = 1 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = 255 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = 256 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = 257 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - comparevar = 32767 - txt.print_w(comparevar) - txt.nl() - for biggervar in 32767 downto comparevar { - check_greatereq_w(biggervar, comparevar) - } - - - test_stack.test() - return - - sub check_greatereq_w(word w1, word w2) { - word zero = 0 - ubyte error=0 - - ubyte ub = w1>=(w2+zero) - if not ub { - error++ - txt.print("ubz!") - } - - ub = w1>=w2 - if not ub { - error++ - txt.print("ub!") - } - - if w1>=(w2+zero) { - zero = 0 ; dummy - } else { - error++ - txt.print("c!") - } - - if error { - txt.print(" ") - txt.print_w(w1) - txt.print(" >= ") - txt.print_w(w2) - txt.nl() - sys.exit(1) - } - } - - sub check_not_greatereq_w(word w1, word w2) { - word zero = 0 - ubyte error=0 - - ubyte ub = w1>=w2 - if ub { - error++ - txt.print("ub!") - } - - if w1>=(w2+zero) { - error++ - txt.print("c!") - } else { - zero = 0 ; dummy - } - - if w1>=w2 { - error++ - txt.print("c2!") - } else { - zero = 0 ; dummy - } - - if error { - txt.print(" ") - txt.print_w(w1) - txt.print(" not >= ") - txt.print_w(w2) - txt.nl() - sys.exit(1) - } - } - } - - sub word_lessequal() { - word lessvar - word comparevar - - txt.print("word <=\n") - - txt.print_w(32767) - txt.nl() - check_lesseq_w(-32767, 32767) - txt.print_w(-32767) - txt.nl() - check_not_lesseq_w(32767, -32767) - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = -2 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = -254 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = -255 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = -256 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = -5000 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = 1 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = 255 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = 256 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = 257 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - comparevar = 32767 - txt.print_w(comparevar) - txt.nl() - for lessvar in comparevar downto -32768 { - check_lesseq_w(lessvar, comparevar) - } - - - comparevar = -32768 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto comparevar+1 { - check_not_lesseq_w(lessvar, comparevar) - } - - comparevar = -1 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto comparevar+1 { - check_not_lesseq_w(lessvar, comparevar) - } - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto comparevar+1 { - check_not_lesseq_w(lessvar, comparevar) - } - - comparevar = 11111 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto comparevar+1 { - check_not_lesseq_w(lessvar, comparevar) - } - - test_stack.test() - return - - sub check_lesseq_w(word w1, word w2) { - word zero = 0 - ubyte error=0 - - ubyte ub = w1<=w2 - if not ub { - error++ - txt.print("ub!") - } - - if w1<=(w2+zero) { - zero = 0 ; dummy - } else { - error++ - txt.print("c!") - } - - if error { - txt.print(" ") - txt.print_w(w1) - txt.print(" <= ") - txt.print_w(w2) - txt.nl() - sys.exit(1) - } - } - - sub check_not_lesseq_w(word w1, word w2) { - word zero = 0 - ubyte error=0 - - ubyte ub = w1<=w2 - if ub { - error++ - txt.print("ub!") - } - - if w1<=(w2+zero) { - error++ - txt.print("c!") - } else { - zero = 0 ; dummy - } - - if error { - txt.print(" ") - txt.print_w(w1) - txt.print(" not <= ") - txt.print_w(w2) - txt.nl() - sys.exit(1) - } - } - } - - sub word_less() { - word lessvar - word comparevar - - txt.print("word <\n") - - txt.print_w(32767) - txt.nl() - check_less_w(-32767, 32767) - txt.print_w(-32767) - txt.nl() - check_not_less_w(32767, -32767) - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for lessvar in -1 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = -2 - txt.print_w(comparevar) - txt.nl() - for lessvar in -3 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = -254 - txt.print_w(comparevar) - txt.nl() - for lessvar in -255 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = -255 - txt.print_w(comparevar) - txt.nl() - for lessvar in -256 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = -256 - txt.print_w(comparevar) - txt.nl() - for lessvar in -257 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = -5000 - txt.print_w(comparevar) - txt.nl() - for lessvar in -5001 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = 1 - txt.print_w(comparevar) - txt.nl() - for lessvar in 0 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = 255 - txt.print_w(comparevar) - txt.nl() - for lessvar in 254 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = 256 - txt.print_w(comparevar) - txt.nl() - for lessvar in 255 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = 257 - txt.print_w(comparevar) - txt.nl() - for lessvar in 256 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = 32767 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto -32768 { - check_less_w(lessvar, comparevar) - } - - comparevar = -32768 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto -32768 { - check_not_less_w(lessvar, comparevar) - } - - comparevar = -1 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto -1 { - check_not_less_w(lessvar, comparevar) - } - - comparevar = 0 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto 0 { - check_not_less_w(lessvar, comparevar) - } - - comparevar = 11111 - txt.print_w(comparevar) - txt.nl() - for lessvar in 32766 downto 11111 { - check_not_less_w(lessvar, comparevar) - } - - test_stack.test() - return - - sub check_less_w(word w1, word w2) { - word zero = 0 - ubyte error=0 - - ubyte ub = w1