From a95dfbb00d5dc487db862447686186e6a78745d0 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 17:26:44 +0100 Subject: [PATCH 01/13] Remove Gruntfile.js (using Pulp instead) --- Gruntfile.js | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 Gruntfile.js diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index ed5a3d2..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = function(grunt) { - - "use strict"; - - grunt.initConfig({ - - libFiles: [ - "src/**/*.purs", - "bower_components/purescript-*/src/**/*.purs", - ], - - clean: ["output"], - - pscMake: ["<%=libFiles%>"], - dotPsci: ["<%=libFiles%>"], - docgen: { - readme: { - src: "src/**/*.purs", - dest: "README.md" - } - } - - }); - - grunt.loadNpmTasks("grunt-contrib-clean"); - grunt.loadNpmTasks("grunt-purescript"); - - grunt.registerTask("make", ["pscMake", "dotPsci", "docgen"]); - grunt.registerTask("default", ["make"]); -}; From 9d09e4dc82ecd732ea5f110bdb986c84f0a3e29a Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 17:49:12 +0100 Subject: [PATCH 02/13] Add some basic tests --- bower.json | 3 +++ test/Main.purs | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/bower.json b/bower.json index 48788e8..02c9e20 100644 --- a/bower.json +++ b/bower.json @@ -11,5 +11,8 @@ "dependencies": { "purescript-eff": "~0.1.0", "purescript-maybe": "~0.3.1" + }, + "devDependencies": { + "purescript-assert": "~0.1.1" } } diff --git a/test/Main.purs b/test/Main.purs index 588aecb..03b9948 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -2,7 +2,49 @@ module Test.Main where import Prelude import Control.Monad.Eff +import Control.Monad.Eff.Console (log) +import Test.Assert --- TODO -main :: forall e. Eff e Unit -main = return unit +import Node.Buffer + +main :: Eff _ Unit +main = do + log "Testing..." + log "Reading and writing" + testReadWrite + log "fromArray" + testFromArray + log "toArray" + testToArray + +testReadWrite :: Eff _ Unit +testReadWrite = do + buf <- create 1 + let val = 42 + write UInt8 val 0 buf + readVal <- read UInt8 0 buf + + assertEq val readVal + +testFromArray :: Eff _ Unit +testFromArray = do + buf <- fromArray [1,2,3,4,5] + readVal <- read UInt8 2 buf + + assertEq 3 readVal + +testToArray :: Eff _ Unit +testToArray = do + let val = [1,2,67,3,3,7,8,3,4,237] + + buf <- fromArray val + valOut <- toArray buf + + assertEq val valOut + +assertEq :: forall a. (Eq a, Show a) => a -> a -> Eff _ Unit +assertEq x y = + if x == y + then return unit + else let msg = show x ++ " and " ++ show y ++ " were not equal." + in assert' msg false From 459c1c82d2a4c9d386d6b5c137d2ee4bac0742a7 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 17:49:24 +0100 Subject: [PATCH 03/13] Fix all the bad types (refs #5, #3) --- docs/Node/Buffer.md | 40 ++++++++++++++--------------- src/Node/Buffer.js | 60 +++++++++++++++++++++++++++++++------------- src/Node/Buffer.purs | 55 ++++++++++++++++++++-------------------- 3 files changed, 91 insertions(+), 64 deletions(-) diff --git a/docs/Node/Buffer.md b/docs/Node/Buffer.md index 4fecedb..5781e37 100644 --- a/docs/Node/Buffer.md +++ b/docs/Node/Buffer.md @@ -30,13 +30,13 @@ An instance of Node's Buffer class. instance showBuffer :: Show Buffer ``` -#### `BufferWrite` +#### `BUFFER` ``` purescript -data BufferWrite :: ! +data BUFFER :: ! ``` -Effect for buffer modification. +Effect for buffer creation, reading, or writing. #### `BufferValueType` @@ -68,7 +68,7 @@ instance showBufferValueType :: Show BufferValueType #### `create` ``` purescript -create :: Int -> Buffer +create :: forall e. Int -> Eff (buffer :: BUFFER | e) Buffer ``` Creates a new buffer of the specified size. @@ -76,7 +76,7 @@ Creates a new buffer of the specified size. #### `fromArray` ``` purescript -fromArray :: Array Octet -> Buffer +fromArray :: forall e. Array Octet -> Eff (buffer :: BUFFER | e) Buffer ``` Creates a new buffer from an array of octets, sized to match the array. @@ -84,7 +84,7 @@ Creates a new buffer from an array of octets, sized to match the array. #### `fromString` ``` purescript -fromString :: String -> Encoding -> Buffer +fromString :: forall e. String -> Encoding -> Eff (buffer :: BUFFER | e) Buffer ``` Creates a new buffer from a string with the specified encoding, sized to @@ -93,7 +93,7 @@ match the string. #### `read` ``` purescript -read :: BufferValueType -> Offset -> Buffer -> Int +read :: forall e. BufferValueType -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Int ``` Reads a numeric value from a buffer at the specified offset. @@ -101,7 +101,7 @@ Reads a numeric value from a buffer at the specified offset. #### `readString` ``` purescript -readString :: Encoding -> Offset -> Offset -> Buffer -> String +readString :: forall e. Encoding -> Offset -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) String ``` Reads a section of a buffer as a string with the specified encoding. @@ -109,7 +109,7 @@ Reads a section of a buffer as a string with the specified encoding. #### `toString` ``` purescript -toString :: Encoding -> Buffer -> String +toString :: forall e. Encoding -> Buffer -> Eff (buffer :: BUFFER | e) String ``` Reads the buffer as a string with the specified encoding. @@ -117,7 +117,7 @@ Reads the buffer as a string with the specified encoding. #### `write` ``` purescript -write :: forall e. BufferValueType -> Int -> Offset -> Buffer -> Eff (buffer :: BufferWrite | e) Unit +write :: forall e. BufferValueType -> Int -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Unit ``` Writes a numeric value to a buffer at the specified offset. @@ -125,7 +125,7 @@ Writes a numeric value to a buffer at the specified offset. #### `writeString` ``` purescript -writeString :: forall e. Encoding -> Offset -> Int -> String -> Buffer -> Eff (buffer :: BufferWrite | e) Int +writeString :: forall e. Encoding -> Offset -> Int -> String -> Buffer -> Eff (buffer :: BUFFER | e) Int ``` Writes octets from a string to a buffer at the specified offset. Multi-byte @@ -135,7 +135,7 @@ to write them fully. The number of bytes written is returned. #### `toArray` ``` purescript -toArray :: Buffer -> Array Octet +toArray :: forall e. Buffer -> Eff (buffer :: BUFFER | e) (Array Octet) ``` Creates an array of octets from a buffer's contents. @@ -143,7 +143,7 @@ Creates an array of octets from a buffer's contents. #### `getAtOffset` ``` purescript -getAtOffset :: Offset -> Buffer -> Maybe Octet +getAtOffset :: forall e. Offset -> Buffer -> Eff (buffer :: BUFFER | e) (Maybe Octet) ``` Reads an octet from a buffer at the specified offset. @@ -151,7 +151,7 @@ Reads an octet from a buffer at the specified offset. #### `setAtOffset` ``` purescript -setAtOffset :: forall e. Octet -> Offset -> Buffer -> Eff (buffer :: BufferWrite | e) Unit +setAtOffset :: forall e. Octet -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Unit ``` Writes an octet in the buffer at the specified offset. @@ -159,7 +159,7 @@ Writes an octet in the buffer at the specified offset. #### `size` ``` purescript -size :: Buffer -> Int +size :: forall e. Buffer -> Eff (buffer :: BUFFER | e) Int ``` Returns the size of a buffer. @@ -167,7 +167,7 @@ Returns the size of a buffer. #### `concat` ``` purescript -concat :: Array Buffer -> Buffer +concat :: forall e. Array Buffer -> Eff (buffer :: BUFFER | e) Buffer ``` Concatenates a list of buffers. @@ -175,7 +175,7 @@ Concatenates a list of buffers. #### `concat'` ``` purescript -concat' :: Array Buffer -> Int -> Buffer +concat' :: forall e. Array Buffer -> Int -> Eff (buffer :: BUFFER | e) Buffer ``` Concatenates a list of buffers, combining them into a new buffer of the @@ -184,16 +184,16 @@ specified length. #### `copy` ``` purescript -copy :: Offset -> Offset -> Buffer -> Offset -> Buffer -> Buffer +copy :: forall e. Offset -> Offset -> Buffer -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Int ``` Copies a section of a source buffer into a target buffer at the specified -offset. +offset, and returns the number of octets copied. #### `fill` ``` purescript -fill :: forall e. Octet -> Offset -> Offset -> Buffer -> Eff (buffer :: BufferWrite | e) Unit +fill :: forall e. Octet -> Offset -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Unit ``` Fills a range in a buffer with the specified octet. diff --git a/src/Node/Buffer.js b/src/Node/Buffer.js index c625266..9ee13ca 100644 --- a/src/Node/Buffer.js +++ b/src/Node/Buffer.js @@ -8,23 +8,31 @@ exports.showImpl = require('util').inspect; exports.create = function (size) { - return new Buffer(size); + return function() { + return new Buffer(size); + }; }; exports.fromArray = function (octets) { - return new Buffer(octets); + return function() { + return new Buffer(octets); + }; }; exports.fromStringImpl = function (str) { return function (encoding) { - return new Buffer(str, encoding); + return function() { + return new Buffer(str, encoding); + }; }; }; exports.readImpl = function (ty) { return function (offset) { return function (buf) { - return buf['read' + ty](offset); + return function() { + return buf['read' + ty](offset); + }; }; }; }; @@ -33,7 +41,9 @@ exports.readStringImpl = function (enc) { return function (start) { return function (end) { return function (buff) { - return buff.toString(enc, start, end); + return function() { + return buff.toString(enc, start, end); + }; }; }; }; @@ -41,7 +51,9 @@ exports.readStringImpl = function (enc) { exports.toStringImpl = function (enc) { return function (buff) { - return buff.toString(enc); + return function() { + return buff.toString(enc); + }; }; }; @@ -73,16 +85,20 @@ exports.writeStringImpl = function (enc) { }; exports.toArray = function (buff) { - return buff.toJSON(); + return function() { + return buff.toJSON(); + }; }; exports.getAtOffsetImpl = function (nothing) { return function (just) { return function (buff) { return function (offset) { - var octet = buff[offset]; - return octet == null ? nothing - : just(buff[i]); + return function() { + var octet = buff[offset]; + return octet == null ? nothing + : just(buff[i]); + }; }; }; }; @@ -91,25 +107,33 @@ exports.getAtOffsetImpl = function (nothing) { exports.setAtOffset = function (value) { return function (offset) { return function (buff) { - buff[offset] = value; - return {}; + return function() { + buff[offset] = value; + return {}; + }; }; }; }; exports.size = function (buff) { - return buff.length; + return function() { + return buff.length; + }; }; exports.concat = function (buffs) { - return Buffer.concat(buffs); + return function() { + return Buffer.concat(buffs); + }; }; -exports.concat$prime = function (buffs) { +exports["concat'"] = function (buffs) { return function (totalLength) { - return Buffer.concat(buffs, totalLength); + return function() { + return Buffer.concat(buffs, totalLength); + }; }; }; @@ -118,7 +142,9 @@ exports.copy = function (srcStart) { return function (src) { return function (targStart) { return function (targ) { - return src.copy(targ, targStart, srcStart, strcEnd); + return function() { + return src.copy(targ, targStart, srcStart, strcEnd); + }; }; }; }; diff --git a/src/Node/Buffer.purs b/src/Node/Buffer.purs index abb7a34..891a31e 100644 --- a/src/Node/Buffer.purs +++ b/src/Node/Buffer.purs @@ -2,7 +2,7 @@ module Node.Buffer ( Octet() , Offset() , Buffer() - , BufferWrite() + , BUFFER() , BufferValueType(..) , create , fromArray @@ -42,8 +42,8 @@ instance showBuffer :: Show Buffer where foreign import showImpl :: Buffer -> String --- | Effect for buffer modification. -foreign import data BufferWrite :: ! +-- | Effect for buffer creation, reading, or writing. +foreign import data BUFFER :: ! -- | Enumeration of the numeric types that can be written to a buffer. data BufferValueType @@ -79,80 +79,81 @@ instance showBufferValueType :: Show BufferValueType where show DoubleBE = "DoubleBE" -- | Creates a new buffer of the specified size. -foreign import create :: Int -> Buffer +foreign import create :: forall e. Int -> Eff (buffer :: BUFFER | e) Buffer -- | Creates a new buffer from an array of octets, sized to match the array. -foreign import fromArray :: Array Octet -> Buffer +foreign import fromArray :: forall e. Array Octet -> Eff (buffer :: BUFFER | e) Buffer -- | Creates a new buffer from a string with the specified encoding, sized to -- | match the string. -fromString :: String -> Encoding -> Buffer +fromString :: forall e. String -> Encoding -> Eff (buffer :: BUFFER | e) Buffer fromString str = fromStringImpl str <<< show -foreign import fromStringImpl :: String -> String -> Buffer +foreign import fromStringImpl :: forall e. String -> String -> Eff (buffer :: BUFFER | e) Buffer -- | Reads a numeric value from a buffer at the specified offset. -read :: BufferValueType -> Offset -> Buffer -> Int +read :: forall e. BufferValueType -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Int read = readImpl <<< show -foreign import readImpl :: String -> Offset -> Buffer -> Int +foreign import readImpl :: forall e. String -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Int -- | Reads a section of a buffer as a string with the specified encoding. -readString :: Encoding -> Offset -> Offset -> Buffer -> String +readString :: forall e. Encoding -> Offset -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) String readString = readStringImpl <<< show -foreign import readStringImpl :: String -> Offset -> Offset -> Buffer -> String +foreign import readStringImpl :: + forall e. String -> Offset -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) String -- | Reads the buffer as a string with the specified encoding. -toString :: Encoding -> Buffer -> String +toString :: forall e. Encoding -> Buffer -> Eff (buffer :: BUFFER | e) String toString = toStringImpl <<< show -foreign import toStringImpl :: String -> Buffer -> String +foreign import toStringImpl :: forall e. String -> Buffer -> Eff (buffer :: BUFFER | e) String -- | Writes a numeric value to a buffer at the specified offset. -write :: forall e. BufferValueType -> Int -> Offset -> Buffer -> Eff (buffer :: BufferWrite | e) Unit +write :: forall e. BufferValueType -> Int -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Unit write = writeImpl <<< show foreign import writeImpl :: - forall e. String -> Int -> Offset -> Buffer -> Eff (buffer :: BufferWrite | e) Unit + forall e. String -> Int -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Unit -- | Writes octets from a string to a buffer at the specified offset. Multi-byte -- | characters will not be written to the buffer if there is not enough capacity -- | to write them fully. The number of bytes written is returned. -writeString :: forall e. Encoding -> Offset -> Int -> String -> Buffer -> Eff (buffer :: BufferWrite | e) Int +writeString :: forall e. Encoding -> Offset -> Int -> String -> Buffer -> Eff (buffer :: BUFFER | e) Int writeString = writeStringImpl <<< show foreign import writeStringImpl :: - forall e. String -> Offset -> Int -> String -> Buffer -> Eff (buffer :: BufferWrite | e) Int + forall e. String -> Offset -> Int -> String -> Buffer -> Eff (buffer :: BUFFER | e) Int -- | Creates an array of octets from a buffer's contents. -foreign import toArray :: Buffer -> Array Octet +foreign import toArray :: forall e. Buffer -> Eff (buffer :: BUFFER | e) (Array Octet) -- | Reads an octet from a buffer at the specified offset. -getAtOffset :: Offset -> Buffer -> Maybe Octet +getAtOffset :: forall e. Offset -> Buffer -> Eff (buffer :: BUFFER | e) (Maybe Octet) getAtOffset = getAtOffsetImpl Just Nothing foreign import getAtOffsetImpl :: - (Octet -> Maybe Octet) -> Maybe Octet -> Offset -> Buffer -> Maybe Octet + forall e. (Octet -> Maybe Octet) -> Maybe Octet -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) (Maybe Octet) -- | Writes an octet in the buffer at the specified offset. foreign import setAtOffset :: - forall e. Octet -> Offset -> Buffer -> Eff (buffer :: BufferWrite | e) Unit + forall e. Octet -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Unit -- | Returns the size of a buffer. -foreign import size :: Buffer -> Int +foreign import size :: forall e. Buffer -> Eff (buffer :: BUFFER | e) Int -- | Concatenates a list of buffers. -foreign import concat :: Array Buffer -> Buffer +foreign import concat :: forall e. Array Buffer -> Eff (buffer :: BUFFER | e) Buffer -- | Concatenates a list of buffers, combining them into a new buffer of the -- | specified length. -foreign import concat' :: Array Buffer -> Int -> Buffer +foreign import concat' :: forall e. Array Buffer -> Int -> Eff (buffer :: BUFFER | e) Buffer -- | Copies a section of a source buffer into a target buffer at the specified --- | offset. -foreign import copy :: Offset -> Offset -> Buffer -> Offset -> Buffer -> Buffer +-- | offset, and returns the number of octets copied. +foreign import copy :: forall e. Offset -> Offset -> Buffer -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Int -- | Fills a range in a buffer with the specified octet. foreign import fill :: - forall e. Octet -> Offset -> Offset -> Buffer -> Eff (buffer :: BufferWrite | e) Unit + forall e. Octet -> Offset -> Offset -> Buffer -> Eff (buffer :: BUFFER | e) Unit From 8a4dc734d45297518ca60452f0e6bf5d5153dcdc Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 17:51:11 +0100 Subject: [PATCH 04/13] Make sure toArray returns an array --- src/Node/Buffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Node/Buffer.js b/src/Node/Buffer.js index 9ee13ca..f4e3d4e 100644 --- a/src/Node/Buffer.js +++ b/src/Node/Buffer.js @@ -86,7 +86,7 @@ exports.writeStringImpl = function (enc) { exports.toArray = function (buff) { return function() { - return buff.toJSON(); + return buff.toJSON().data; }; }; From 29d53dc9631d0616ea2662d63e263a664d0adeab Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 17:58:46 +0100 Subject: [PATCH 05/13] More tests --- test/Main.purs | 54 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/test/Main.purs b/test/Main.purs index 03b9948..fc9ec99 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -2,22 +2,37 @@ module Test.Main where import Prelude import Control.Monad.Eff -import Control.Monad.Eff.Console (log) +import Control.Monad.Eff.Console (log, CONSOLE()) import Test.Assert import Node.Buffer +import Node.Encoding -main :: Eff _ Unit +type Test = forall e. Eff (assert :: ASSERT, buffer :: BUFFER, console :: CONSOLE | e) Unit + +main :: Test main = do log "Testing..." + log "Reading and writing" testReadWrite + log "fromArray" testFromArray + log "toArray" testToArray -testReadWrite :: Eff _ Unit + log "fromString" + testFromString + + log "toString" + testToString + + log "readString" + testReadString + +testReadWrite :: Test testReadWrite = do buf <- create 1 let val = 42 @@ -26,14 +41,14 @@ testReadWrite = do assertEq val readVal -testFromArray :: Eff _ Unit +testFromArray :: Test testFromArray = do buf <- fromArray [1,2,3,4,5] readVal <- read UInt8 2 buf assertEq 3 readVal -testToArray :: Eff _ Unit +testToArray :: Test testToArray = do let val = [1,2,67,3,3,7,8,3,4,237] @@ -42,7 +57,34 @@ testToArray = do assertEq val valOut -assertEq :: forall a. (Eq a, Show a) => a -> a -> Eff _ Unit +testFromString :: Test +testFromString = do + let str = "hello, world" + + buf <- fromString str ASCII + val <- read UInt8 6 buf + + assertEq val 32 -- ASCII space + +testToString :: Test +testToString = do + let str = "hello, world" + + buf <- fromString str ASCII + strOut <- toString ASCII buf + + assertEq str strOut + +testReadString :: Test +testReadString = do + let str = "hello, world" + + buf <- fromString str ASCII + strOut <- readString ASCII 7 12 buf + + assertEq "world" strOut + +assertEq :: forall a. (Eq a, Show a) => a -> a -> Test assertEq x y = if x == y then return unit From bdf5951c4acc09b3e4764d756f2951be7e756fb1 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:04:05 +0100 Subject: [PATCH 06/13] Fix typo in Buffer FFI code --- src/Node/Buffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Node/Buffer.js b/src/Node/Buffer.js index f4e3d4e..b6d8520 100644 --- a/src/Node/Buffer.js +++ b/src/Node/Buffer.js @@ -143,7 +143,7 @@ exports.copy = function (srcStart) { return function (targStart) { return function (targ) { return function() { - return src.copy(targ, targStart, srcStart, strcEnd); + return src.copy(targ, targStart, srcStart, srcEnd); }; }; }; From d098fd92ddeea058320bc5580eb411dd064fbbe7 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:06:51 +0100 Subject: [PATCH 07/13] Fix argument order in FFI code for `fill` --- src/Node/Buffer.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Node/Buffer.js b/src/Node/Buffer.js index b6d8520..71b5873 100644 --- a/src/Node/Buffer.js +++ b/src/Node/Buffer.js @@ -151,14 +151,14 @@ exports.copy = function (srcStart) { }; }; -exports.fill = function (buff) { - return function (octet) { - return function (start) { - return function (end) { +exports.fill = function (octet) { + return function (start) { + return function (end) { + return function (buf) { return function() { - buff.fill(octet, start, end); + buf.fill(octet, start, end); return {}; - } + }; }; }; }; From f2221c66a3887e6ab9979a0be65d6454c22939ed Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:07:08 +0100 Subject: [PATCH 08/13] Update tests --- test/Main.purs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/Main.purs b/test/Main.purs index fc9ec99..7783f7e 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -32,6 +32,12 @@ main = do log "readString" testReadString + log "copy" + testCopy + + log "fill" + testFill + testReadWrite :: Test testReadWrite = do buf <- create 1 @@ -84,6 +90,25 @@ testReadString = do assertEq "world" strOut +testCopy :: Test +testCopy = do + buf1 <- fromArray [1,2,3,4,5] + buf2 <- fromArray [10,9,8,7,6] + + copied <- copy 0 3 buf1 2 buf2 + out <- toArray buf2 + + assertEq copied 3 + assertEq out [10,9,1,2,3] + +testFill :: Test +testFill = do + buf <- fromArray [1,1,1,1,1] + fill 42 2 4 buf + out <- toArray buf + + assertEq [1,1,42,42,1] out + assertEq :: forall a. (Eq a, Show a) => a -> a -> Test assertEq x y = if x == y From 00127493ad57e9e49de1026b08811b0eef5bf8ec Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:10:01 +0100 Subject: [PATCH 09/13] Add console to bower.json --- bower.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 02c9e20..0db8725 100644 --- a/bower.json +++ b/bower.json @@ -13,6 +13,7 @@ "purescript-maybe": "~0.3.1" }, "devDependencies": { - "purescript-assert": "~0.1.1" + "purescript-assert": "~0.1.1", + "purescript-console": "~0.1.1" } } From 9e524766c703c996438a407ebcc902d7e3c25e3c Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:15:30 +0100 Subject: [PATCH 10/13] Fix toArray on node 0.10 or earlier --- src/Node/Buffer.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Node/Buffer.js b/src/Node/Buffer.js index 71b5873..88b4754 100644 --- a/src/Node/Buffer.js +++ b/src/Node/Buffer.js @@ -86,7 +86,8 @@ exports.writeStringImpl = function (enc) { exports.toArray = function (buff) { return function() { - return buff.toJSON().data; + var json = buff.toJSON() + return json.data || json; }; }; From ec5254f7da1c6fd12fd667ced585d76688f2bdf3 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:19:05 +0100 Subject: [PATCH 11/13] Run tests on node 0.12 and 4.1 --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 791313a..3a3392d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,8 @@ language: node_js sudo: false node_js: - 0.10 + - 0.12 + - 4.1 env: - PATH=$HOME/purescript:$PATH install: From a0da6ad9707463ddc7815b29a6e52f4e046759ff Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:29:09 +0100 Subject: [PATCH 12/13] Add test for concat' --- bower.json | 3 ++- test/Main.purs | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 0db8725..18bcf26 100644 --- a/bower.json +++ b/bower.json @@ -14,6 +14,7 @@ }, "devDependencies": { "purescript-assert": "~0.1.1", - "purescript-console": "~0.1.1" + "purescript-console": "~0.1.1", + "purescript-foldable-traversable": "~0.4.1" } } diff --git a/test/Main.purs b/test/Main.purs index 7783f7e..40d96b6 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -1,6 +1,7 @@ module Test.Main where import Prelude +import Data.Traversable (traverse) import Control.Monad.Eff import Control.Monad.Eff.Console (log, CONSOLE()) import Test.Assert @@ -38,6 +39,9 @@ main = do log "fill" testFill + log "concat'" + testConcat' + testReadWrite :: Test testReadWrite = do buf <- create 1 @@ -109,6 +113,14 @@ testFill = do assertEq [1,1,42,42,1] out +testConcat' :: Test +testConcat' = do + bufs <- traverse fromArray $ map (\x -> [x, x+1, x+2]) [0,3,6,9,12] + buf <- concat' bufs 10 + out <- toArray buf + + assertEq [0,1,2,3,4,5,6,7,8,9] out + assertEq :: forall a. (Eq a, Show a) => a -> a -> Test assertEq x y = if x == y From eb41f8856a1f290b0a7797250a1873b69a513e6d Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Tue, 10 Nov 2015 18:50:02 +0100 Subject: [PATCH 13/13] Fix concat' test on node 0.10 --- test/Main.purs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Main.purs b/test/Main.purs index 40d96b6..7b5cbe6 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -116,10 +116,10 @@ testFill = do testConcat' :: Test testConcat' = do bufs <- traverse fromArray $ map (\x -> [x, x+1, x+2]) [0,3,6,9,12] - buf <- concat' bufs 10 + buf <- concat' bufs 15 out <- toArray buf - assertEq [0,1,2,3,4,5,6,7,8,9] out + assertEq [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] out assertEq :: forall a. (Eq a, Show a) => a -> a -> Test assertEq x y =