prog8/compiler/test/comparisons/test_ubyte_lt.p8
Irmen de Jong 56c1035581 Merge branch 'master' into multi-assign
# Conflicts:
#	docs/source/todo.rst
#	examples/test.p8
2024-03-26 22:09:16 +01:00

957 lines
18 KiB
Lua

%import textio
%import floats
%import test_stack
%zeropage dontuse
%option no_sysinit
main {
ubyte success = 0
str datatype = "ubyte"
uword @shared comparison
sub start() {
txt.print("\nless-than tests for: ")
txt.print(datatype)
txt.nl()
test_stack.test()
txt.print("\n<number: ")
test_cmp_number()
txt.print("\n<var: ")
test_cmp_var()
txt.print("\n<array[]: ")
test_cmp_array()
txt.print("\n<expr: ")
test_cmp_expr()
test_stack.test()
}
sub verify_success(ubyte expected) {
if success==expected {
txt.print("ok")
} else {
txt.print(" **failed** ")
txt.print_ub(success)
txt.print(" success, expected ")
txt.print_ub(expected)
}
}
sub fail_byte(uword idx) {
txt.print(" **fail#")
txt.print_uw(idx)
txt.print(" **")
}
sub fail_ubyte(uword idx) {
txt.print(" **fail#")
txt.print_uw(idx)
txt.print(" **")
}
sub fail_word(uword idx) {
txt.print(" **fail#")
txt.print_uw(idx)
txt.print(" **")
}
sub fail_uword(uword idx) {
txt.print(" **fail#")
txt.print_uw(idx)
txt.print(" **")
}
sub fail_float(uword idx) {
txt.print(" **fail#")
txt.print_uw(idx)
txt.print(" **")
}
sub test_cmp_number() {
ubyte @shared x
success = 0
x=0
; direct jump
if x<0
goto lbl1a
goto skip1a
lbl1a: fail_ubyte(1)
skip1a:
; indirect jump
cx16.r3 = &lbl1b
if x<0
goto cx16.r3
goto skip1b
lbl1b: fail_ubyte(2)
skip1b:
; no else
if x<0
fail_ubyte(3)
; with else
if x<0
fail_ubyte(4)
else
success++
; direct jump
if x<1
goto lbl2a
goto skip2a
lbl2a: success++
skip2a:
; indirect jump
cx16.r3 = &lbl2b
if x<1
goto cx16.r3
goto skip2b
lbl2b: success++
skip2b:
; no else
if x<1
success++
; with else
if x<1
success++
else
cx16.r0L++
; direct jump
if x<255
goto lbl3a
goto skip3a
lbl3a: success++
skip3a:
; indirect jump
cx16.r3 = &lbl3b
if x<255
goto cx16.r3
goto skip3b
lbl3b: success++
skip3b:
; no else
if x<255
success++
; with else
if x<255
success++
else
cx16.r0L++
x=1
; direct jump
if x<0
goto lbl4a
goto skip4a
lbl4a: fail_ubyte(5)
skip4a:
; indirect jump
cx16.r3 = &lbl4b
if x<0
goto cx16.r3
goto skip4b
lbl4b: fail_ubyte(6)
skip4b:
; no else
if x<0
fail_ubyte(7)
; with else
if x<0
fail_ubyte(8)
else
success++
; direct jump
if x<1
goto lbl5a
goto skip5a
lbl5a: fail_ubyte(9)
skip5a:
; indirect jump
cx16.r3 = &lbl5b
if x<1
goto cx16.r3
goto skip5b
lbl5b: fail_ubyte(10)
skip5b:
; no else
if x<1
fail_ubyte(11)
; with else
if x<1
fail_ubyte(12)
else
success++
; direct jump
if x<255
goto lbl6a
goto skip6a
lbl6a: success++
skip6a:
; indirect jump
cx16.r3 = &lbl6b
if x<255
goto cx16.r3
goto skip6b
lbl6b: success++
skip6b:
; no else
if x<255
success++
; with else
if x<255
success++
else
cx16.r0L++
x=255
; direct jump
if x<0
goto lbl7a
goto skip7a
lbl7a: fail_ubyte(13)
skip7a:
; indirect jump
cx16.r3 = &lbl7b
if x<0
goto cx16.r3
goto skip7b
lbl7b: fail_ubyte(14)
skip7b:
; no else
if x<0
fail_ubyte(15)
; with else
if x<0
fail_ubyte(16)
else
success++
; direct jump
if x<1
goto lbl8a
goto skip8a
lbl8a: fail_ubyte(17)
skip8a:
; indirect jump
cx16.r3 = &lbl8b
if x<1
goto cx16.r3
goto skip8b
lbl8b: fail_ubyte(18)
skip8b:
; no else
if x<1
fail_ubyte(19)
; with else
if x<1
fail_ubyte(20)
else
success++
; direct jump
if x<255
goto lbl9a
goto skip9a
lbl9a: fail_ubyte(21)
skip9a:
; indirect jump
cx16.r3 = &lbl9b
if x<255
goto cx16.r3
goto skip9b
lbl9b: fail_ubyte(22)
skip9b:
; no else
if x<255
fail_ubyte(23)
; with else
if x<255
fail_ubyte(24)
else
success++
verify_success(18)
}
sub test_cmp_var() {
ubyte @shared x, value
success = 0
x=0
value=0
; direct jump
if x<value
goto lbl1a
goto skip1a
lbl1a: fail_ubyte(25)
skip1a:
; indirect jump
cx16.r3 = &lbl1b
if x<value
goto cx16.r3
goto skip1b
lbl1b: fail_ubyte(26)
skip1b:
; no else
if x<value
fail_ubyte(27)
; with else
if x<value
fail_ubyte(28)
else
success++
value=1
; direct jump
if x<value
goto lbl2a
goto skip2a
lbl2a: success++
skip2a:
; indirect jump
cx16.r3 = &lbl2b
if x<value
goto cx16.r3
goto skip2b
lbl2b: success++
skip2b:
; no else
if x<value
success++
; with else
if x<value
success++
else
cx16.r0L++
value=255
; direct jump
if x<value
goto lbl3a
goto skip3a
lbl3a: success++
skip3a:
; indirect jump
cx16.r3 = &lbl3b
if x<value
goto cx16.r3
goto skip3b
lbl3b: success++
skip3b:
; no else
if x<value
success++
; with else
if x<value
success++
else
cx16.r0L++
x=1
value=0
; direct jump
if x<value
goto lbl4a
goto skip4a
lbl4a: fail_ubyte(29)
skip4a:
; indirect jump
cx16.r3 = &lbl4b
if x<value
goto cx16.r3
goto skip4b
lbl4b: fail_ubyte(30)
skip4b:
; no else
if x<value
fail_ubyte(31)
; with else
if x<value
fail_ubyte(32)
else
success++
value=1
; direct jump
if x<value
goto lbl5a
goto skip5a
lbl5a: fail_ubyte(33)
skip5a:
; indirect jump
cx16.r3 = &lbl5b
if x<value
goto cx16.r3
goto skip5b
lbl5b: fail_ubyte(34)
skip5b:
; no else
if x<value
fail_ubyte(35)
; with else
if x<value
fail_ubyte(36)
else
success++
value=255
; direct jump
if x<value
goto lbl6a
goto skip6a
lbl6a: success++
skip6a:
; indirect jump
cx16.r3 = &lbl6b
if x<value
goto cx16.r3
goto skip6b
lbl6b: success++
skip6b:
; no else
if x<value
success++
; with else
if x<value
success++
else
cx16.r0L++
x=255
value=0
; direct jump
if x<value
goto lbl7a
goto skip7a
lbl7a: fail_ubyte(37)
skip7a:
; indirect jump
cx16.r3 = &lbl7b
if x<value
goto cx16.r3
goto skip7b
lbl7b: fail_ubyte(38)
skip7b:
; no else
if x<value
fail_ubyte(39)
; with else
if x<value
fail_ubyte(40)
else
success++
value=1
; direct jump
if x<value
goto lbl8a
goto skip8a
lbl8a: fail_ubyte(41)
skip8a:
; indirect jump
cx16.r3 = &lbl8b
if x<value
goto cx16.r3
goto skip8b
lbl8b: fail_ubyte(42)
skip8b:
; no else
if x<value
fail_ubyte(43)
; with else
if x<value
fail_ubyte(44)
else
success++
value=255
; direct jump
if x<value
goto lbl9a
goto skip9a
lbl9a: fail_ubyte(45)
skip9a:
; indirect jump
cx16.r3 = &lbl9b
if x<value
goto cx16.r3
goto skip9b
lbl9b: fail_ubyte(46)
skip9b:
; no else
if x<value
fail_ubyte(47)
; with else
if x<value
fail_ubyte(48)
else
success++
verify_success(18)
}
sub test_cmp_array() {
ubyte @shared x
ubyte[] values = [0, 0]
success = 0
x=0
values[1]=0
; direct jump
if x<values[1]
goto lbl1a
goto skip1a
lbl1a: fail_ubyte(49)
skip1a:
; indirect jump
cx16.r3 = &lbl1b
if x<values[1]
goto cx16.r3
goto skip1b
lbl1b: fail_ubyte(50)
skip1b:
; no else
if x<values[1]
fail_ubyte(51)
; with else
if x<values[1]
fail_ubyte(52)
else
success++
values[1]=1
; direct jump
if x<values[1]
goto lbl2a
goto skip2a
lbl2a: success++
skip2a:
; indirect jump
cx16.r3 = &lbl2b
if x<values[1]
goto cx16.r3
goto skip2b
lbl2b: success++
skip2b:
; no else
if x<values[1]
success++
; with else
if x<values[1]
success++
else
cx16.r0L++
values[1]=255
; direct jump
if x<values[1]
goto lbl3a
goto skip3a
lbl3a: success++
skip3a:
; indirect jump
cx16.r3 = &lbl3b
if x<values[1]
goto cx16.r3
goto skip3b
lbl3b: success++
skip3b:
; no else
if x<values[1]
success++
; with else
if x<values[1]
success++
else
cx16.r0L++
x=1
values[1]=0
; direct jump
if x<values[1]
goto lbl4a
goto skip4a
lbl4a: fail_ubyte(53)
skip4a:
; indirect jump
cx16.r3 = &lbl4b
if x<values[1]
goto cx16.r3
goto skip4b
lbl4b: fail_ubyte(54)
skip4b:
; no else
if x<values[1]
fail_ubyte(55)
; with else
if x<values[1]
fail_ubyte(56)
else
success++
values[1]=1
; direct jump
if x<values[1]
goto lbl5a
goto skip5a
lbl5a: fail_ubyte(57)
skip5a:
; indirect jump
cx16.r3 = &lbl5b
if x<values[1]
goto cx16.r3
goto skip5b
lbl5b: fail_ubyte(58)
skip5b:
; no else
if x<values[1]
fail_ubyte(59)
; with else
if x<values[1]
fail_ubyte(60)
else
success++
values[1]=255
; direct jump
if x<values[1]
goto lbl6a
goto skip6a
lbl6a: success++
skip6a:
; indirect jump
cx16.r3 = &lbl6b
if x<values[1]
goto cx16.r3
goto skip6b
lbl6b: success++
skip6b:
; no else
if x<values[1]
success++
; with else
if x<values[1]
success++
else
cx16.r0L++
x=255
values[1]=0
; direct jump
if x<values[1]
goto lbl7a
goto skip7a
lbl7a: fail_ubyte(61)
skip7a:
; indirect jump
cx16.r3 = &lbl7b
if x<values[1]
goto cx16.r3
goto skip7b
lbl7b: fail_ubyte(62)
skip7b:
; no else
if x<values[1]
fail_ubyte(63)
; with else
if x<values[1]
fail_ubyte(64)
else
success++
values[1]=1
; direct jump
if x<values[1]
goto lbl8a
goto skip8a
lbl8a: fail_ubyte(65)
skip8a:
; indirect jump
cx16.r3 = &lbl8b
if x<values[1]
goto cx16.r3
goto skip8b
lbl8b: fail_ubyte(66)
skip8b:
; no else
if x<values[1]
fail_ubyte(67)
; with else
if x<values[1]
fail_ubyte(68)
else
success++
values[1]=255
; direct jump
if x<values[1]
goto lbl9a
goto skip9a
lbl9a: fail_ubyte(69)
skip9a:
; indirect jump
cx16.r3 = &lbl9b
if x<values[1]
goto cx16.r3
goto skip9b
lbl9b: fail_ubyte(70)
skip9b:
; no else
if x<values[1]
fail_ubyte(71)
; with else
if x<values[1]
fail_ubyte(72)
else
success++
verify_success(18)
}
sub test_cmp_expr() {
ubyte @shared x
cx16.r4 = 1
cx16.r5 = 1
float @shared f4 = 1.0
float @shared f5 = 1.0
success = 0
x=0
; direct jump
if x<cx16.r4L+0-cx16.r5L
goto lbl1a
goto skip1a
lbl1a: fail_ubyte(73)
skip1a:
; indirect jump
cx16.r3 = &lbl1b
if x<cx16.r4L+0-cx16.r5L
goto cx16.r3
goto skip1b
lbl1b: fail_ubyte(74)
skip1b:
; no else
if x<cx16.r4L+0-cx16.r5L
fail_ubyte(75)
; with else
if x<cx16.r4L+0-cx16.r5L
fail_ubyte(76)
else
success++
; direct jump
if x<cx16.r4L+1-cx16.r5L
goto lbl2a
goto skip2a
lbl2a: success++
skip2a:
; indirect jump
cx16.r3 = &lbl2b
if x<cx16.r4L+1-cx16.r5L
goto cx16.r3
goto skip2b
lbl2b: success++
skip2b:
; no else
if x<cx16.r4L+1-cx16.r5L
success++
; with else
if x<cx16.r4L+1-cx16.r5L
success++
else
cx16.r0L++
; direct jump
if x<cx16.r4L+255-cx16.r5L
goto lbl3a
goto skip3a
lbl3a: success++
skip3a:
; indirect jump
cx16.r3 = &lbl3b
if x<cx16.r4L+255-cx16.r5L
goto cx16.r3
goto skip3b
lbl3b: success++
skip3b:
; no else
if x<cx16.r4L+255-cx16.r5L
success++
; with else
if x<cx16.r4L+255-cx16.r5L
success++
else
cx16.r0L++
x=1
; direct jump
if x<cx16.r4L+0-cx16.r5L
goto lbl4a
goto skip4a
lbl4a: fail_ubyte(77)
skip4a:
; indirect jump
cx16.r3 = &lbl4b
if x<cx16.r4L+0-cx16.r5L
goto cx16.r3
goto skip4b
lbl4b: fail_ubyte(78)
skip4b:
; no else
if x<cx16.r4L+0-cx16.r5L
fail_ubyte(79)
; with else
if x<cx16.r4L+0-cx16.r5L
fail_ubyte(80)
else
success++
; direct jump
if x<cx16.r4L+1-cx16.r5L
goto lbl5a
goto skip5a
lbl5a: fail_ubyte(81)
skip5a:
; indirect jump
cx16.r3 = &lbl5b
if x<cx16.r4L+1-cx16.r5L
goto cx16.r3
goto skip5b
lbl5b: fail_ubyte(82)
skip5b:
; no else
if x<cx16.r4L+1-cx16.r5L
fail_ubyte(83)
; with else
if x<cx16.r4L+1-cx16.r5L
fail_ubyte(84)
else
success++
; direct jump
if x<cx16.r4L+255-cx16.r5L
goto lbl6a
goto skip6a
lbl6a: success++
skip6a:
; indirect jump
cx16.r3 = &lbl6b
if x<cx16.r4L+255-cx16.r5L
goto cx16.r3
goto skip6b
lbl6b: success++
skip6b:
; no else
if x<cx16.r4L+255-cx16.r5L
success++
; with else
if x<cx16.r4L+255-cx16.r5L
success++
else
cx16.r0L++
x=255
; direct jump
if x<cx16.r4L+0-cx16.r5L
goto lbl7a
goto skip7a
lbl7a: fail_ubyte(85)
skip7a:
; indirect jump
cx16.r3 = &lbl7b
if x<cx16.r4L+0-cx16.r5L
goto cx16.r3
goto skip7b
lbl7b: fail_ubyte(86)
skip7b:
; no else
if x<cx16.r4L+0-cx16.r5L
fail_ubyte(87)
; with else
if x<cx16.r4L+0-cx16.r5L
fail_ubyte(88)
else
success++
; direct jump
if x<cx16.r4L+1-cx16.r5L
goto lbl8a
goto skip8a
lbl8a: fail_ubyte(89)
skip8a:
; indirect jump
cx16.r3 = &lbl8b
if x<cx16.r4L+1-cx16.r5L
goto cx16.r3
goto skip8b
lbl8b: fail_ubyte(90)
skip8b:
; no else
if x<cx16.r4L+1-cx16.r5L
fail_ubyte(91)
; with else
if x<cx16.r4L+1-cx16.r5L
fail_ubyte(92)
else
success++
; direct jump
if x<cx16.r4L+255-cx16.r5L
goto lbl9a
goto skip9a
lbl9a: fail_ubyte(93)
skip9a:
; indirect jump
cx16.r3 = &lbl9b
if x<cx16.r4L+255-cx16.r5L
goto cx16.r3
goto skip9b
lbl9b: fail_ubyte(94)
skip9b:
; no else
if x<cx16.r4L+255-cx16.r5L
fail_ubyte(95)
; with else
if x<cx16.r4L+255-cx16.r5L
fail_ubyte(96)
else
success++
verify_success(18)
}
}