Skip to content

Commit

Permalink
update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Dominic authored and Dominic committed Jul 23, 2020
1 parent 9a9f3aa commit 30e106d
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 50 deletions.
73 changes: 42 additions & 31 deletions test/index.js
@@ -1,67 +1,78 @@
var assert = require('assert')
var eq = assert.equal
assert.equal = function (a, b) {
console.log('eq', a , b)
eq(a, b)
}
var {AND,OR,MAYBE,MANY,MORE,JOIN,RECURSE,TEXT,GROUP} = require('../')

var aORb = OR(/^a/, /^b/)

assert.equal(aORb('a', 0).length, 1)
assert.equal(aORb('b', 0).length, 1)
assert.equal(aORb('c', 0), null)
assert.equal(aORb('a', 0), 1)
assert.equal(aORb('b', 0), 1)
assert.equal(aORb('c', 0), -1)

var aANDb = AND(/^a/, /^b/)

assert.equal(aANDb('ab', 0).length, 2)
assert.equal(aANDb('ba', 0), null)
assert.equal(aANDb('ab', 0), 2)
assert.equal(aANDb('ba', 0), -1)

var MAYBEb = MAYBE(/^b/)

assert.equal(MAYBEb('ba', 0).length, 1)
assert.equal(MAYBEb('ab', 0).length, 0)
assert.equal(MAYBEb('ba', 0), 1)
assert.equal(MAYBEb('ab', 0), 0)

var MANYa = MANY(/^a/)

assert.equal(MANYa('ab', 0).length, 1)
assert.equal(MANYa('aaab', 0).length, 3)
assert.equal(MANYa('b', 0).length, 0)
assert.equal(MANYa('ab', 0), 1)
assert.equal(MANYa('aaab', 0), 3)
assert.equal(MANYa('b', 0), 0)

var MOREa = MORE(/^a/)

assert.equal(MOREa('aaab', 0).length, 3)
assert.equal(MOREa('b', 0), null)
assert.equal(MOREa('aaab', 0), 3)
assert.equal(MOREa('b', 0), -1)

var aCOMMAS = JOIN(/^a/, /^,/)

assert.equal(aCOMMAS('a,a,a',0).length, 5)
assert.equal(aCOMMAS('a,a,',0).length, 3)
assert.equal(aCOMMAS('a,a,a',0), 5)
assert.equal(aCOMMAS('a,a,',0), 3)

var abcSPACES = JOIN(/^[abc]+/, /^\s+/)
var aGROUPS = JOIN(TEXT(/^a/), /^,/)

assert.equal(abcSPACES('a b c',0).length, 5)
assert.equal(abcSPACES('aaa bbb c',0).length, 11)
var g = []
assert.equal(aGROUPS('a,a,a', 0, 5, g), 5)
assert.deepEqual(g, ['a', 'a', 'a'])

var LIST = RECURSE()
var abcSPACES = JOIN(/^[abc]+/, /^\s+/)

assert.equal(abcSPACES('a b c',0), 5)
assert.equal(abcSPACES('aaa bbb c',0), 11)

function match(rule, input, matched, groups) {
var g = []
var m = rule(input, 0, input.length, g)
assert.equal(m, matched)
assert.deepEqual(g, groups)
}
var name = /^\w+/, space = /^\s+/

var LIST = RECURSE()
LIST(AND('(', GROUP(MAYBE(JOIN(OR(TEXT(name), LIST), space))), ')'))

assert.equal(LIST('(a)', 0).length, 3)
assert.equal(LIST('((a))', 0).length, 5)
assert.equal(LIST('((a b c))', 0).length, 9)
assert.equal(LIST('((()))', 0).length, 6)
console.log(LIST('(foo (bar baz))', 0).groups)
assert.deepEqual(LIST('((()))', 0).groups[0], [[[]]])
match(LIST, '(a)' , 3, [['a']])
match(LIST, '((a))' , 5, [[['a']]])
match(LIST, '((a b c))', 9, [[['a', 'b', 'c']]])
match(LIST, '((()))' , 6, [[[[]]]])


