@@ -1,12 +1,58 @@
11module Test.Main where
22
3−import Prelude
4−
3+import Prelude (Unit, bind, pure, discard, map, negate, ($), (<$>), (=<<), (<>))
4+import Data.ArrayBuffer.Types (ArrayBuffer,Uint8Array)
5+import Data.ArrayBuffer.Typed as AT
6+import Data.UInt as UInt
57import Effect (Effect)
6−import Effect.Class.Console (log)
7−import Test.Assert
8+import Test.Assert (assertEqual')
9+import Data.ArrayBuffer.Builder
10+
11+asBytes :: ArrayBuffer -> Effect (Array Int)
12+asBytes x = do
13+ x' :: Uint8Array <- AT.whole x
14+ map UInt.toInt <$> AT.toArray x'
15+
16+putTest :: String -> Array Int -> PutM Effect Unit -> Effect Unit
17+putTest label expected put = do
18+ actual <- asBytes =<< execPut put
19+ assertEqual' label {actual,expected}
20+
21+buildTest :: String -> Array Int -> Effect Builder -> Effect Unit
22+buildTest label expected bldr = do
23+ actual <- asBytes =<< execBuilder =<< bldr
24+ assertEqual' label {actual,expected}
825
926main :: Effect Unit
1027main = do
11− log "🍝"
12− log "You should add some tests."
28+ putTest "Test 0" [6,7,8] $ do
29+ putInt8 6
30+ putInt8 7
31+ putInt8 8
32+
33+ putTest "Test 1" [255,254] $ do
34+ putInt16be (-2)
35+
36+ putTest "Test 3" [3,0,0,0] $ do
37+ putInt32le 3
38+
39+ buildTest "Test 4" [1,2,3,4] $ do
40+ b1 <- encodeInt8 1
41+ b2 <- encodeInt8 2
42+ b3 <- encodeInt8 3
43+ b4 <- encodeInt8 4
44+ pure $ singleton b1 <> singleton b2 <> singleton b3 <> singleton b4
45+
46+ buildTest "Test 5" [1,2,3,4] $ do
47+ b1 <- encodeInt8 1
48+ b2 <- encodeInt8 2
49+ b3 <- encodeInt8 3
50+ b4 <- encodeInt8 4
51+ pure $ singleton b1 <>> singleton b2 <>> singleton b3 <>> singleton b4
52+
53+ buildTest "Test 6" [1,2,3,4] $ do
54+ b1 <- encodeInt8 1
55+ b2 <- encodeInt8 2
56+ b3 <- encodeInt8 3
57+ b4 <- encodeInt8 4
58+ pure $ singleton b1 <> (singleton b2 <> singleton b3) <> singleton b4