]> ocean-lang.org Git - ocean/blobdiff - csrc/scanner-tests.mdc
scanner: improve number parsing.
[ocean] / csrc / scanner-tests.mdc
index 9756b08b708fd54285eaa9a5b76a46548c17d2b7..95c3556d2a8b01c1a22cf014fe191da23731ea7a 100644 (file)
@@ -40,15 +40,15 @@ about each test.
                        coverage/scanner.mdc.gcov
                @rm -f .tmp*
 
-       coverage_scanner: scanner.c libscanner.c
+       coverage_scanner: scanner.c libscanner.c libmdcode.o libnumber.o libstring.o
                $(CC) $(CFLAGS) --coverage -fprofile-dir=coverage -o coverage_scanner \
                        scanner.c libscanner.c \
                        libmdcode.o libnumber.o libstring.o -licuuc -lgmp
 
-
 ## Basic tests
 
 Some simple tests... maybe all tests are simple.
+Include a special test for numbers, as they are interesting.
 
 ###### test list
        scanner_tests += "test1,if,then,+,-"
@@ -145,11 +145,11 @@ Some simple tests... maybe all tests are simple.
        18:0 newline()
        18:0 number(1234)  1234
        18:4 mark(,)
-       18:7 number(1.234 )  617/500
+       18:7 number(1.234)  617/500
        18:13 -
        18:14 number(123.456e45)  123456000000000000000000000000000000000000000000
        19:0 newline()
-       19:0 number(0x1234 )  4660
+       19:0 number(0x1234)  4660
        19:7 +
        19:10 number(0x543p+3)  10776
        20:0 newline()
@@ -232,11 +232,11 @@ Some simple tests... maybe all tests are simple.
        18:0 newline()
        18:0 number(1234)  1234
        18:4 mark(,)
-       18:7 number(1.234 )  617/500
+       18:7 number(1.234)  617/500
        18:13 -
        18:14 number(123.456e45)  123456000000000000000000000000000000000000000000
        19:0 newline()
-       19:0 number(0x1234 )  4660
+       19:0 number(0x1234)  4660
        19:7 +
        19:10 number(0x543p+3)  10776
        20:0 newline()
@@ -308,11 +308,11 @@ Some simple tests... maybe all tests are simple.
        17:21 newline()
        18:0 number(1234)  1234
        18:4 mark(,)
-       18:7 number(1.234 )  617/500
+       18:7 number(1.234)  617/500
        18:13 -
        18:14 number(123.456e45)  123456000000000000000000000000000000000000000000
        18:24 newline()
-       19:0 number(0x1234 )  4660
+       19:0 number(0x1234)  4660
        19:7 +
        19:10 number(0x543p+3)  10776
        19:18 newline()
@@ -368,10 +368,10 @@ Some simple tests... maybe all tests are simple.
        17:16 ident(while)
        18:0 number(1234)  1234
        18:4 mark(,)
-       18:7 number(1.234 )  617/500
+       18:7 number(1.234)  617/500
        18:13 -
        18:14 number(123.456e45)  123456000000000000000000000000000000000000000000
-       19:0 number(0x1234 )  4660
+       19:0 number(0x1234)  4660
        19:7 +
        19:10 number(0x543p+3)  10776
        20:0 string("This is a string")  This is a string
@@ -420,10 +420,10 @@ Some simple tests... maybe all tests are simple.
        17:16 ident(while)
        18:0 number(1234)  1234
        18:4 mark(,)
-       18:7 number(1.234 )  617/500
+       18:7 number(1.234)  617/500
        18:13 -
        18:14 number(123.456e45)  123456000000000000000000000000000000000000000000
-       19:0 number(0x1234 )  4660
+       19:0 number(0x1234)  4660
        19:7 +
        19:10 number(0x543p+3)  10776
        20:0 string("This is a string")  This is a string
@@ -469,10 +469,10 @@ Some simple tests... maybe all tests are simple.
        17:16 ident(while)
        18:0 number(1234)  1234
        18:4 mark(,)
-       18:7 number(1.234 )  617/500
+       18:7 number(1.234)  617/500
        18:13 -
        18:14 number(123.456e45)  123456000000000000000000000000000000000000000000
-       19:0 number(0x1234 )  4660
+       19:0 number(0x1234)  4660
        19:7 +
        19:10 number(0x543p+3)  10776
        20:0 mark(")
@@ -514,6 +514,91 @@ Some simple tests... maybe all tests are simple.
        31:12 ident(divisor)
        32:0 eof()
 
+###### test list
+       scanner_tests += "testnum"
+
+###### test: testnum
+       12345
+       1234.56
+       1234.56e7
+       1234.56e-7
+       0x1234
+       0x123,456
+       0o777
+       0o111.111p4
+       0b11011110p3
+
+       123 456 789
+       0x1234_5678_9abc
+
+       "Now for some non-number"
+       1234p4
+       12-34
+       01234
+       0c1234
+       123.456e1a
+       123.e4
+       0x123 456
+       0b1234
+       123_345_.34
+       .75
+
+###### output: testnum
+       Tokenizing: 
+       2:0 number(12345)  12345
+       3:0 newline()
+       3:0 number(1234.56)  30864/25
+       4:0 newline()
+       4:0 number(1234.56e7)  12345600000
+       5:0 newline()
+       5:0 number(1234.56e-7)  1929/15625000
+       6:0 newline()
+       6:0 number(0x1234)  4660
+       7:0 newline()
+       7:0 number(0x123,456)  596523/2048
+       8:0 newline()
+       8:0 number(0o777)  511
+       9:0 newline()
+       9:0 number(0o111.111p4)  37449/32
+       10:0 newline()
+       10:0 number(0b11011110p3)  1776
+       12:0 newline()
+       12:0 newline()
+       12:0 number(123 456 789)  123456789
+       13:0 newline()
+       13:0 number(0x1234_5678_9abc)  20015998343868
+       15:0 newline()
+       15:0 newline()
+       15:0 string("Now for some non-..)  Now for some non-n..
+       16:0 newline()
+       16:0 number(1234p4) BAD NUMBER
+       17:0 newline()
+       17:0 number(12)  12
+       17:2 mark(-)
+       17:3 number(34)  34
+       18:0 newline()
+       18:0 number(01234) BAD NUMBER
+       19:0 newline()
+       19:0 number(0c1234) BAD NUMBER
+       20:0 newline()
+       20:0 number(123.456e1a) a 30864/25
+       21:0 newline()
+       21:0 number(123.e4)  1230000
+       22:0 newline()
+       22:0 number(0x123 456) BAD NUMBER
+       23:0 newline()
+       23:0 number(0b1234) BAD NUMBER
+       24:0 newline()
+       24:0 number(123_345)  123345
+       24:7 ident(_)
+       24:8 mark(.)
+       24:9 number(34)  34
+       25:0 newline()
+       25:0 mark(.)
+       25:1 number(75)  75
+       26:0 newline()
+       26:0 eof()
+
 ## Error tests
 
 Now to test for some errors ... though things I thought would be errors