Overhaul
Loads of changes, some which I wasn't sure what I was on when doing them
This commit is contained in:
@@ -46,14 +46,14 @@
|
||||
(define-test macro-test)
|
||||
|
||||
(define-test (macro-test "-->")
|
||||
(true (null (--> x)))
|
||||
(true (null (--> x)))
|
||||
(is eq 'a (--> x 'a))
|
||||
(is eq 2 (--> x 1 (1+ x)))
|
||||
(is eq 2 (--> x 1 1+))
|
||||
(is string= "World!" (--> _ "Hello" (format nil "~a World!" _) (subseq _ 6))))
|
||||
|
||||
(define-test (macro-test "->>")
|
||||
(true (null (->>)))
|
||||
(true (null (->>)))
|
||||
(let ((a (gensym))
|
||||
(b (gensym))
|
||||
(c (gensym))
|
||||
@@ -102,22 +102,12 @@
|
||||
|
||||
(define-test (function-test range)
|
||||
:compile-at :execute
|
||||
(fail (range 1 0))
|
||||
(fail (range nil nil))
|
||||
(fail (range "a" "b"))
|
||||
(true (null (range 1 1)))
|
||||
(is equal '(1 2 3 4) (range 1 5))
|
||||
(is equal '(-3 -2 -1 0) (range -3 1)))
|
||||
|
||||
(define-test (function-test take)
|
||||
:depends-on ((cantedraw/tests/macros ->>))
|
||||
:compile-at :execute
|
||||
(fail (take nil nil))
|
||||
(fail (take 100 nil))
|
||||
(fail (take nil 100))
|
||||
(true (->> (list 1 2 3 4) (take 0) null))
|
||||
(is equal "H" (take 1 "Hello"))
|
||||
(is equal '(1 2) (take 2 '(1 2 3 4 5))))
|
||||
(fail (range :start 1 :end 0))
|
||||
(fail (range :start nil :end nil))
|
||||
(fail (range :start "a" :end "b"))
|
||||
(true (null (range :start 1 :end 1)))
|
||||
(is equal '(1 2 3 4) (range :start 1 :end 5))
|
||||
(is equal '(-3 -2 -1 0) (range :start -3 :end 1)))
|
||||
|
||||
(define-test (function-test split)
|
||||
:compile-at :execute
|
||||
@@ -141,7 +131,7 @@
|
||||
(fail (rev-map nil nil))
|
||||
(fail (rev-map "a string" "another string" :key-eq "not a function"))
|
||||
(true (->> nil (rev-map #'identity) null))
|
||||
(let ((res (rev-map #'evenp (range 1 7))))
|
||||
(let ((res (rev-map #'evenp (range :start 1 :end 7))))
|
||||
(false (null res))
|
||||
(is equal 2 (length res))
|
||||
(is equal 3 (->> (assoc t res) cdr length))
|
||||
@@ -149,7 +139,7 @@
|
||||
(true (->> (assoc t res) cdr (every #'evenp)))
|
||||
(true (->> (assoc nil res) cdr (every #'oddp))))
|
||||
(let* ((mod* (lambda (n) (mod n 3)))
|
||||
(res (rev-map mod* (range 1 12))))
|
||||
(res (rev-map mod* (range :start 1 :end 12))))
|
||||
(false (null res))
|
||||
(is equal 3 (length res))
|
||||
(is equal 3 (->> (assoc 0 res) cdr length))
|
||||
@@ -172,9 +162,9 @@
|
||||
(true (null (remove-at-indices nil nil)))
|
||||
(is equal '(1 2 3) (remove-at-indices nil '(1 2 3)))
|
||||
(is equal '(2) (remove-at-indices '(0 2) '(1 2 3)))
|
||||
(let* ((inp (range 100 200))
|
||||
(t1 (remove-at-indices (range 0 100 2) inp))
|
||||
(t2 (remove-at-indices (range 1 100 2) inp)))
|
||||
(let* ((inp (range :start 100 :end 200))
|
||||
(t1 (remove-at-indices (range :start 0 :end 100 :step 2) inp))
|
||||
(t2 (remove-at-indices (range :start 1 :end 100 :step 2) inp)))
|
||||
(is equal 50 (length t1))
|
||||
(is equal 50 (length t2))
|
||||
(true (every (lambda (n) (not (member n t2))) t1))
|
||||
@@ -197,7 +187,7 @@
|
||||
(fail (int->rank nil))
|
||||
(fail (int->rank "Not a number"))
|
||||
;; Proving int->rank maps 0-51 to produces 13 ranks, all equally distributed.
|
||||
(let ((mapping (rev-map #'int->rank (range 0 52))))
|
||||
(let ((mapping (rev-map #'int->rank (range :start 0 :end 52))))
|
||||
;; Prove there are 13 ranks
|
||||
(is eq 13 (length mapping))
|
||||
;; Prove every rank is equivalent in length.
|
||||
@@ -207,9 +197,9 @@
|
||||
length))
|
||||
;; Prove Ace, 2, ..., 10, Jack, Queen, King are the 13 ranks.
|
||||
(true (every #'identity
|
||||
(->> (list :ace :king :queen :jack)
|
||||
(append (range 2 11))
|
||||
(mapcar (lambda (rank) (assoc rank mapping))))))))
|
||||
(->> (list :ace :king :queen :jack)
|
||||
(append (range :start 2 :end 11))
|
||||
(mapcar (lambda (rank) (assoc rank mapping))))))))
|
||||
|
||||
(define-test (model-test rank->int)
|
||||
:depends-on ((cantedraw/tests/macros ->>))
|
||||
@@ -220,7 +210,7 @@
|
||||
(fail (rank->int :still-not-a-rank))
|
||||
;; Prove ranks are mapped to unique positive integers
|
||||
(let ((res (->> (list :jack :queen :king :ace)
|
||||
(append (range 2 11))
|
||||
(append (range :start 2 :end 11))
|
||||
(mapcar #'rank->int))))
|
||||
(true (every #'integerp res))
|
||||
(true (every #'(lambda (x) (<= 0 x)) res))
|
||||
@@ -228,9 +218,9 @@
|
||||
|
||||
(define-test (model-test "int->rank and rank->int are complete inverses")
|
||||
:depends-on (rank->int int->rank)
|
||||
(let ((int-range (range 0 13))
|
||||
(let ((int-range (range :start 0 :end 13))
|
||||
(rank-range (->> (list :ace :jack :queen :king)
|
||||
(append (range 2 11)))))
|
||||
(append (range :start 2 :end 11)))))
|
||||
(is equal rank-range
|
||||
(mapcar ($>> rank->int int->rank) rank-range))
|
||||
(is equal int-range
|
||||
@@ -243,7 +233,7 @@
|
||||
(fail (int->suit nil))
|
||||
(fail (int->suit "Not a number"))
|
||||
;; Proving int->suit splits 0-51 perfectly between the 4 suits
|
||||
(let ((mapping (rev-map #'int->suit (range 0 53))))
|
||||
(let ((mapping (rev-map #'int->suit (range :start 0 :end 53))))
|
||||
(is eq 5 (length mapping))
|
||||
(let ((spades (alist-val :spades mapping))
|
||||
(hearts (alist-val :hearts mapping))
|
||||
@@ -285,7 +275,7 @@
|
||||
(fail (int->card nil))
|
||||
(fail (int->card "Not a number"))
|
||||
;; Proving int->card maps 0-51 to exactly 52 unique cards
|
||||
(let ((mapping (mapcar #'int->card (range 0 52))))
|
||||
(let ((mapping (mapcar #'int->card (range :start 0 :end 52))))
|
||||
(is eq 52 (length (remove-duplicates mapping :test #'equal))
|
||||
"52 unique elements.")
|
||||
(true (every #'card-p mapping)
|
||||
@@ -306,7 +296,7 @@
|
||||
(fail (card->int 1738))
|
||||
(fail (card->int "not a card"))
|
||||
(fail (card->int :still-not-a-card))
|
||||
(let ((ranks (append (range 2 11) (list :jack :queen :king :ace))))
|
||||
(let ((ranks (append (range :start 2 :end 11) (list :jack :queen :king :ace))))
|
||||
(let ((res (->> (loop :for suit :in (list :diamonds :clubs :hearts :spades)
|
||||
:nconc
|
||||
(mapcar (lambda (rank) (make-card :rank rank :suit suit)) ranks))
|
||||
@@ -323,3 +313,17 @@
|
||||
"Every mapped element is outside of [0,51]")
|
||||
(is eq (length res) (length (remove-duplicates res))
|
||||
"All mapped integers are unique."))))
|
||||
|
||||
(define-test (model-test "int->card and card->int are complete inverses")
|
||||
:depends-on (card->int int->card)
|
||||
(let ((int-range (range :start 0 :end 52))
|
||||
(card-range
|
||||
(loop :for rank :in (append (range :start 2 :end 11) (list :ace :king :jack :queen))
|
||||
:nconcing (-<> (lambda (suit) (make-card :rank rank :suit suit))
|
||||
(mapcar (list :Diamonds :Clubs :Hearts :Spades)))
|
||||
:into Y
|
||||
:finally (return (sort Y #'card<)))))
|
||||
(is equalp card-range (mapcar ($>> card->int int->card) card-range)
|
||||
"int->card(card->int s) = s")
|
||||
(is equalp int-range (mapcar ($>> int->card card->int) int-range)
|
||||
"card->int(int->card i) = i")))
|
||||
|
||||
Reference in New Issue
Block a user