on fa264dd help sign in
elk/tests/libraries/Test/Array.elm
80 lines 5.3 kB history raw
1module Test.Array (tests) where
3import List
4import Array
5import Native.Array
7import ElmTest.Assertion (..)
8import ElmTest.Test (..)
10mergeSplit : Int -> Array.Array a -> Array.Array a
11mergeSplit n arr =
12 let left = Array.slice 0 n arr
13 right = Array.slice n (Array.length arr) arr
14 in Array.append left right
16holeArray : Array.Array Int
17holeArray = foldl mergeSplit (Array.fromList [0..100]) [0..100]
19tests : Test
20tests =
21 let creationTests = suite "Creation"
22 [ test "empty" <| assertEqual Array.empty (Array.fromList [])
23 , test "initialize" <| assertEqual (Array.initialize 4 identity) (Array.fromList [0,1,2,3])
24 , test "initialize 2" <| assertEqual (Array.initialize 4 (\n -> n*n)) (Array.fromList [0,1,4,9])
25 , test "initialize 3" <| assertEqual (Array.initialize 4 (always 0)) (Array.fromList [0,0,0,0])
26 , test "initialize Empty" <| assertEqual (Array.initialize 0 identity) Array.empty
27 , test "initialize 4" <| assertEqual (Array.initialize 2 (always 0)) (Array.fromList [0,0])
28 , test "repeat" <| assertEqual (Array.repeat 5 40) (Array.fromList [40,40,40,40,40])
29 , test "repeat 2" <| assertEqual (Array.repeat 5 0) (Array.fromList [0,0,0,0,0])
30 , test "repeat 3" <| assertEqual (Array.repeat 3 "cat") (Array.fromList ["cat","cat","cat"])
31 , test "fromList" <| assertEqual (Array.fromList []) Array.empty
32 ]
33 basicsTests = suite "Basics"
34 [ test "length" <| assertEqual 3 (Array.length (Array.fromList [1,2,3]))
35 , test "length - Long" <| assertEqual 10000 (Array.length (Array.repeat 10000 0))
36 , test "push" <| assertEqual (Array.fromList [1,2,3]) (Array.push 3 (Array.fromList [1,2]))
37 , test "append" <| assertEqual [42,42,81,81,81] (Array.toList (Array.append (Array.repeat 2 42) (Array.repeat 3 81)))
38 , test "appendEmpty 1" <| assertEqual [1..33] (Array.toList (Array.append Array.empty (Array.fromList [1..33])))
39 , test "appendEmpty 2" <| assertEqual [1..33] (Array.toList (Array.append (Array.fromList [1..33]) Array.empty))
40 , test "appendSmall 1" <| assertEqual [1..33] (Array.toList (Array.append (Array.fromList [1..30]) (Array.fromList [31..33])))
41 , test "appendSmall 2" <| assertEqual [1..33] (Array.toList (Array.append (Array.fromList [1..3]) (Array.fromList [4..33])))
42 , test "appendAndSlice" <| assertEqual [0..100] (Array.toList holeArray)
43 ]
44 getAndSetTests = suite "Get and Set"
45 [ test "get" <| assertEqual (Just 2) (Array.get 1 (Array.fromList [3,2,1]))
46 , test "get 2" <| assertEqual Nothing (Array.get 5 (Array.fromList [3,2,1]))
47 , test "get 3" <| assertEqual Nothing (Array.get -1 (Array.fromList [3,2,1]))
48 , test "getOrElse 1" <| assertEqual 1 (Array.getOrElse 0 2 (Array.fromList [3,2,1]))
49 , test "getOrElse 2" <| assertEqual 0 (Array.getOrElse 0 5 (Array.fromList [3,2,1]))
50 , test "getOrFail" <| assertEqual 1 (Array.getOrFail 2 (Array.fromList [3,2,1]))
51 , test "set" <| assertEqual (Array.fromList [1,7,3]) (Array.set 1 7 (Array.fromList [1,2,3]))
52 ]
53 takingArraysApartTests = suite "Taking Arrays Apart"
54 [ test "toList" <| assertEqual [3,5,8] (Array.toList (Array.fromList [3,5,8]))
55 , test "toIndexedList" <| assertEqual [(0,"cat"), (1,"dog")] (Array.toIndexedList (Array.fromList ["cat","dog"]))
56 , test "slice 1" <| assertEqual (Array.fromList [0,1,2]) (Array.slice 0 3 (Array.fromList [0,1,2,3,4]))
57 , test "slice 2" <| assertEqual (Array.fromList [1,2,3]) (Array.slice 1 4 (Array.fromList [0,1,2,3,4]))
58 , test "slice 3" <| assertEqual (Array.fromList [1,2,3]) (Array.slice 1 -1 (Array.fromList [0,1,2,3,4]))
59 , test "slice 4" <| assertEqual (Array.fromList [2]) (Array.slice -3 -2 (Array.fromList [0,1,2,3,4]))
60 , test "slice 5" <| assertEqual 63 (Array.length <| Array.slice 65 (65 + 63) <| Array.fromList [1..200])
61 ]
62 mappingAndFoldingTests = suite "Mapping and Folding"
63 [ test "map" <| assertEqual (Array.fromList [1,2,3]) (Array.map sqrt (Array.fromList [1,4,9]))
64 , test "indexedMap 1" <| assertEqual (Array.fromList [0,5,10]) (Array.indexedMap (*) (Array.fromList [5,5,5]))
65 , test "indexedMap 2" <| assertEqual [0..99] (Array.toList (Array.indexedMap always (Array.repeat 100 0)))
66 , test "foldl 1" <| assertEqual [3,2,1] (Array.foldl (::) [] (Array.fromList [1,2,3]))
67 , test "foldl 2" <| assertEqual 33 (Array.foldl (+) 0 (Array.repeat 33 1))
68 , test "foldr 1" <| assertEqual 15 (Array.foldr (+) 0 (Array.repeat 3 5))
69 , test "foldr 2" <| assertEqual [1,2,3] (Array.foldr (::) [] (Array.fromList [1,2,3]))
70 , test "foldr 3" <| assertEqual 53 (Array.foldr (-) 54 (Array.fromList [10,11]))
71 , test "filter" <| assertEqual (Array.fromList [2,4,6]) (Array.filter (\x -> x % 2 == 0) (Array.fromList [1..6]))
72 ]
73 nativeTests = suite "Conversion to JS Arrays"
74 [ test "jsArrays" <| assertEqual (Array.fromList [1..1100]) (Native.Array.fromJSArray (Native.Array.toJSArray (Array.fromList [1..1100])))
75 ]
76 in
77 suite "Array"
78 [ creationTests, basicsTests, getAndSetTests
79 , takingArraysApartTests, mappingAndFoldingTests, nativeTests
80 ]