/+  new-hoon, tester
=,  ls:new-hoon
|_  _tester:tester
++  test-head
  (expect-eq !>([1 (head [1 ~])]))
::
++  test-last
  (expect-eq !>([2 (last:ls [1 2 ~])]))
::
++  test-tail
  (expect-eq !>([[2 3 ~] (tail [1 2 3 ~])]))
::
++  test-init
  (expect-eq !>([[1 2 ~] (init [1 2 3 ~])]))
::
++  test-size
  (expect-eq !>([3 (size ['a' 'b' 'c' ~])]))
::
++  test-map
  (expect-eq !>([[2 3 ~] (map:ls [1 2 ~] |=(a/@ (add 1 a)))]))
::
++  test-reverse
  (expect-eq !>([[3 2 1 ~] (reverse [1 2 3 ~])]))
::
++  test-intersperse
  (expect-eq !>([[5 1 5 1 5 ~] (intersperse 1 [5 5 5 ~])]))
::
++  test-intercalate
  %-  expect-eq  !>
  :-  ["one,two,three"]
  (intercalate "," ["one" "two" "three" ~])
::
++  test-transpose
  %-  expect-eq  !>
  :-  ~[~[1 4] ~[2 5] ~[3 6]]
  (transpose ~[~[1 2 3] ~[4 5 6]])
::
++  test-foldl
  (expect-eq !>([9 (foldl [1 2 3 ~] 3 |=({a/@ b/@} (add a b)))]))
::
++  test-foldr
  (expect-eq !>([7 (foldr [1 2 3 ~] 1 |=({a/@ b/@} (add a b)))]))
::
++  test-concat
  (expect-eq !>([~[1 2 3 4] (concat ~[~[1 2] ~[3 4]])]))
::
++  test-weld
  (expect-eq !>([~[1 2 3 "one" "two"] (weld:ls ~[1 2 3] ~["one" "two"])]))
::
++  test-any-true
  (expect-eq !>([%.y (any [1 2 3 ~] |=(a/@ =(a 2)))]))
::
++  test-any-false
  (expect-eq !>([%.n (any [1 2 3 ~] |=(a/@ =(a 8)))]))
::
++  test-all-true
  (expect-eq !>([%.y (all [1 1 1 ~] |=(a/@ =(a 1)))]))
::
++  test-all-false
  (expect-eq !>([%.n (all [1 3 1 ~] |=(a/@ =(a 1)))]))
::
++  test-scanl
  %-  expect-eq  !>
  :-  ~[0 1 3 6]
  (scanl ~[1 2 3] 0 |=({a/@ b/@} (add a b)))
::
++  test-scanl1
  %-  expect-eq  !>
  :-  ~[1 3 6]
  (scanl1 ~[1 2 3] |=({a/@ b/@} (add a b)))
::
++  test-scanr
  %-  expect-eq  !>
  :-  ~[6 5 3 0]
  (scanr ~[1 2 3] 0 |=({a/@ b/@} (add a b)))
::
++  test-scanr1
  %-  expect-eq  !>
  :-  ~[6 5 3]
  (scanr1 ~[1 2 3] |=({a/@ b/@} (add a b)))
::
++  test-map-foldl
  %-  expect-eq  !>
  :-  [7 ~[2 3 5]]
  (map-foldl ~[1 2 3] 1 |=({a/@ b/@} [(add a b) (add 1 a)]))
::
++  test-map-foldr
  %-  expect-eq  !>
  :-  [7 ~[7 5 2]]
  (map-foldr ~[1 2 3] 1 |=({a/@ b/@} [(add a b) (add 1 a)]))
