shrub/tests/new-hoon/mp.hoon
Anton Dyudin d0138ff7fa fix #654 by having assert-eq accept a vase of a pair
flipping the order of the pair while rewriting all the test was necessary anyawy, to accoutn for heavier-twig tendencies
2018-03-09 19:43:35 -08:00

305 lines
7.5 KiB
Plaintext

/+ new-hoon, tester
=, dct:new-hoon
=+ four=(from-list [[1 "one"] [2 "two"] [3 "three"] [4 "four"] ~])
=+ three=(from-list [[1 "one"] [2 "two"] [3 "three"] ~])
|_ _tester:tester
++ test-empty
(expect-eq !>([%.n (empty four)]))
::
++ test-size
(expect-eq !>([4 (size four)]))
::
++ test-member
(expect-eq !>([%.y (member four 4)]))
::
++ test-put-with
%- expect-eq !>
:- (from-list [["one" 1] ["two" 2] ["three" 5] ["four" 4] ~])
=/ ints (from-list [["one" 1] ["two" 2] ["three" 3] ["four" 4] ~])
(put-with ints "three" 2 add)
::
++ test-put-with-key
%- expect-eq !>
:- (from-list [[1 "one"] [2 "two"] [3 "three"] [4 "4four"] ~])
(put-with-key four 4 "four" |=({a/@ud b/tape c/tape} (weld (scow %ud a) b)))
::
++ test-put-lookup-with-key
%- expect-eq !>
:- [`"four" (from-list [[1 "one"] [2 "two"] [3 "three"] [4 "five"] ~])]
%^ put-lookup-with-key four
4
:- "five"
|=({key/@ud old/tape new/tape} new)
::
++ test-delete
%- expect-eq !>
:- three
(delete four 4)
::
++ test-adjust
%- expect-eq !>
:- (from-list [[1 "one"] [2 "two"] [3 "thisthree"] [4 "four"] ~])
%^ adjust four
3
|=(a/tape (weld "this" a))
::
++ test-adjust-with-key
%- expect-eq !>
:- (from-list [[1 "one"] [2 "two"] [3 "3three"] [4 "four"] ~])
%^ adjust-with-key four
3
|=({a/@ud b/tape} (weld (scow %ud a) b))
::
++ test-update
%- expect-eq !>
:- (from-list [[1 "one"] [2 "two"] [4 "four"] ~])
%^ update four
3
|=(a/tape `(maybe tape)`~)
::
++ test-update-with-key
%- expect-eq !>
:- (from-list [[1 "one"] [2 "two"] [3 "3three"] [4 "four"] ~])
%^ update-with-key four
3
|=({a/@u b/tape} `(maybe tape)`[~ (weld (scow %ud a) b)])
::
++ test-alter-as-add
%- expect-eq !>
:- (from-list [[1 "one"] [2 "two"] [3 "three"] [4 "four"] [5 "five"] ~])
%^ alter four
5
|=(a/(maybe tape) `(maybe tape)`[~ "five"])
::
++ test-alter-as-delete
%- expect-eq !>
:- (from-list [[1 "one"] [3 "three"] [4 "four"] ~])
%^ alter four
2
|=(a/(maybe tape) `(maybe tape)`~)
::
++ test-alter-as-change
%- expect-eq !>
:- (from-list [[1 "one"] [2 "dos"] [3 "three"] [4 "four"] ~])
%^ alter four
2
|=(a/(maybe tape) `(maybe tape)`[~ "dos"])
::
++ check-alter
:: check random dicts of 50 items with 40 random operations done on them
:: for validity.
%+ check
(generate-dict 50)
|= a/(dict @ud @ud)
:: this is dumb, but use {a} as entropy?
=/ gen (random:new-hoon (jam a))
=| i/@u
|-
?: =(i 40)
%.y
=^ key gen (range:gen 0 100)
=^ value gen (range:gen 0 100)
=. a %^ alter-with-key a key
|= {key/@ud current/(maybe @ud)}
^- (maybe @ud)
=+ action=(mod key 2)
?: =(action 0) :: return nothing
~
?: =(action 1) :: add/set value
`value
~ :: impossible
?. (valid a)
%.n
$(i +(i))
::
++ test-union
%- expect-eq !>
:- (from-list [[1 "left"] [2 "left"] [3 "right"] ~])
%+ union
(from-list [[1 "left"] [2 "left"] ~])
(from-list [[2 "right"] [3 "right"] ~])
::
++ test-union-with
%- expect-eq !>
:- (from-list [[1 "left"] [2 "leftright"] [3 "right"] ~])
%^ union-with
(from-list [[1 "left"] [2 "left"] ~])
(from-list [[2 "right"] [3 "right"] ~])
|=({a/tape b/tape} (weld a b))
::
++ test-union-with-key
%- expect-eq !>
:- (from-list [[1 "left"] [2 "2leftright"] [3 "right"] ~])
%^ union-with-key
(from-list [[1 "left"] [2 "left"] ~])
(from-list [[2 "right"] [3 "right"] ~])
|=({a/@ud b/tape c/tape} :(weld `tape`(scow %ud a) b c))
::
++ test-map
%- expect-eq !>
:- (from-list [[1 'one'] [2 'two'] [3 'three'] ~])
(map:dct three crip)
::
++ test-map-with-key
%- expect-eq !>
:- (from-list [[1 "1one"] [2 "2two"] [3 "3three"] ~])
%+ map-with-key three
|=({a/@u b/tape} (weld (scow %ud a) b))
::
++ test-map-fold
%- expect-eq !>
:- :- "Everything: two one three"
(from-list [[1 "oneX"] [2 "twoX"] [3 "threeX"] ~])
%^ map-fold three
"Everything:"
|= {accumulator/tape value/tape}
[:(weld accumulator " " value) (weld value "X")]
::
++ test-map-keys
%- expect-eq !>
:- (from-list [[11 "one"] [12 "two"] [13 "three"] ~])
%+ map-keys three
|=(a/@u (add a 10))
::
++ test-map-keys-with
%- expect-eq !>
:- (from-list [[42 "twothreeone"] ~])
%^ map-keys-with three
|=(a/@u 42)
weld
::
++ test-fold
%- expect-eq !>
:- "Everything: twoonethree"
%^ fold three
"Everything: "
:: todo: this works but replacing with just ++weld causes an out of loom.
|= {accumulator/tape value/tape}
^- tape
(weld accumulator value)
::
++ test-fold-with-keys
%- expect-eq !>
:- "Everything: 2two1one3three"
%^ fold-with-keys three
"Everything: "
|= {accumulator/tape key/@u value/tape}
^- tape
:(weld accumulator (scow %ud key) value)
::
++ test-elems
%- expect-eq !>
:- ["two" "three" "one" ~]
(elems three)
::
++ test-keys
%- expect-eq !>
:- [2 3 1 ~]
(keys three)
::
++ test-keys-set
%- expect-eq !>
:- (si:nl [2 3 1 ~])
(keys-set three)
::
++ test-from-set
%- expect-eq !>
:- (from-list [[1 "1"] [2 "2"] [3 "3"] ~])
%+ from-set
(si:nl [1 2 3 ~])
|=(a/@u (scow %ud a))
::
++ test-from-list-with
%- expect-eq !>
:- (from-list [[1 1] [2 2] [3 3] ~])
%+ from-list-with
[[1 1] [2 1] [2 1] [3 3] ~]
add
::
++ test-filter
%- expect-eq !>
:- (from-list [[1 1] [2 1] [4 1] ~])
%+ filter
(from-list [[1 1] [2 1] [3 2] [4 1] ~])
|=(a/@u !=(a 1))
::
++ test-filter-with-key
%- expect-eq !>
:- (from-list [[1 1] [3 2] [4 1] ~])
%+ filter-with-key
(from-list [[1 1] [2 1] [3 2] [4 1] ~])
|=({a/@u b/@u} =(a 2))
::
++ test-restrict-keys
%- expect-eq !>
:- (from-list [[1 1] [3 3] [5 5] ~])
%+ restrict-keys
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
(si:nl [1 3 5 ~])
::
++ test-without-keys
%- expect-eq !>
:- (from-list [[2 2] [4 4] ~])
%+ without-keys
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
(si:nl [1 3 5 ~])
::
++ test-partition
%- expect-eq !>
:- :- (from-list [[1 1] [3 3] ~])
(from-list [[2 2] [4 4] [5 5] ~])
%+ partition
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|=(a/@u |(=(a 1) =(a 3)))
::
++ test-map-maybe
%- expect-eq !>
:- (from-list [[1 1] [2 2] [4 4] [5 5] ~])
%+ map-maybe
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|=(a/@u ?:(=(a 3) ~ `a))
::
++ test-map-maybe-with-key
%- expect-eq !>
:- (from-list [[1 2] [2 3] [4 5] [5 6] ~])
%+ map-maybe-with-key
(from-list [[1 2] [2 3] [3 4] [4 5] [5 6] ~])
|=({k/@u v/@u} ?:(=(k 3) ~ `v))
::
++ test-map-either
%- expect-eq !>
:- :- (from-list [[2 "even"] [4 "even"] ~])
(from-list [[1 1] [3 1] [5 1] ~])
%+ map-either
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|= value/@u
?: =(0 (mod value 2))
[%& "even"]
[%| 1]
::
++ test-map-either-with-key
%- expect-eq !>
:- :- (from-list [[2 "even"] [4 "even"] ~])
(from-list [[1 1] [3 1] [5 1] ~])
%+ map-either-with-key
(from-list [[1 1] [2 1] [3 1] [4 1] [5 1] ~])
|= {key/@u value/@u}
?: =(0 (mod key 2))
[%& "even"]
[%| 1]
::
++ test-is-subdict
%- expect-eq !>
:- &
%^ is-subdict-by
(from-list [[1 1] [4 4] ~])
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|=({a/* b/*} =(a b))
::
++ test-valid
%- expect-eq !>
:- &
(valid (from-list [[1 1] [2 2] [3 3] [4 4] [5 5] [6 6] [7 7] [8 8] [9 9] ~]))
--