Adding vector-set* and dict-set* exn tests
This commit is contained in:
parent
d047557dc6
commit
3fe91f0fdd
|
@ -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)
|
||||
|
|
|
@ -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].}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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?)
|
||||
|
|
Loading…
Reference in New Issue
Block a user