Skip to content

Commit 6509b94

Browse files
author
Andrew Kent
committed
more tests
1 parent d06e93c commit 6509b94

File tree

3 files changed

+106
-2
lines changed

3 files changed

+106
-2
lines changed

typed-racket-test/succeed/rest-star-hash-examples.rkt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#lang typed/racket/base
22

3+
(provide my-hash my-hash-set*)
4+
35
(require racket/match)
46

57
(define-type (KV-List K V) (Rec T (U Null (List* K V T))))
@@ -13,6 +15,16 @@
1315
(loop (hash-set h k v) rst)]
1416
[_ h])))
1517

18+
(: my-mutable-hash (All (K V) (->* () #:rest-star (K V) (Mutable-HashTable K V))))
19+
(define (my-mutable-hash . k/v-list)
20+
(define h : (Mutable-HashTable K V) (make-hash))
21+
(let loop! ([to-add : (KV-List K V) k/v-list])
22+
(match to-add
23+
[(cons k (cons v rst))
24+
(hash-set! h k v)
25+
(loop! rst)]
26+
[_ h])))
27+
1628

1729
(: my-hash-set* (All (K V) (->* ((Immutable-HashTable K V)) #:rest-star (K V) (Immutable-HashTable K V))))
1830
(define (my-hash-set* orig . k/v-list)
@@ -23,6 +35,18 @@
2335
(loop (hash-set h k v) rst)]
2436
[_ h])))
2537

38+
(: my-hash-set*! (All (K V) (->* ((Mutable-HashTable K V)) #:rest-star (K V) Void)))
39+
(define (my-hash-set*! orig . k/v-list)
40+
(let loop! ([to-add : (KV-List K V) k/v-list])
41+
(match to-add
42+
[(cons k (cons v rst))
43+
(hash-set! h k v)
44+
(loop! rst)]
45+
[_ (void)])))
46+
2647

2748
(define h (my-hash "Hello" 'world "How" 'are "you" 'today?))
28-
(my-hash-set* h "one" 'more)
49+
(my-hash-set* h "one" 'more)
50+
51+
(define mh (my-mutable-hash "Hello" 'world "How" 'are "you" 'today?))
52+
(my-hash-set*! mh "one" 'more)

typed-racket-test/unit-tests/contract-tests.rkt

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,5 +724,83 @@
724724
(λ (x y) #f)
725725
#:untyped
726726
#:msg #rx"promised:.*#t.*produced:.*#f")
727-
727+
728+
;; #:rest-star args
729+
(t (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean))
730+
(t (->* (list -Zero) (make-Rest (list -Zero -Zero)) -Zero))
731+
(t (->* (list) (make-Rest (list -Boolean -String -Boolean -String -Boolean -String)) -Zero))
732+
(t (->optkey [-Zero] #:rest Univ -Boolean))
733+
(t-int (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
734+
(λ (c) (c 0))
735+
(case-lambda
736+
[(zero) #t]
737+
[(zero . rst) #f])
738+
#:untyped)
739+
(t-int (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
740+
(λ (c) (c 0))
741+
(case-lambda
742+
[(zero) #t]
743+
[(zero . rst) #f])
744+
#:typed)
745+
(t-int (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
746+
(λ (c) (c 0 0 'zero))
747+
(case-lambda
748+
[(zero) #t]
749+
[(zero . rst) #f])
750+
#:untyped)
751+
(t-int (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
752+
(λ (c) (c 0 0 'zero 0 'zero))
753+
(case-lambda
754+
[(zero) #t]
755+
[(zero . rst) #f])
756+
#:untyped)
757+
(t-int (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
758+
(λ (c) (c 0 0 'zero 0 'zero))
759+
(case-lambda
760+
[(zero) #t]
761+
[(zero . rst) #f])
762+
#:typed)
763+
;; shouldn't error since we should trust the typed side, right?
764+
;(t-int/fail (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
765+
; (λ (c) (c 'zero 'zero))
766+
; (case-lambda
767+
; [(zero) #t]
768+
; [(zero . rst) #f])
769+
; #:untyped
770+
; #:msg #rx"given: '(zero)")
771+
(t-int/fail (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
772+
(λ (c) (c 0))
773+
(case-lambda
774+
[(zero) 'true]
775+
[(zero . rst) 'false])
776+
#:untyped
777+
#:msg #rx"produced: 'true")
778+
(t-int/fail (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
779+
(λ (c) (c 0))
780+
(case-lambda
781+
[(zero) 'true]
782+
[(zero . rst) 'false])
783+
#:untyped
784+
#:msg #rx"produced: 'true")
785+
(t-int/fail (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
786+
(λ (c) (c 0 'zero))
787+
(case-lambda
788+
[(zero) #t]
789+
[(zero . rst) #f])
790+
#:typed
791+
#:msg #rx"contract violation")
792+
(t-int/fail (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
793+
(λ (c) (c 0 0 0))
794+
(case-lambda
795+
[(zero) #t]
796+
[(zero . rst) #f])
797+
#:typed
798+
#:msg #rx"contract violation")
799+
(t-int/fail (->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
800+
(λ (c) (c 0 0 'zero 0))
801+
(case-lambda
802+
[(zero) #t]
803+
[(zero . rst) #f])
804+
#:typed
805+
#:msg #rx"contract violation")
728806
))

typed-racket-test/unit-tests/subtype-tests.rkt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,8 @@
387387
;; #:rest-star
388388
[(->* (list -Zero) Univ -Boolean)
389389
(->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)]
390+
[(->optkey [-Zero] #:rest Univ -Boolean)
391+
(->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)]
390392
[FAIL
391393
(->* (list -Zero) (make-Rest (list -Zero -Symbol)) -Boolean)
392394
(->* (list -Zero) Univ -Boolean)]

0 commit comments

Comments
 (0)