~ chicken-core (chicken-5) /tests/srfi-4-tests.scm
Trap1;;;; srfi-4-tests.scm234(import (srfi 4) (chicken port))5(import-for-syntax (chicken base))67(define-syntax test18 (er-macro-transformer9 (lambda (x r c)10 (let* ((t (strip-syntax (cadr x)))11 (name (symbol->string (strip-syntax t)))12 (min (caddr x))13 (max (cadddr x)))14 (define (conc op)15 (string->symbol (string-append name op)))16 `(let ((x (,(conc "vector") 100 101)))17 (assert (eqv? 100 (,(conc "vector-ref") x 0)))18 (assert (,(conc "vector?") x))19 (assert (number-vector? x))20 ;; Test direct setter and ref21 (,(conc "vector-set!") x 1 99)22 (assert (eqv? 99 (,(conc "vector-ref") x 1)))23 ;; Test SRFI-17 generalised set! and ref24 (set! (,(conc "vector-ref") x 0) 127)25 (assert (eqv? 127 (,(conc "vector-ref") x 0)))26 ;; Ensure length is okay27 (assert (= 2 (,(conc "vector-length") x)))28 (assert29 (let ((result (,(conc "vector->list") x)))30 (and (eqv? 127 (car result))31 (eqv? 99 (cadr result))))))))))3233(define-syntax test-subv34 (er-macro-transformer35 (lambda (x r c)36 (let* ((t (strip-syntax (cadr x)))37 (make (symbol-append 'make- t 'vector))38 (subv (symbol-append 'sub t 'vector))39 (len (symbol-append t 'vector-length)))40 `(let ((x (,make 10)))41 (assert (eq? (,len (,subv x 0 5)) 5)))))))4243(test-subv u8)44(test-subv s8)45(test-subv u16)46(test-subv s16)47(test-subv u32)48(test-subv s32)49(test-subv u64)50(test-subv s64)5152(test1 u8 0 255)53(test1 u16 0 65535)54(test1 u32 0 4294967295)55(test1 u64 0 18446744073709551615)56(test1 s8 -128 127)57(test1 s16 -32768 32767)58(test1 s32 -2147483648 2147483647)59(test1 s64 -9223372036854775808 9223372036854775807)6061(define-syntax test262 (er-macro-transformer63 (lambda (x r c)64 (let* ((t (strip-syntax (cadr x)))65 (name (symbol->string (strip-syntax t))))66 (define (conc op)67 (string->symbol (string-append name op)))68 `(let ((x (,(conc "vector") 100 101.0)))69 (assert (eqv? 100.0 (,(conc "vector-ref") x 0)))70 (assert (eqv? 101.0 (,(conc "vector-ref") x 1)))71 (assert (,(conc "vector?") x))72 (assert (number-vector? x))73 (,(conc "vector-set!") x 1 99)74 (assert (eqv? 99.0 (,(conc "vector-ref") x 1)))75 (assert (= 2 (,(conc "vector-length") x)))76 (assert77 (let ((result (,(conc "vector->list") x)))78 (and (eqv? 100.0 (car result))79 (eqv? 99.0 (cadr result))))))))))8081(test2 f32)82(test2 f64)8384;; Test implicit quoting/self evaluation85(assert (equal? #u8(1 2 3) '#u8(1 2 3)))86(assert (equal? #s8(-1 2 3) '#s8(-1 2 3)))87(assert (equal? #u16(1 2 3) '#u16(1 2 3)))88(assert (equal? #s16(-1 2 3) '#s16(-1 2 3)))89(assert (equal? #u32(1 2 3) '#u32(1 2 3)))90(assert (equal? #u64(1 2 3) '#u64(1 2 3)))91(assert (equal? #s32(-1 2 3) '#s32(-1 2 3)))92(assert (equal? #s64(-1 2 3) '#s64(-1 2 3)))93(assert (equal? #f32(1 2 3) '#f32(1 2 3)))94(assert (equal? #f64(-1 2 3) '#f64(-1 2 3)))9596;; Ticket #1124: read-u8vector! w/o length, dest smaller than source.97(let ((input (open-input-string "abcdefghijklmnopqrstuvwxyz"))98 (u8vec (make-u8vector 10)))99 (assert (= 10 (read-u8vector! #f u8vec input)))100 (assert (equal? u8vec #u8(97 98 99 100 101 102 103 104 105 106)))101 (assert (= 5 (read-u8vector! #f u8vec input 5)))102 (assert (equal? u8vec #u8(97 98 99 100 101 107 108 109 110 111)))103 (assert (= 5 (read-u8vector! 5 u8vec input)))104 (assert (equal? u8vec #u8(112 113 114 115 116 107 108 109 110 111)))105 (assert (= 6 (read-u8vector! 10 u8vec input)))106 (assert (equal? u8vec #u8(117 118 119 120 121 122 108 109 110 111))))107108(let ((input (open-input-string "abcdefghijklmnopqrs")))109 (assert (equal? (read-u8vector 5 input)110 #u8(97 98 99 100 101)))111 (assert (equal? (read-u8vector 5 input) #u8(102 103 104 105 106)))112 (assert (equal? (read-u8vector #f input)113 #u8(107 108 109 110 111 112 113 114 115)))114 (with-input-from-string "abcdefghijklmnopqrs"115 (lambda ()116 (assert (equal? (read-u8vector 5)117 #u8(97 98 99 100 101)))118 (assert (equal? (read-u8vector 5) #u8(102 103 104 105 106)))119 (assert (equal? (read-u8vector)120 #u8(107 108 109 110 111 112 113 114 115))))))121122(assert (string=?123 "abc"124 (with-output-to-string125 (lambda ()126 (write-u8vector #u8(97 98 99))))))127128(assert (string=?129 "bc"130 (with-output-to-string131 (lambda ()132 (write-u8vector #u8(97 98 99) (current-output-port) 1)))))133134(assert (string=?135 "a"136 (with-output-to-string137 (lambda ()138 (write-u8vector #u8(97 98 99) (current-output-port) 0 1)))))139140(assert (string=?141 "b"142 (with-output-to-string143 (lambda ()144 (write-u8vector #u8(97 98 99) (current-output-port) 1 2)))))145146(assert (string=?147 ""148 (with-output-to-string149 (lambda ()150 (write-u8vector #u8())))))151152; make sure the N parameter is a fixnum153(assert154 (handle-exceptions exn #t155 (make-f64vector 4.0) #f))156; catch the overflow157(assert158 (handle-exceptions exn #t159 (make-f64vector most-positive-fixnum) #f))160161;; test special read-syntax162163(let ((cases '(("#u8(1 2 #\\A)" #u8(1 2 65))164 ("#u8(\"abc\")" #u8(97 98 99))165 ("#u8\"abc\"" #u8(97 98 99))166 ("#u8(\"\")" #u8())167 ("#u8(\"\" \"a\")" #u8(97))168 ("#u8(\"a\" \"\")" #u8(97))169 ("#u8\"\"" #u8())170 ("#s8\"\"" #s8())171 ("#u64(\" \" #\\! 1 \"A\")" #u64(32 33 1 65))172 ("#u64(\" \" #\\! \"A\" 1)" #u64(32 33 65 1)))))173 (do ((cs cases (cdr cs)))174 ((null? cs))175 (let ((x (with-input-from-string (caar cs) read)))176 (unless (equal? x (cadar cs))177 (error "failed" x (cadar cs))))))