git.iko.soy/rowtype-yoga/purescript-arraybuffer-builder
on 9fe8083 help sign in
.github/workflows/ci.yml+3
since splitsnapshots
unifiedsplit
@@ -44,3 +44,6 @@ jobs:
44 npm install bower pulp@16.0.0-0
44 npm install bower pulp@16.0.0-0
45 npx bower install
45 npx bower install
46 npx pulp build -- --censor-lib --strict
46 npx pulp build -- --censor-lib --strict
47+ if [ -d "test" ]; then
48+ npx pulp test
49+ fi
CHANGELOG.md−5
@@ -1,10 +1,5 @@
1# Changelog
1# Changelog
2
2
3−## v3.1.0 2022-12-10
4−
5−- Transfer to __rowtype-yoga__.
6−- Docs.
7−
8## v3.0.1 2022-05-04
3## v3.0.1 2022-05-04
9
4
10CI repair. Change `test.dhall` to `spago-dev.dhall`.
5CI repair. Change `test.dhall` to `spago-dev.dhall`.
DEVELOPMENT.mdnew file+43
@@ -0,0 +1,43 @@
1+# Development Notes
2+
3+All of the commands needed for development are in the `shell.nix` environment.
4+
5+```
6+$ nix-shell
7+```
8+
9+## Edit
10+
11+The `psc-ide` command is available for the [VS Code Purescript IDE extension](https://github.com/nwolverson/vscode-ide-purescript.git).
12+
13+```
14+[nix-shell:]$ code .
15+```
16+
17+## Build
18+
19+```
20+[nix-shell:]$ spago build
21+```
22+
23+## Test
24+
25+The test dependencies are specified seperately in `test.dhall`.
26+
27+```
28+[nix-shell:]$ spago -x test.dhall test
29+```
30+
31+## Publishing to Pursuit with `spago`
32+
33+[Publishing with `spago`](https://github.com/purescript/spago#publish-my-library).
34+
35+```
36+[nix-shell:]$ bower install --save
37+[nix-shell:]$ spago bump-version --no-dry-run major
38+[nix-shell:]$ pulp publish --no-push
39+```
40+
41+## Bower
42+
43+The `bower.json` is generated by running `spago bump-version`, do not edit it.
README.md+12−17
@@ -1,8 +1,7 @@
1# purescript-arraybuffer-builder
1# purescript-arraybuffer-builder
2
2
3−[![CI](https://github.com/rowtype-yoga/purescript-arraybuffer-builder/workflows/CI/badge.svg?branch=master)](https://github.com/rowtype-yoga/purescript-arraybuffer-builder/actions)
3+[![CI](https://github.com/jamesdbrock/purescript-arraybuffer-builder/workflows/CI/badge.svg?branch=master)](https://github.com/jamesdbrock/purescript-arraybuffer-builder/actions)
4[![Pursuit](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/badge)](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/)
4[![Pursuit](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/badge)](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/)
5−[![Maintainer: jamesdbrock](https://img.shields.io/badge/maintainer-jamesdbrock-teal.svg)](https://github.com/jamesdbrock)
6
5
7
6
8[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
7[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
@@ -51,26 +50,23 @@ Encode a `String` as UTF8 with a length prefix into our `Builder`.
51
50
52We give this as an example, rather than supporting it in the library, because
51We give this as an example, rather than supporting it in the library, because
53it depends on
52it depends on
54−[`Web.Encoding.TextEncoder`](https://pursuit.purescript.org/packages/purescript-web-encoding/docs/Web.Encoding.TextEncoder).
53+[`Data.TextEncoding.encodeUtf8`](https://pursuit.purescript.org/packages/purescript-text-encoding/docs/Data.TextEncoding#v:encodeUtf8).
55
54
56```purescript
55```purescript
57−import Effect.Class (class MonadEffect, liftEffect)
58−import Data.UInt (fromInt)
59−import Data.ArrayBuffer.Types (ArrayBuffer(..))
60−import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut, putUint32be)
56+import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut)
61import Data.ArrayBuffer.Typed (buffer)
57import Data.ArrayBuffer.Typed (buffer)
58+import Data.TextEncoding (encodeUtf8)
62import Data.ArrayBuffer.ArrayBuffer (byteLength)
59import Data.ArrayBuffer.ArrayBuffer (byteLength)
63−import Web.Encoding.TextEncoder (new, TextEncoder, encode)
64
60
65putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
61putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
66putStringUtf8 s = do
62putStringUtf8 s = do
67− textEncoder <- liftEffect new
68− let stringbuf = buffer $ encode s textEncoder
63+ let stringbuf = buffer $ encodeUtf8 s
69− -- Put a 32-bit big-endian length for the utf8 string, in bytes.
64+ -- Put a 32-bit big-endian length prefix for the length of the utf8 string, in bytes.
70− putUint32be $ fromInt $ byteLength stringbuf
65+ putInt32be $ byteLength stringbuf
71 putArrayBuffer stringbuf
66 putArrayBuffer stringbuf
72
67
68+do
73−arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "🦝"
69+ arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "BLM"
74```
70```
75
71
76### Serialize an `Array Int`
72### Serialize an `Array Int`
@@ -89,7 +85,7 @@ import Data.Array (length)
89
85
90putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
86putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
91putArrayInt32 xs = do
87putArrayInt32 xs = do
92− -- Put a 64-bit big-endian length prefix for the array.
88+ -- Put a 64-bit big-endian length prefix for the length of the array.
93 putInt32be 0
89 putInt32be 0
94 putInt32be $ length xs
90 putInt32be $ length xs
95 traverse_ putInt32be xs
91 traverse_ putInt32be xs
@@ -109,7 +105,7 @@ import Data.Array (foldRecM)
109
105
110putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
106putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
111putArrayInt32 xs = do
107putArrayInt32 xs = do
112− -- Put a 64-bit big-endian length prefix for the array.
108+ -- Put a 64-bit big-endian length prefix for the length of the array.
113 putInt32be 0
109 putInt32be 0
114 putInt32be $ length xs
110 putInt32be $ length xs
115 foldRecM (\_ x -> putInt32be x) unit xs
111 foldRecM (\_ x -> putInt32be x) unit xs
@@ -124,7 +120,7 @@ of the `PutM` builder expression are stack-safe.
124
120
125This package is only for writing `ArrayBuffer`s, not reading them.
121This package is only for writing `ArrayBuffer`s, not reading them.
126See
122See
127−[__parsing-dataview__](https://pursuit.purescript.org/packages/purescript-parsing-dataview/)
123+[__purescript-parsing-dataview__](https://pursuit.purescript.org/packages/purescript-parsing-dataview/)
128for a way to deserialize from `ArrayBuffer` back to Purescript data.
124for a way to deserialize from `ArrayBuffer` back to Purescript data.
129
125
130## Alternative packages for serializing to an `ArrayBuffer`
126## Alternative packages for serializing to an `ArrayBuffer`
@@ -133,7 +129,6 @@ for a way to deserialize from `ArrayBuffer` back to Purescript data.
133* [__node-buffer__](https://pursuit.purescript.org/packages/purescript-node-buffer)
129* [__node-buffer__](https://pursuit.purescript.org/packages/purescript-node-buffer)
134* [__arraybuffer-class__](https://pursuit.purescript.org/packages/purescript-arraybuffer-class)
130* [__arraybuffer-class__](https://pursuit.purescript.org/packages/purescript-arraybuffer-class)
135* [__bytestrings__](https://pursuit.purescript.org/packages/purescript-bytestrings/)
131* [__bytestrings__](https://pursuit.purescript.org/packages/purescript-bytestrings/)
136−* [__array-builder__](https://pursuit.purescript.org/packages/purescript-array-builder)
137
132
138## Development
133## Development
139
134
bower.json+3−3
@@ -14,7 +14,7 @@
14 "output"
14 "output"
15 ],
15 ],
16 "dependencies": {
16 "dependencies": {
17− "purescript-arraybuffer": "^v13.1.1",
17+ "purescript-arraybuffer": "^v13.0.0",
18 "purescript-arraybuffer-types": "^v3.0.2",
18 "purescript-arraybuffer-types": "^v3.0.2",
19 "purescript-effect": "^v4.0.0",
19 "purescript-effect": "^v4.0.0",
20 "purescript-float32": "^v2.0.0",
20 "purescript-float32": "^v2.0.0",
@@ -22,8 +22,8 @@
22 "purescript-lists": "^v7.0.0",
22 "purescript-lists": "^v7.0.0",
23 "purescript-maybe": "^v6.0.0",
23 "purescript-maybe": "^v6.0.0",
24 "purescript-newtype": "^v5.0.0",
24 "purescript-newtype": "^v5.0.0",
25− "purescript-prelude": "^v6.0.1",
25+ "purescript-prelude": "^v6.0.0",
26− "purescript-tailrec": "^v6.1.0",
26+ "purescript-tailrec": "^v6.0.0",
27 "purescript-transformers": "^v6.0.0",
27 "purescript-transformers": "^v6.0.0",
28 "purescript-uint": "^v7.0.0"
28 "purescript-uint": "^v7.0.0"
29 }
29 }
packages.dhall+2−2
@@ -117,8 +117,8 @@ let additions =
117-------------------------------
117-------------------------------
118-}
118-}
119let upstream =
119let upstream =
120− https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.4-20221209/src/packages.dhall
120+ https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.0-20220502/src/packages.dhall
121− sha256:b55c24bf585df4041ae6e87124cab7b35d474a9a77c9c3862ee6bf1dae618d72
121+ sha256:38d347aeba9fe6359c208abe87a5cecf1ffb14294f11ad19664ae35c59b6e29a
122
122
123let overrides = {=}
123let overrides = {=}
124
124
psc-package.jsonnew file+16
@@ -0,0 +1,16 @@
1+{
2+ "name": "purescript-arraybuffer-builder",
3+ "set": "psc-0.14.1-20210429",
4+ "source": "https://github.com/purescript/package-sets.git",
5+ "depends": [
6+ "prelude",
7+ "effect",
8+ "float32",
9+ "maybe",
10+ "prelude",
11+ "transformers",
12+ "uint",
13+ "arraybuffer-types",
14+ "arraybuffer"
15+ ]
16+}
spago-dev.dhall−1
@@ -15,6 +15,5 @@ in conf //
15 , dependencies = conf.dependencies #
15 , dependencies = conf.dependencies #
16 [ "assert"
16 [ "assert"
17 , "arrays"
17 , "arrays"
18− , "web-encoding"
19 ]
18 ]
20 }
19 }
src/Data/ArrayBuffer/Builder.purs+27−26
@@ -5,35 +5,36 @@
5-- | Writing to an `ArrayBuffer` is an `Effect`ful activity, so most
5-- | Writing to an `ArrayBuffer` is an `Effect`ful activity, so most
6-- | functions in this module must be run in a `MonadEffect` context.
6-- | functions in this module must be run in a `MonadEffect` context.
7-- |
7-- |
8−-- | For other operations for working with `ArrayBuffer`, see
8+-- | For operations for working with `ArrayBuffer`, see
9-- | module
9-- | module
10-- | [`Data.ArrayBuffer.ArrayBuffer`](https://pursuit.purescript.org/packages/purescript-arraybuffer/docs/Data.ArrayBuffer.ArrayBuffer)
10-- | [`Data.ArrayBuffer.ArrayBuffer`](https://pursuit.purescript.org/packages/purescript-arraybuffer/docs/Data.ArrayBuffer.ArrayBuffer)
11−-- | in package __arraybuffer__.
11+-- | in package __purescript-arraybuffer__.
12module Data.ArrayBuffer.Builder
12module Data.ArrayBuffer.Builder
13− ( PutM
13+( PutM
14− , Put
14+, Put
15− , execPutM
15+, execPutM
16− , execPut
16+, execPut
17− , subBuilder
17+, subBuilder
18− , putArrayBuffer
18+, putArrayBuffer
19− , putDataView
19+, putDataView
20− , putDataBuff
20+, putDataBuff
21− , putUint8
21+, putUint8
22− , putInt8
22+, putInt8
23− , putUint16be
23+, putUint16be
24− , putUint16le
24+, putUint16le
25− , putInt16be
25+, putInt16be
26− , putInt16le
26+, putInt16le
27− , putUint32be
27+, putUint32be
28− , putUint32le
28+, putUint32le
29− , putInt32be
29+, putInt32be
30− , putInt32le
30+, putInt32le
31− , putFloat32be
31+, putFloat32be
32− , putFloat32le
32+, putFloat32le
33− , putFloat64be
33+, putFloat64be
34− , putFloat64le
34+, putFloat64le
35− , module Data.ArrayBuffer.Builder.Internal
35+, module Data.ArrayBuffer.Builder.Internal
36+)
36− ) where
37+where
37
38
38import Prelude
39import Prelude
39
40
src/Data/ArrayBuffer/Internal.purs+44−46
@@ -79,32 +79,33 @@
79-- | so that if we want to change the `Builder` implementation later then we can.
79-- | so that if we want to change the `Builder` implementation later then we can.
80-- |
80-- |
81module Data.ArrayBuffer.Builder.Internal
81module Data.ArrayBuffer.Builder.Internal
82− ( Builder(..)
82+( Builder(..)
83− , (<>>)
83+, (<>>)
84− , DataBuff(..)
84+, DataBuff(..)
85− , toView
85+, toView
86− , execBuilder
86+, execBuilder
87− , length
87+, length
88− , foldl
88+, foldl
89− , foldM
89+, foldM
90− , singleton
90+, singleton
91− , cons
91+, cons
92− , snoc
92+, snoc
93− , encodeUint8
93+, encodeUint8
94− , encodeInt8
94+, encodeInt8
95− , encodeUint16be
95+, encodeUint16be
96− , encodeUint16le
96+, encodeUint16le
97− , encodeInt16be
97+, encodeInt16be
98− , encodeInt16le
98+, encodeInt16le
99− , encodeUint32be
99+, encodeUint32be
100− , encodeUint32le
100+, encodeUint32le
101− , encodeInt32be
101+, encodeInt32be
102− , encodeInt32le
102+, encodeInt32le
103− , encodeFloat32be
103+, encodeFloat32be
104− , encodeFloat32le
104+, encodeFloat32le
105− , encodeFloat64be
105+, encodeFloat64be
106− , encodeFloat64le
106+, encodeFloat64le
107+)
107− ) where
108+where
108
109
109import Prelude
110import Prelude
110
111
@@ -130,7 +131,7 @@ data DataBuff
130-- Concerning DataViews.
131-- Concerning DataViews.
131-- https://v8.dev/blog/dataview
132-- https://v8.dev/blog/dataview
132
133
133−-- | View the contents of `DataBuff` as a `DataView`.
134+ -- | View the contents of `DataBuff` as a `DataView`.
134toView :: DataBuff -> DataView
135toView :: DataBuff -> DataView
135toView (Buff ab) = DV.whole ab
136toView (Buff ab) = DV.whole ab
136toView (View dv) = dv
137toView (View dv) = dv
@@ -190,12 +191,11 @@ instance semigroupBuilder :: Semigroup Builder where
190 append Null r = r
191 append Null r = r
191 append l (Node Null rx rr) = Node l rx rr -- this is the snoc case
192 append l (Node Null rx rr) = Node l rx rr -- this is the snoc case
192 append (Node ll lx Null) r = Node ll lx r -- found the rightmost Null
193 append (Node ll lx Null) r = Node ll lx r -- found the rightmost Null
193− -- of the left tree
194+ -- of the left tree
194 append (Node ll lx lr) r = Node ll lx $ append lr r -- search down the right
195 append (Node ll lx lr) r = Node ll lx $ append lr r -- search down the right
195−
196−-- side of the left tree
196+ -- side of the left tree
197−-- to find the rightmost
197+ -- to find the rightmost
198−-- Null
198+ -- Null
199
199
200infixl 5 append as <>>
200infixl 5 append as <>>
201
201
@@ -211,18 +211,18 @@ foldM :: forall m a. MonadRec m => (a -> DataBuff -> m a) -> a -> Builder -> m a
211-- The Art of Computer Programming 2.3.1
211-- The Art of Computer Programming 2.3.1
212-- Inorder traversal using a stack
212-- Inorder traversal using a stack
213-- https://yuyuan.org/MorrisAlgorithm/
213-- https://yuyuan.org/MorrisAlgorithm/
214−foldM f a0 b = tailRecM outer { p: b, stack: Nil, accum: a0 }
214+foldM f a0 b = tailRecM outer {p: b, stack: Nil, accum: a0}
215 where
215 where
216− outer { p, stack, accum } = do
216+ outer {p,stack,accum} = do
217− stack' <- tailRecM inner { p_: p, stack_: stack }
217+ stack' <- tailRecM inner {p_:p,stack_:stack}
218 case uncons stack' of
218 case uncons stack' of
219 Nothing -> pure $ Done accum
219 Nothing -> pure $ Done accum
220− Just { head: Node _ x r, tail } -> do
220+ Just {head: Node _ x r, tail} -> do
221 accum' <- f accum x
221 accum' <- f accum x
222− pure $ Loop { p: r, stack: tail, accum: accum' }
222+ pure $ Loop {p: r, stack: tail, accum: accum'}
223− Just { head: Null } -> pure $ Done accum
223+ Just {head:Null} -> pure $ Done accum
224− inner { p_: Null, stack_ } = pure $ Done stack_
224+ inner {p_:Null,stack_} = pure $ Done stack_
225− inner { p_: n@(Node l _ _), stack_ } = pure $ Loop { p_: l, stack_: n : stack_ }
225+ inner {p_: n@(Node l _ _), stack_} = pure $ Loop {p_: l, stack_: n:stack_}
226
226
227-- | Construct a `Builder` with a single `DataBuff`. *O(1)*
227-- | Construct a `Builder` with a single `DataBuff`. *O(1)*
228singleton :: DataBuff -> Builder
228singleton :: DataBuff -> Builder
@@ -233,8 +233,8 @@ singleton buf = Node Null buf Null
233length :: Builder -> ByteLength
233length :: Builder -> ByteLength
234length bldr = foldl (\b a -> b + len a) 0 bldr
234length bldr = foldl (\b a -> b + len a) 0 bldr
235 where
235 where
236− len (Buff ab) = AB.byteLength ab
236+ len (Buff ab) = AB.byteLength ab
237− len (View dv) = DV.byteLength dv
237+ len (View dv) = DV.byteLength dv
238
238
239-- | Prepend a `DataBuff` to the beginning of the `Builder`. *O(1)*
239-- | Prepend a `DataBuff` to the beginning of the `Builder`. *O(1)*
240cons :: DataBuff -> Builder -> Builder
240cons :: DataBuff -> Builder -> Builder
@@ -259,11 +259,9 @@ execBuilder bldr = do
259 aview <- liftEffect $ toUint8Array a
259 aview <- liftEffect $ toUint8Array a
260 _ <- liftEffect $ AT.setTyped newview (Just offset) aview
260 _ <- liftEffect $ AT.setTyped newview (Just offset) aview
261 pure $ offset + AT.byteLength aview
261 pure $ offset + AT.byteLength aview
262− )
263− 0
264− bldr
262+ ) 0 bldr
265 pure buf
263 pure buf
266− where
264+ where
267 toUint8Array :: DataBuff -> Effect Uint8Array
265 toUint8Array :: DataBuff -> Effect Uint8Array
268 toUint8Array (Buff ab) = AT.whole ab
266 toUint8Array (Buff ab) = AT.whole ab
269 toUint8Array (View dv) =
267 toUint8Array (View dv) =
test/Main.purs+18−44
@@ -5,20 +5,14 @@ import Prelude
5import Control.Monad.Writer.Trans (tell)
5import Control.Monad.Writer.Trans (tell)
6import Data.Array (foldRecM)
6import Data.Array (foldRecM)
7import Data.Array as Array
7import Data.Array as Array
8−import Data.ArrayBuffer.ArrayBuffer (byteLength)
9−import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putArrayBuffer, putInt16be, putInt32be, putInt32le, putInt8, subBuilder)
8+import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putInt16be, putInt32le, putInt8, subBuilder)
10import Data.ArrayBuffer.Builder.Internal (cons, encodeInt8, execBuilder, length, singleton, (<>>))
9import Data.ArrayBuffer.Builder.Internal (cons, encodeInt8, execBuilder, length, singleton, (<>>))
11import Data.ArrayBuffer.DataView as DV
10import Data.ArrayBuffer.DataView as DV
12−import Data.ArrayBuffer.Typed (buffer)
13import Data.ArrayBuffer.Typed as AT
11import Data.ArrayBuffer.Typed as AT
14−import Data.ArrayBuffer.Typed as AV
12+import Data.ArrayBuffer.Types (ArrayBuffer, Uint8Array)
15−import Data.ArrayBuffer.Types (ArrayBuffer, Uint8Array, Int8Array)
16import Data.UInt as UInt
13import Data.UInt as UInt
17import Effect (Effect)
14import Effect (Effect)
18−import Effect.Class (class MonadEffect, liftEffect)
19import Test.Assert (assertEqual')
15import Test.Assert (assertEqual')
20−import Web.Encoding.TextEncoder (encode)
21−import Web.Encoding.TextEncoder as TextEncoder
22
16
23asBytes :: ArrayBuffer -> Effect (Array Int)
17asBytes :: ArrayBuffer -> Effect (Array Int)
24asBytes x = do
18asBytes x = do
@@ -28,48 +22,48 @@ asBytes x = do
28putTest :: String -> Array Int -> PutM Effect Unit -> Effect Unit
22putTest :: String -> Array Int -> PutM Effect Unit -> Effect Unit
29putTest label expected put = do
23putTest label expected put = do
30 actual <- asBytes =<< execPut put
24 actual <- asBytes =<< execPut put
31− assertEqual' label { actual, expected }
25+ assertEqual' label {actual,expected}
32
26
33buildTest :: String -> Array Int -> Effect Builder -> Effect Unit
27buildTest :: String -> Array Int -> Effect Builder -> Effect Unit
34buildTest label expected bldr = do
28buildTest label expected bldr = do
35 actual <- asBytes =<< execBuilder =<< bldr
29 actual <- asBytes =<< execBuilder =<< bldr
36− assertEqual' label { actual, expected }
30+ assertEqual' label {actual,expected}
37
31
38main :: Effect Unit
32main :: Effect Unit
39main = do
33main = do
40− putTest "Test 0" [ 6, 7, 8 ] do
34+ putTest "Test 0" [6,7,8] do
41 putInt8 6
35 putInt8 6
42 putInt8 7
36 putInt8 7
43 putInt8 8
37 putInt8 8
44
38
45− putTest "Test 1" [ 255, 254 ] do
39+ putTest "Test 1" [255,254] do
46 putInt16be (-2)
40 putInt16be (-2)
47
41
48− putTest "Test 3" [ 3, 0, 0, 0 ] do
42+ putTest "Test 3" [3,0,0,0] do
49 putInt32le 3
43 putInt32le 3
50
44
51− buildTest "Test 4" [ 1, 2, 3, 4 ] do
45+ buildTest "Test 4" [1,2,3,4] do
52 b1 <- Buff <$> encodeInt8 1
46 b1 <- Buff <$> encodeInt8 1
53 b2 <- Buff <$> encodeInt8 2
47 b2 <- Buff <$> encodeInt8 2
54 b3 <- Buff <$> encodeInt8 3
48 b3 <- Buff <$> encodeInt8 3
55 b4 <- Buff <$> encodeInt8 4
49 b4 <- Buff <$> encodeInt8 4
56 pure $ singleton b1 <> singleton b2 <> singleton b3 <> singleton b4
50 pure $ singleton b1 <> singleton b2 <> singleton b3 <> singleton b4
57
51
58− buildTest "Test 5" [ 1, 2, 3, 4 ] do
52+ buildTest "Test 5" [1,2,3,4] do
59 b1 <- Buff <$> encodeInt8 1
53 b1 <- Buff <$> encodeInt8 1
60 b2 <- Buff <$> encodeInt8 2
54 b2 <- Buff <$> encodeInt8 2
61 b3 <- Buff <$> encodeInt8 3
55 b3 <- Buff <$> encodeInt8 3
62 b4 <- Buff <$> encodeInt8 4
56 b4 <- Buff <$> encodeInt8 4
63 pure $ singleton b1 <>> singleton b2 <>> singleton b3 <>> singleton b4
57 pure $ singleton b1 <>> singleton b2 <>> singleton b3 <>> singleton b4
64
58
65− buildTest "Test 6" [ 1, 2, 3, 4 ] do
59+ buildTest "Test 6" [1,2,3,4] do
66 b1 <- Buff <$> encodeInt8 1
60 b1 <- Buff <$> encodeInt8 1
67 b2 <- Buff <$> encodeInt8 2
61 b2 <- Buff <$> encodeInt8 2
68 b3 <- Buff <$> encodeInt8 3
62 b3 <- Buff <$> encodeInt8 3
69 b4 <- Buff <$> encodeInt8 4
63 b4 <- Buff <$> encodeInt8 4
70 pure $ singleton b1 <> (singleton b2 <> singleton b3) <> singleton b4
64 pure $ singleton b1 <> (singleton b2 <> singleton b3) <> singleton b4
71
65
72− buildTest "Test 6" [ 1, 2, 3, 4, 5, 6, 7, 8 ] do
66+ buildTest "Test 6" [1,2,3,4,5,6,7,8] do
73 b1 <- Buff <$> encodeInt8 1
67 b1 <- Buff <$> encodeInt8 1
74 b2 <- Buff <$> encodeInt8 2
68 b2 <- Buff <$> encodeInt8 2
75 b3 <- Buff <$> encodeInt8 3
69 b3 <- Buff <$> encodeInt8 3
@@ -79,11 +73,9 @@ main = do
79 b7 <- Buff <$> encodeInt8 7
73 b7 <- Buff <$> encodeInt8 7
80 b8 <- Buff <$> encodeInt8 8
74 b8 <- Buff <$> encodeInt8 8
81 pure $ singleton b1 <> (singleton b2 <> singleton b3) <> singleton b4
75 pure $ singleton b1 <> (singleton b2 <> singleton b3) <> singleton b4
82− <> singleton b5
83− <> (singleton b6 <> singleton b7)
76+ <> singleton b5 <> (singleton b6 <> singleton b7) <> singleton b8
84− <> singleton b8
85
77
86− buildTest "Test 7" [ 1, 2, 3, 4, 5, 6, 7, 8 ] do
78+ buildTest "Test 7" [1,2,3,4,5,6,7,8] do
87 b1 <- Buff <$> encodeInt8 1
79 b1 <- Buff <$> encodeInt8 1
88 b2 <- Buff <$> encodeInt8 2
80 b2 <- Buff <$> encodeInt8 2
89 b3 <- Buff <$> encodeInt8 3
81 b3 <- Buff <$> encodeInt8 3
@@ -93,16 +85,16 @@ main = do
93 b7 <- Buff <$> encodeInt8 7
85 b7 <- Buff <$> encodeInt8 7
94 b8 <- Buff <$> encodeInt8 8
86 b8 <- Buff <$> encodeInt8 8
95 pure $ ((singleton b1 <> singleton b2) <> (singleton b3 <> singleton b4))
87 pure $ ((singleton b1 <> singleton b2) <> (singleton b3 <> singleton b4))
96− <> ((singleton b5 <> singleton b6) <> (singleton b7 <> singleton b8))
88+ <> ((singleton b5 <> singleton b6) <> (singleton b7 <> singleton b8))
97
89
98− buildTest "Test 8" [ 1, 2, 3, 4 ] do
90+ buildTest "Test 8" [1,2,3,4] do
99 b1 <- Buff <$> encodeInt8 1
91 b1 <- Buff <$> encodeInt8 1
100 b2 <- Buff <$> encodeInt8 2
92 b2 <- Buff <$> encodeInt8 2
101 b3 <- Buff <$> encodeInt8 3
93 b3 <- Buff <$> encodeInt8 3
102 b4 <- Buff <$> encodeInt8 4
94 b4 <- Buff <$> encodeInt8 4
103 pure $ (cons b1 (singleton b2)) <> (cons b3 (singleton b4))
95 pure $ (cons b1 (singleton b2)) <> (cons b3 (singleton b4))
104
96
105− putTest "Test 9" [ 1, 2, 2, 3, 4 ] do
97+ putTest "Test 9" [1,2,2,3,4] do
106 x <- subBuilder do
98 x <- subBuilder do
107 putInt8 3
99 putInt8 3
108 putInt8 4
100 putInt8 4
@@ -111,7 +103,7 @@ main = do
111 putInt8 $ length x
103 putInt8 $ length x
112 tell x
104 tell x
113
105
114− buildTest "Test 10" [ 1, 2, 3, 4, 5, 6, 7, 8 ] do
106+ buildTest "Test 10" [1,2,3,4,5,6,7,8] do
115 b1 <- View <$> DV.whole <$> encodeInt8 1
107 b1 <- View <$> DV.whole <$> encodeInt8 1
116 b2 <- View <$> DV.whole <$> encodeInt8 2
108 b2 <- View <$> DV.whole <$> encodeInt8 2
117 b3 <- View <$> DV.whole <$> encodeInt8 3
109 b3 <- View <$> DV.whole <$> encodeInt8 3
@@ -121,26 +113,8 @@ main = do
121 b7 <- View <$> DV.whole <$> encodeInt8 7
113 b7 <- View <$> DV.whole <$> encodeInt8 7
122 b8 <- View <$> DV.whole <$> encodeInt8 8
114 b8 <- View <$> DV.whole <$> encodeInt8 8
123 pure $ ((singleton b1 <> singleton b2) <> (singleton b3 <> singleton b4))
115 pure $ ((singleton b1 <> singleton b2) <> (singleton b3 <> singleton b4))
124− <> ((singleton b5 <> singleton b6) <> (singleton b7 <> singleton b8))
116+ <> ((singleton b5 <> singleton b6) <> (singleton b7 <> singleton b8))
125
117
126 let stackblower = Array.replicate 20000 2
118 let stackblower = Array.replicate 20000 2
127 putTest "Stack test" stackblower do
119 putTest "Stack test" stackblower do
128 foldRecM (\_ x -> putInt8 x) unit stackblower
120 foldRecM (\_ x -> putInt8 x) unit stackblower
129−
130− do
131− let
132− putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
133− putStringUtf8 s = do
134− textEncoder <- liftEffect TextEncoder.new
135− let stringbuf = buffer $ encode s textEncoder
136− -- Put a 32-bit big-endian length prefix for the length of the utf8 string, in bytes.
137− putInt32be $ byteLength stringbuf
138− putArrayBuffer stringbuf
139−
140− arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "🦝"
141− view :: Int8Array <- AV.whole arraybuffer
142− viewarray <- AV.toArray view
143− assertEqual' "utf-8 test"
144− { actual: viewarray
145− , expected: [ 0, 0, 0, 4, -16, -97, -90, -99 ]
146− }