peasy
Version:
an easy but powerful parser
73 lines (48 loc) • 2.46 kB
text/coffeescript
{vari, cons, uobject, uarray, Trail, Parser} = require '../logicpeasy'
describe 'logicparser', ->
orp = unify = null
beforeEach ->
parser = new Parser
parser.trail = new Trail
unify = (x, y) -> parser.unify(x,y)
orp = (items...) -> parser.orp(items...)()
it "should unify 1 1", ->
expect( unify(1, 1)).toBe true
it "should unify 1 2", ->
expect( unify(1, 2)).toBe false
it "should unify logicvar", ->
expect( unify(vari(), 1)).toBe true
it "should sequential unify logicvar", ->
expect( ($a=vari()) and unify($a, 1) and unify($a, 2)).toBe false
it "should unify logicvar with backtracking", ->
expect( ($a = vari()) and orp((-> unify($a, 1) and unify($a, 2)), -> unify($a, 2))).toBe true
it "should unify cons 1", ->
expect( unify(cons(1, null), cons(1, null))).toBe true
it "should unify cons 2", ->
expect( unify(cons(vari(), null), cons(1, null))).toBe true
it "should unify cons 3", ->
expect( ($a = vari()) and unify(cons($a, null), cons(1, null)) and unify($a, 2)).toBe false
it "should unify cons 4", ->
expect( ($a = vari()) and orp((-> unify(cons($a, null), cons(1, null)) and unify($a, 2)), -> unify($a, 2))).toBe true
it "should unify uobject 1", ->
expect( unify(uobject({a: 1}), {a:1})).toBe true
it "should unify uobject 2", ->
expect( unify(uobject({a: 1}), {a:2})).toBe false
it "should unify uobject 3", ->
expect( unify(uobject({a: vari()}), {a:1})).toBe true
it "should unify uobject 4", ->
expect( ($a = vari()) and unify(uobject({a: $a}), {a:1}) and unify($a, 2)).toBe false
it "should unify uobject 5", ->
expect( ($a = vari()) and orp((-> unify(uobject({a: $a}), {a:1}) and unify($a, 2)), -> unify($a, 2))).toBe true
it "should unify array, uarray 1", ->
expect( unify([], [])).toBe false
it "should unify array, uarray 2", ->
expect( unify(uarray([]), [])).toBe true
it "should unify array, uarray 3", ->
expect( unify(uarray([vari()]), [])).toBe false
it "should unify array, uarray 4", ->
expect( unify(uarray([vari()]), [1])).toBe true
it "should unify array, uarray 5", ->
expect( ($a = vari()) and unify(uarray([$a]), [1]) and unify($a, 2)).toBe false
it "should unify array, uarray 6", ->
expect( ($a = vari()) and orp((-> unify(uarray([$a]), [1]) and unify($a, 2)), -> unify($a, 2))).toBe true