1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
#!/usr/bin/picolisp /usr/lib/picolisp/lib.l
# 25apr11abu
# misc/bigtest <seed>
(load "@lib/misc.l")
(seed (car (argv)))
# Random patterns:
# cnt
# xxx0000000000000000000000000xxxx0000000000000000000000000xxx
# (| 7 (>> -28 15) (>> -57 7))
#
# xxx1111111111111111111111111xxxx1111111111111111111111111xxx
# 1FFFFFF0FFFFFF8
#
#
# dig
# xxx000000000000000000000000000xxxx000000000000000000000000000xxx
# (| 7 (>> -30 15) (>> -61 7))
#
# xxx111111111111111111111111111xxxx111111111111111111111111111xxx
# 1FFFFFFC3FFFFFF8
(de rnd ()
(let (Big (| (rand 0 7) (>> -28 (rand 0 15)) (>> -57 (rand 0 7))) N -60)
(when (rand T)
(setq Big (| Big `(hex "1FFFFFF0FFFFFF8"))) )
(do (rand 0 2)
(let Dig (| (rand 0 7) (>> -30 (rand 0 15)) (>> -61 (rand 0 7)))
(when (rand T)
(setq Dig (| Dig `(hex "1FFFFFFC3FFFFFF8"))) )
(setq Big (| Big (>> N Dig)))
(dec 'N 64) ) )
(if (rand T) Big (- Big)) ) )
(de test1 (S N1)
(let (N (read) X (eval (list S N1)))
(unless (= N X)
(prinl "^J" N ": (" S " " N1 ") -> " X)
(bye) ) ) )
(de test2 (S N1 N2)
(let (N (read) X (eval (list S N1 N2)))
(unless (= N X)
(prinl "^J" N ": (" S " " N1 " " N2 ") -> " X)
(bye) ) ) )
(de cmp2 (S N1 N2)
(let (N (n0 (read)) X (eval (list S N1 N2)))
(unless (== N X)
(prinl "^J" N ": (" S " " N1 " " N2 ") -> " X)
(bye) ) ) )
(sys "BC_LINE_LENGTH" "200")
(pipe
(out '("/usr/bin/bc")
(do 10000000
(setq N1 (rnd))
(while (=0 (setq N2 (rnd))))
(prinl N1)
(prinl N2)
(prinl N1 " + " N2)
(prinl N1 " + 1")
(prinl N1 " + 1")
(prinl N1 " - " N2)
(prinl N1 " - 1")
(prinl N1 " - 1")
(prinl N1 " * " N2)
(prinl N1 " * 2")
(prinl N1 " % " N2)
(prinl N1 " / " N2)
(prinl N1 " / 2")
(prinl N1 " >= " N2)
(prinl N1 " > " N2)
(prinl "sqrt(" (abs N1) ")") ) )
(do 100
(do 100000
(setq
N1 (read)
N2 (read) )
(test2 '+ N1 N2)
(test2 '+ N1 1)
(test1 'inc N1)
(test2 '- N1 N2)
(test2 '- N1 1)
(test1 'dec N1)
(test2 '* N1 N2)
(test2 '* N1 2)
(test2 '% N1 N2)
(test2 '/ N1 N2)
(test2 '/ N1 2)
(cmp2 '>= N1 N2)
(cmp2 '> N1 N2)
(test1 'sqrt (abs N1)) )
(prin ".")
(flush) )
(prinl) )
(bye)
|