Showing the changes to test (1 of 1 file). Show all
Unified · Split
| @@ -0,0 +1,59 @@ | ||
| 1 | + | |
| 2 | +; NUMBER BOUNDARIES ------------------------------------------------------------ | |
| 3 | +(define-macro (half-max-signed numtype) | |
| 4 | + (list 'ash (list numtype 1) | |
| 5 | + (list '- (list '* 8 (list 'sizeof (list 'quote numtype))) 2))) | |
| 6 | + | |
| 7 | +(define-macro (high-border-signed numtype) | |
| 8 | + (list '+ (list '- (list 'half-max-signed numtype) 1) | |
| 9 | + (list 'half-max-signed numtype))) | |
| 10 | + | |
| 11 | +(define-macro (low-border-signed numtype) | |
| 12 | + (list '- -1 (list 'high-border-signed numtype))) | |
| 13 | + | |
| 14 | +(define-macro (low-border numtype) | |
| 15 | + (list 'if (list '< (list numtype -1) 1) | |
| 16 | + (list 'low-border-signed numtype) | |
| 17 | + (list numtype 0))) | |
| 18 | + | |
| 19 | +(define-macro (high-border numtype) | |
| 20 | + (list 'lognot (list 'low-border numtype))) | |
| 21 | + ;(list numtype (list 'lognot (list 'low-border numtype)))) | |
| 22 | + | |
| 23 | +(define-macro (number-borders numtype) | |
| 24 | + (list 'cons (list 'low-border numtype) | |
| 25 | + (list 'high-border numtype))) | |
| 26 | + | |
| 27 | +; TESTS ------------------------------------------------------------------------ | |
| 28 | +(princ "---\n") | |
| 29 | +(princ "int8 : " (number-borders int8) "\n") | |
| 30 | +(princ "int16 : " (number-borders int16) "\n") | |
| 31 | +(princ "int32 : " (number-borders int32) "\n") | |
| 32 | +(princ "int64 : " (number-borders int64) "\n") | |
| 33 | +(princ "uint8 : " (number-borders uint8) "\n") | |
| 34 | +(princ "uint16 : " (number-borders uint16) "\n") | |
| 35 | +(princ "uint32 : " (number-borders uint32) "\n") | |
| 36 | +(princ "uint64 : " (number-borders uint64) "\n") | |
| 37 | +(princ "---\n") | |
| 38 | + | |
| 39 | +(assert (= 128 (+ (high-border int8) 1))) | |
| 40 | +(assert (= -129 (- (low-border int8) 1))) | |
| 41 | +(assert (= 32768 (+ (high-border int16) 1))) | |
| 42 | +(assert (= -32769 (- (low-border int16) 1))) | |
| 43 | +(assert (= 2147483648 (+ (high-border int32) 1))) | |
| 44 | +(assert (= -2147483649 (- (low-border int32) 1))) | |
| 45 | +(assert (= 9223372036854775808 (+ (high-border int64) 1))) | |
| 46 | +;(assert (= -9223372036854775809 (- (low-border int64) 1))) ;OVERFLOW | |
| 47 | + | |
| 48 | +(assert (= 256 (+ (high-border uint8) 1))) | |
| 49 | +(assert (= -1 (- (low-border uint8) 1))) | |
| 50 | +(assert (= 65536 (+ (high-border uint16) 1))) | |
| 51 | +(assert (= -1 (- (low-border uint16) 1))) | |
| 52 | +(assert (= 4294967296 (+ (high-border uint32) 1))) | |
| 53 | +(assert (= -1 (- (low-border uint32) 1))) | |
| 54 | +;(assert (= 18446744073709551616 (+ (high-border uint64) 1))) ;OVERFLOW | |
| 55 | +(assert (= -1 (- (low-border uint64) 1))) | |
| 56 | + | |
| 57 | +(princ "all tests pass\n\n") | |
| 58 | +#t | |
| 59 | + | |