//And(Catch(/^\w+/), '@', Catch(/^\w+\.[a-z]+/))

var EMAIL = AND(TEXT(/^\w+/), '@', TEXT(/^\w+\.[a-z]+/))

var email = EMAIL('foo@bar.baz', 0)
//var email = EMAIL('foo@bar.baz', 0, 11, [])

assert.deepEqual(email, {length: 11, groups: ['foo', 'bar.baz']})
match(EMAIL, 'foo@bar.baz', 11, ['foo', 'bar.baz'])

var CSV = JOIN(GROUP(JOIN(TEXT(/^\w+/),',')),'\n')

assert.deepEqual(
CSV('a,b,c\nd,e,f', 0),
{length: 11, groups: [['a','b','c'], ['d', 'e', 'f']]}
)
match(CSV, 'a,b,c\nd,e,f', 11, [['a','b','c'], ['d', 'e', 'f']])
52 changes: 33 additions & 19 deletions test/json.js
Expand Up @@ -16,22 +16,26 @@ var inputs = [
'"{\"foo\":\"bar\"}"'
]

console.log(
json(JSON.stringify({okay: [1,2,3], empty: {}}), 0).groups[0]
)
// console.log(
// json(JSON.stringify({okay: [1,2,3], empty: {}}), 0).groups[0]
// )

var fs = require('fs')
var path = require('path')
var pkg = JSON.stringify(require('../package.json'))//fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')
var pkg = fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')
//console.log(pkg)
var start = Date.now()
var N = 10, custom, builtin
for(var i = 0; i < N; i++)
var parsed = json(pkg, 0).groups[0]
var pkg = JSON.stringify(require('../package.json'))
//var pkg = fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')

var start = Date.now()
var N = 10000, custom, builtin
for(var i = 0; i < N; i++) {
var g = []
json(pkg, 0, pkg.length, g)
parsed = g[0]
}
console.log('json.parse', custom = (Date.now() - start)/N)

assert.deepEqual(parsed, require('../package.json'))

var start = Date.now()
for(var i = 0; i < N; i++)
var parsed = JSON.parse(pkg)
Expand All @@ -45,19 +49,22 @@ console.log(

assert.deepEqual(parsed, require('../package.json'))

//invalid tests
for(var i = 0; i < 10; i++) {
//insert 'X"{]' should break any json object...
var r = ~~(Math.random()*pkg.length)
var r2 = r + ~~(Math.random()*(pkg.length-r))
var partial = pkg.substring(0, r) + 'X"{]' + pkg.substring(r2)
var fail
try {
var v = json(partial, 0)
var v = json(partial, 0, partial.length, [])
fail = true
} catch (err) {
//NOTE: _sometimes_ this fails to error, somehow the string is still valid.
if(v != null)
console.log('INPUT:', partial)
assert.equal(v, null)
if(~v) console.log('INPUT:', partial)
fail = false
}
assert.equal(fail, false)
}

// assert.deepEqual(json('[ ]', 0).groups[0], [])
Expand All @@ -66,9 +73,16 @@ for(var i = 0; i < 10; i++) {
for(var k in inputs) {
var str = JSON.stringify(inputs[k])
console.log('string:', str)
assert.deepEqual(json(str, 0).groups[0], inputs[k])
assert.deepEqual(json(JSON.stringify(inputs[k], null, 2), 0).groups[0], inputs[k])
var g = [], g2 = []
assert.ok(~json(str, 0, str.length, g))
assert.deepEqual(g[0], inputs[k])
var str = JSON.stringify(inputs[k], null, 2)
json(str, 0, str.length, g2)
assert.deepEqual(g2[0], inputs[k])
}
var str = JSON.stringify(inputs)
console.log('string:', str)
assert.deepEqual(json(str, 0).groups[0], inputs)

var str = JSON.stringify(inputs), g3 = []

console.log('string:', str)
assert.equal(json(str, 0, str.length, g3), str.length)
assert.deepEqual(g3[0], inputs)

0 comments on commit 30e106d

Please sign in to comment.