Adding vector-set* and dict-set* exn tests

This commit is contained in:
Jay McCarthy 2010-08-12 09:24:42 -06:00
parent d047557dc6
commit 3fe91f0fdd
4 changed files with 32 additions and 3 deletions

View File

@ -1,6 +1,6 @@
#lang racket/base
(provide vector-copy vector-map vector-map! vector-append
(provide vector-set*! vector-copy vector-map vector-map! vector-append
vector-take vector-drop vector-split-at
vector-take-right vector-drop-right vector-split-at-right
vector-filter vector-filter-not
@ -8,6 +8,14 @@
vector-member vector-memq vector-memv)
(require racket/unsafe/ops)
(define (vector-set*! v . pairs)
(unless (even? (length pairs))
(error 'vector-set*! "expected an even number of association elements, but received an odd number: ~e" pairs))
(let loop ([pairs pairs])
(unless (null? pairs)
(vector-set! v (car pairs) (cadr pairs))
(loop (cddr pairs)))))
;; unchecked version of `vector-copy'
;; used at the implementation of many functions in this file
(define (vector-copy* v start end)

View File

@ -67,8 +67,17 @@ slot is position @racket[0], and the last slot is one less than
void?]{
Updates the slot @racket[pos] of @racket[vec] to contain @racket[v].}
@defproc[(vector-set*! [vec (and/c vector? (not/c immutable?))]
[pos exact-nonnegative-integer?]
[v any/c]
...
...)
void?]{
Updates each slot @racket[pos] of @racket[vec] to contain each @racket[v].
The update takes place from the left so later updates overwrite earlier updates.}
@defproc[(vector->list [vec vector?]) list?]{
Returns a list with the same length and elements as @racket[vec].}

View File

@ -53,6 +53,7 @@
(test (void) dict-set! d 1 "ONE")
(test "ONE" dict-ref d 1)
(test (void) dict-set*! d 1 (gensym) 1 "TWO")
(err/rt-test (dict-set*! d 1) exn:fail?)
(test "TWO" dict-ref d 1)
(test "TWO" dict-ref! d 1 (gensym)))
(let ([cnt (dict-count d)]
@ -89,9 +90,11 @@
(begin
(err/rt-test (dict-set* smaller 1 val))
(dict-set*! smaller 1 (gensym) 1 val)
(err/rt-test (dict-set*! smaller 1) exn:fail?)
d)
(begin
(err/rt-test (dict-set*! smaller 1 val))
(err/rt-test (dict-set* smaller 1) exn:fail?)
(dict-set* smaller 1 (gensym) 1 val)))])
(test cnt dict-count bigger)
(when (eq? val 'one)

View File

@ -24,10 +24,18 @@
(err/rt-test (vector-ref #(4 5 6) -1))
(err/rt-test (vector-ref #(4 5 6) 2.0))
(err/rt-test (vector-ref #(4 5 6) "2"))
(test '#(0 ("Sue" "Sue") "Anna") 'vector-set
(test '#(0 ("Sue" "Sue") "Anna") 'vector-set!
(let ((vec (vector 0 '(2 2 2 2) "Anna")))
(vector-set! vec 1 '("Sue" "Sue"))
vec))
(test '#(0 1 2) 'vector-set*!
(let ([vec (vector #f #f #f)])
(vector-set*! vec
0 (gensym) 0 0
1 (gensym) 1 1
2 (gensym) 2 2)
vec))
(test '#(hi hi) make-vector 2 'hi)
(test '#() make-vector 0)
(test '#() make-vector 0 'a)
@ -39,6 +47,7 @@
(err/rt-test (make-vector -1 'a))
(err/rt-test (make-vector 1000000000000000000000 'a) exn:fail:out-of-memory?)
(arity-test vector-set! 3 3)
(err/rt-test (vector-set*! #() 0 'x 1) exn:fail?)
(err/rt-test (vector-set! #() 0 'x) exn:application:mismatch?)
(err/rt-test (vector-set! #(1 2 3) -1 'x))
(err/rt-test (vector-set! #(1 2 3) 3 'x) exn:application:mismatch?)