Artifact 4a5f2429e1a7d9c0dc671d8121074c3ce6d75980:
- File fmt/test-round.scm — part of check-in [80c8c83034] at 2016-07-07 18:11:39 on branch trunk — initial import (user: ovenpasta@pizzahack.eu size: 705)
0000: 0a 28 75 73 65 20 66 6d 74 20 74 65 73 74 29 0a .(use fmt test). 0010: 3b 3b 28 75 73 65 20 6e 75 6d 62 65 72 73 29 20 ;;(use numbers) 0020: 3b 20 74 65 73 74 20 77 69 74 68 20 61 6e 64 20 ; test with and 0030: 77 69 74 68 6f 75 74 20 6e 75 6d 62 65 72 73 20 without numbers 0040: 76 69 61 20 2d 52 20 6e 75 6d 62 65 72 73 0a 0a via -R numbers.. 0050: 28 64 65 66 69 6e 65 20 28 63 68 65 63 6b 2d 72 (define (check-r 0060: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6e 29 epresentation n) 0070: 0a 20 20 28 64 65 66 69 6e 65 20 70 65 6e 63 65 . (define pence 0080: 0a 20 20 20 20 28 69 6e 65 78 61 63 74 2d 3e 65 . (inexact->e 0090: 78 61 63 74 20 28 72 6f 75 6e 64 20 28 2f 20 28 xact (round (/ ( 00a0: 6d 6f 64 75 6c 6f 20 6e 20 31 30 30 30 29 20 31 modulo n 1000) 1 00b0: 30 29 29 29 29 0a 20 20 28 64 65 66 69 6e 65 20 0)))). (define 00c0: 70 6f 75 6e 64 73 20 28 71 75 6f 74 69 65 6e 74 pounds (quotient 00d0: 20 6e 20 31 30 30 30 29 29 0a 0a 20 20 28 69 66 n 1000)).. (if 00e0: 20 28 3e 20 70 65 6e 63 65 20 39 39 29 0a 20 20 (> pence 99). 00f0: 20 20 20 20 28 62 65 67 69 6e 0a 20 20 20 20 20 (begin. 0100: 20 20 20 28 73 65 74 21 20 70 65 6e 63 65 20 28 (set! pence ( 0110: 2d 20 31 30 30 20 70 65 6e 63 65 29 29 0a 20 20 - 100 pence)). 0120: 20 20 20 20 20 20 28 73 65 74 21 20 70 6f 75 6e (set! poun 0130: 64 73 20 28 61 64 64 31 20 70 6f 75 6e 64 73 29 ds (add1 pounds) 0140: 29 29 29 0a 0a 20 20 28 64 65 66 69 6e 65 20 65 ))).. (define e 0150: 78 70 65 63 74 65 64 2d 72 65 73 75 6c 74 0a 20 xpected-result. 0160: 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 28 28 (cond. (( 0170: 3d 20 70 65 6e 63 65 20 30 29 20 28 73 70 72 69 = pence 0) (spri 0180: 6e 74 66 20 22 7e 53 2e 30 30 22 20 70 6f 75 6e ntf "~S.00" poun 0190: 64 73 29 29 0a 20 20 20 20 20 28 28 3c 20 70 65 ds)). ((< pe 01a0: 6e 63 65 20 31 30 29 20 28 73 70 72 69 6e 74 66 nce 10) (sprintf 01b0: 20 22 7e 53 2e 30 7e 53 22 20 70 6f 75 6e 64 73 "~S.0~S" pounds 01c0: 20 70 65 6e 63 65 29 29 0a 20 20 20 20 20 28 65 pence)). (e 01d0: 6c 73 65 20 28 73 70 72 69 6e 74 66 20 22 7e 53 lse (sprintf "~S 01e0: 2e 7e 53 22 20 70 6f 75 6e 64 73 20 70 65 6e 63 .~S" pounds penc 01f0: 65 29 29 29 29 0a 0a 20 20 28 74 65 73 74 20 28 e)))).. (test ( 0200: 73 70 72 69 6e 74 66 20 22 7e 53 20 3d 20 7e 53 sprintf "~S = ~S 0210: 3f 22 20 28 65 78 61 63 74 2d 3e 69 6e 65 78 61 ?" (exact->inexa 0220: 63 74 20 28 2f 20 6e 20 31 30 30 30 29 29 20 65 ct (/ n 1000)) e 0230: 78 70 65 63 74 65 64 2d 72 65 73 75 6c 74 29 0a xpected-result). 0240: 20 20 20 20 20 20 65 78 70 65 63 74 65 64 2d 72 expected-r 0250: 65 73 75 6c 74 0a 20 20 20 20 28 66 6d 74 20 23 esult. (fmt # 0260: 66 20 28 6e 75 6d 20 28 2f 20 6e 20 31 30 30 30 f (num (/ n 1000 0270: 29 20 31 30 20 32 29 29 29 29 0a 0a 28 74 65 73 ) 10 2))))..(tes 0280: 74 2d 62 65 67 69 6e 29 0a 28 66 6f 72 2d 65 61 t-begin).(for-ea 0290: 63 68 20 63 68 65 63 6b 2d 72 65 70 72 65 73 65 ch check-represe 02a0: 6e 74 61 74 69 6f 6e 20 28 69 6f 74 61 20 31 30 ntation (iota 10 02b0: 30 30 30 29 29 0a 28 74 65 73 74 2d 65 6e 64 29 000)).(test-end) 02c0: 0a .