mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 12:20:26 +02:00
203 lines
6.1 KiB
Scheme
203 lines
6.1 KiB
Scheme
;;;; srfi-4.test --- Test suite for Guile's SRFI-4 functions. -*- scheme -*-
|
|
;;;; Martin Grabmueller, 2001-06-26
|
|
;;;;
|
|
;;;; Copyright (C) 2001 Free Software Foundation, Inc.
|
|
;;;;
|
|
;;;; This program is free software; you can redistribute it and/or modify
|
|
;;;; it under the terms of the GNU General Public License as published by
|
|
;;;; the Free Software Foundation; either version 2, or (at your option)
|
|
;;;; any later version.
|
|
;;;;
|
|
;;;; This program is distributed in the hope that it will be useful,
|
|
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;;;; GNU General Public License for more details.
|
|
;;;;
|
|
;;;; You should have received a copy of the GNU General Public License
|
|
;;;; along with this software; see the file COPYING. If not, write to
|
|
;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
;;;; Boston, MA 02110-1301 USA
|
|
|
|
(use-modules (srfi srfi-4))
|
|
|
|
(define (test-uvector kind u? uconstruct umake uset uref ulen
|
|
uvec->list list->uvec
|
|
low high)
|
|
|
|
(define (test-passthrough-write umake value)
|
|
(pass-if (string-append kind " vector write->read idempotency")
|
|
(let* ((v (umake 5 value))
|
|
(str-rep (object->string v))
|
|
(read-v (with-input-from-string str-rep read)))
|
|
(equal? v read-v))))
|
|
|
|
(with-test-prefix (string-append kind " vector")
|
|
|
|
(pass-if (string-append kind "vector? success")
|
|
(u? (umake 0)))
|
|
|
|
(pass-if (string-append kind "vector? failure")
|
|
(not (u? 0)))
|
|
|
|
(pass-if (string-append kind "vector-length success 1")
|
|
(= (ulen (uconstruct)) 0))
|
|
|
|
(pass-if (string-append kind "vector-length success 2")
|
|
(= (ulen (uconstruct 3)) 1))
|
|
|
|
(pass-if (string-append kind "vector-length failure")
|
|
(not (= (ulen (uconstruct 3)) 3)))
|
|
|
|
(pass-if (string-append kind "vector-ref")
|
|
(= (uref (uconstruct 1 2 3) 1) 2))
|
|
|
|
(pass-if (string-append kind "vector->list/list->vector")
|
|
(equal? (uvec->list (uconstruct 1 2 3 4))
|
|
(uvec->list (list->uvec '(1 2 3 4)))))
|
|
|
|
(test-passthrough-write umake 0)
|
|
(test-passthrough-write umake 1)
|
|
|
|
(if (and low high)
|
|
;; make sure we can store and retrieve values, including limits.
|
|
(let ((testvals `(("0" 0)
|
|
("low" ,low)
|
|
("high" ,high))))
|
|
|
|
(test-passthrough-write umake low)
|
|
(test-passthrough-write umake high)
|
|
|
|
(for-each
|
|
(lambda (test)
|
|
(pass-if (string-append (string-append "fill " (car test)))
|
|
(= (cadr test) (uref (umake 1 (cadr test)) 0)))
|
|
(pass-if (string-append "set " (car test))
|
|
(let ((vec (umake 1)))
|
|
(uset vec 0 (cadr test))
|
|
(= (cadr test) (uref vec 0)))))
|
|
testvals)))
|
|
|
|
(if (and low high)
|
|
;; make sure we can't store and retrieve values outside the limits
|
|
(let ((testvals `(("(- low 1)" ,(- low 1))
|
|
("(+ high 1)" ,(+ high 1)))))
|
|
|
|
(for-each
|
|
(lambda (test)
|
|
(pass-if-exception (string-append "fill " (car test))
|
|
exception:out-of-range
|
|
(umake 1 (cadr test)))
|
|
(pass-if-exception (string-append "set " (car test))
|
|
exception:out-of-range
|
|
(uset (umake 1) 0 (cadr test))))
|
|
testvals)))))
|
|
|
|
(test-uvector "u8"
|
|
u8vector?
|
|
u8vector
|
|
make-u8vector
|
|
u8vector-set!
|
|
u8vector-ref
|
|
u8vector-length
|
|
u8vector->list
|
|
list->u8vector
|
|
0 255)
|
|
|
|
(test-uvector "s8"
|
|
s8vector?
|
|
s8vector
|
|
make-s8vector
|
|
s8vector-set!
|
|
s8vector-ref
|
|
s8vector-length
|
|
s8vector->list
|
|
list->s8vector
|
|
-128 127)
|
|
|
|
(test-uvector "u16"
|
|
u16vector?
|
|
u16vector
|
|
make-u16vector
|
|
u16vector-set!
|
|
u16vector-ref
|
|
u16vector-length
|
|
u16vector->list
|
|
list->u16vector
|
|
0 65535)
|
|
|
|
(test-uvector "s16"
|
|
s16vector?
|
|
s16vector
|
|
make-s16vector
|
|
s16vector-set!
|
|
s16vector-ref
|
|
s16vector-length
|
|
s16vector->list
|
|
list->s16vector
|
|
-32768 32767)
|
|
|
|
(test-uvector "u32"
|
|
u32vector?
|
|
u32vector
|
|
make-u32vector
|
|
u32vector-set!
|
|
u32vector-ref
|
|
u32vector-length
|
|
u32vector->list
|
|
list->u32vector
|
|
0 (- (expt 2 32) 1))
|
|
|
|
(test-uvector "s32"
|
|
s32vector?
|
|
s32vector
|
|
make-s32vector
|
|
s32vector-set!
|
|
s32vector-ref
|
|
s32vector-length
|
|
s32vector->list
|
|
list->s32vector
|
|
(- (expt 2 31)) (- (expt 2 31) 1))
|
|
|
|
(test-uvector "u64"
|
|
u64vector?
|
|
u64vector
|
|
make-u64vector
|
|
u64vector-set!
|
|
u64vector-ref
|
|
u64vector-length
|
|
u64vector->list
|
|
list->u64vector
|
|
0 (- (expt 2 64) 1))
|
|
|
|
(test-uvector "s64"
|
|
s64vector?
|
|
s64vector
|
|
make-s64vector
|
|
s64vector-set!
|
|
s64vector-ref
|
|
s64vector-length
|
|
s64vector->list
|
|
list->s64vector
|
|
(- (expt 2 63)) (- (expt 2 63) 1))
|
|
|
|
(test-uvector "f32"
|
|
f32vector?
|
|
f32vector
|
|
make-f32vector
|
|
f32vector-set!
|
|
f32vector-ref
|
|
f32vector-length
|
|
f32vector->list
|
|
list->f32vector
|
|
#f #f)
|
|
|
|
(test-uvector "f64"
|
|
f64vector?
|
|
f64vector
|
|
make-f64vector
|
|
f64vector-set!
|
|
f64vector-ref
|
|
f64vector-length
|
|
f64vector->list
|
|
list->f64vector
|
|
#f #f)
|