::
++  test-unfoldr
  %-  expect-eq  !>
  :-  [5 4 3 2 1 ~]
  (unfoldr 5 |=(a/@ ?:(=(a 0) ~ `[a (dec a)])))
::
++  test-take
  %-  expect-eq  !>
  :-  [1 2 3 ~]
  (take 3 ~[1 2 3 4 5])
::
++  test-drop
  %-  expect-eq  !>
  :-  [4 5 ~]
  (drop:ls 3 ~[1 2 3 4 5])
::
++  test-split-at
  %-  expect-eq  !>
  :-  [[1 2 3 ~] [4 5 ~]]
  (split-at 3 ~[1 2 3 4 5])
::
++  test-take-while
  %-  expect-eq  !>
  :-  [1 2 ~]
  (take-while ~[1 2 3 4 5] |=(a/@ (lth a 3)))
::
++  test-drop-while
  %-  expect-eq  !>
  :-  [3 4 5 ~]
  (drop-while ~[1 2 3 4 5] |=(a/@ (lth a 3)))
::
++  test-drop-while-end
  %-  expect-eq  !>
  :-  [5 5 1 ~]
  (drop-while-end ~[5 5 1 5 5] |=(a/@ =(a 5)))
::
++  test-split-on
  %-  expect-eq  !>
  :-  [[1 2 ~] [3 4 1 2 3 4 ~]]
  (split-on ~[1 2 3 4 1 2 3 4] |=(a/@ (lth a 3)))
::
++  test-break
  %-  expect-eq  !>
  :-  [[1 2 3 ~] [4 1 2 3 4 ~]]
  (break ~[1 2 3 4 1 2 3 4] |=(a/@ (gth a 3)))
::
++  test-strip-prefix
  %-  expect-eq  !>
  :-  [~ "bar"]
  (strip-prefix "foo" "foobar")
::
++  test-inits
  %-  expect-eq  !>
  :-  ["a" "ab" "abc" ~]
  (inits "abc")
::
++  test-tails
  %-  expect-eq  !>
  :-  ["abc" "bc" "c" ~]
  (tails "abc")
::
++  test-is-prefix-of
  %-  expect-eq  !>
  :-  %.y
  (is-prefix-of "foo" "foobar")
::
++  test-is-suffix-of
  %-  expect-eq  !>
  :-  %.y
  (is-suffix-of "bar" "foobar")
::
++  test-is-infix-of
  %-  expect-eq  !>
  :-  %.y
  (is-infix-of "ob" "foobar")
::
++  test-elem
  %-  expect-eq  !>
  :-  %.y
  (elem 5 [1 2 3 4 5 ~])
::
++  test-lookup
  %-  expect-eq  !>
  :-  [~ 2]
  (lookup "two" [["one" 1] ["two" 2] ["three" 3] ~])
::
++  test-find
  %-  expect-eq  !>
  :-  [~ 5]
  (find:ls [3 2 1 5 1 2 3 ~] |=(a/@ (gth a 3)))
::
++  test-filter
  %-  expect-eq  !>
  :-  [1 1 1 ~]
  (filter [1 2 1 2 1 ~] |=(a/@ =(a 2)))
::
++  test-partition
  %-  expect-eq  !>
  :-  [[2 2 ~] [1 1 1 ~]]
  (partition [1 2 1 2 1 ~] |=(a/@ =(a 2)))
::
++  test-elem-index
  %-  expect-eq  !>
  :-  `1
  (elem-index 2 [1 2 3 4 ~])
::
++  test-elem-indices
  %-  expect-eq  !>
  :-  [1 3 ~]
  (elem-indices 2 [1 2 1 2 ~])
::
++  test-find-index
  %-  expect-eq  !>
  :-  `1
  (find-index [1 2 3 ~] |=(a/@ =(a 2)))
::
++  test-find-indices
  %-  expect-eq  !>
  :-  [1 3 ~]
  (find-indices [1 2 1 2 ~] |=(a/@ =(a 2)))
::
++  test-zip
  %-  expect-eq  !>
  :-  [[1 4 7 ~] [2 5 8 ~] [3 6 9 ~] ~]
  (zip [[1 2 3 ~] [4 5 6 ~] [7 8 9 ~] ~])
::
++  test-unique
  %-  expect-eq  !>
  :-  [1 2 3 ~]
  (unique [1 2 3 1 2 3 ~])
::
++  test-delete
  %-  expect-eq  !>
  :-  [1 3 2 ~]
  (delete 2 [1 2 3 2 ~])
::
++  test-delete-firsts
  %-  expect-eq  !>
  :-  [1 2 3 4 ~]
  (delete-firsts [1 2 2 2 3 4 5 ~] [2 2 5 ~])
::
++  test-union
  %-  expect-eq  !>
  :-  [1 2 3 4 5 ~]
  (union [1 2 3 ~] [4 2 5 ~])
::
++  test-intersect
  %-  expect-eq  !>
  :-  [6 6 8 ~]
  (intersect [5 6 6 7 8 ~] [9 8 8 6 ~])
--