Skip to content

Commit

Permalink
initial tests for friebyrd
Browse files Browse the repository at this point in the history
  • Loading branch information
buzzdecafe committed May 17, 2013
1 parent fc60490 commit 78b0617
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 10 deletions.
11 changes: 2 additions & 9 deletions lib/friebyrd.js
Expand Up @@ -102,8 +102,6 @@

})();
F.ignorance = new Bindings();
F.$x = F.lvar("x");
F.$y = F.lvar("y");
F.unify = function(l, r, bindings) {
var t1, t2;

Expand All @@ -127,13 +125,8 @@
};
F.goal = function(l, r) {
return function(bindings) {
var result;

result = F.unify(l, r, bindings);
if (result !== null) {
return F.succeed(result);
}
return F.fail(bindings);
var result = F.unify(l, r, bindings);
return (result !== null) ? F.succeed(result) : F.fail(bindings);
};
};
F.run = function(goal) {
Expand Down
57 changes: 57 additions & 0 deletions spec/friebyrd.spec.js
@@ -0,0 +1,57 @@
describe("friebyrd", function() {

describe("Goals", function() {

describe("fail", function() {
it("returns an empty list for any arguments", function() {
expect(F.fail(5)).toEqual([]);
});
});

describe("succeed", function() {
it("returns a list containing its (first) argument", function() {
expect(F.succeed(5)).toEqual([5]);
});
});

describe("unify", function() {
it("returns the substitution object on success", function() {
var q = F.lvar("q");
var b = F.unify(true, q, F.ignorance);
expect(b.binds).toEqual({q: true});
});
});
});

describe("Logic Engine", function() {
describe("run", function() {
it("returns an empty list if its goal fails", function() {
var q = F.lvar("q");
var p = F.lvar("p");
expect(F.run(F.fail)).toEqual([]);
expect(F.run(F.goal(1, false))).toEqual([]);
expect(F.run(F.goal(1, null))).toEqual([]);
expect(F.run(F.goal(false, 1))).toEqual([]);
expect(F.run(F.goal(null, 1))).toEqual([]);
expect(F.run(F.goal(2, 1))).toEqual([]);
});

it("returns a non-empty list if its goal succeeds", function() {
var q = F.lvar("q");
var b = F.run(F.succeed);
expect(b instanceof Array).toBe(true);
expect(b[0].binds).toEqual({});
b = F.run(F.goal(q, true));
expect(b instanceof Array).toBe(true);
expect(b[0].binds).toEqual({q: true});
});

/**/
});
});
/**/
});




2 changes: 1 addition & 1 deletion test.html
Expand Up @@ -18,9 +18,9 @@
<script type="text/javascript" src="https://raw.github.com/documentcloud/underscore-contrib/master/underscore.object.selectors.js"></script>

<script type="text/javascript" src="lib/friebyrd.js"></script>
<script type="text/javascript" src="https://raw.github.com/bodil/lolkanren/master/kanren.js"></script>

<!-- include spec files here... -->
<script type="text/javascript" src="spec/friebyrd.spec.js"></script>

<script type="text/javascript">
(function() {
Expand Down

0 comments on commit 78b0617

Please sign in to comment.