Initial import.
[rrr.git] / tests / rrr.js
1 /*global require, it, assert, assertEqual, assertNot */
2 /*jshint -W085 */ // "Don't use 'with'."
3
4 var JS = this.JS || require('jstest');
5 var rrr = require('../rrr');
6
7 var AB = new rrr.Grammar({
8 A: ["A"],
9 B: ["B"],
10 AB: ["<A> <B>"],
11 }, "<AB >+");
12
13 var DIGITS = new rrr.Grammar({
14 Digits: ["<digit>+"],
15 digit: "0123456789"
16 });
17
18 JS.Test.describe('rrr AB', function () { with (this) {
19 it("simply expands", function () { with (this) {
20 assertEqual("A", AB.expand("<A>"));
21 assertEqual("B", AB.expand("<B>"));
22 assertEqual("A B", AB.expand("<AB>"));
23 }});
24 it("expands multiple tokens", function () { with (this) {
25 assertEqual("A B A", AB.expand("<A> <B> <A>"));
26 }});
27 it("expands multiple times", function () { with (this) {
28 assertEqual("AAAAA", AB.expand("<A>{5}"));
29 }});
30 it("expands random times", function () { with (this) {
31 var r = [];
32 for (var i = 0; i < 1000; ++i)
33 r.push(AB.expand("<A>{1,10}"));
34 assert(r.indexOf("") < 0);
35 assert(r.indexOf("A") >= 0);
36 assert(r.indexOf("AA") >= 0);
37 assert(r.indexOf("AAA") >= 0);
38 assert(r.indexOf("AAAA") >= 0);
39 assert(r.indexOf("AAAAA") >= 0);
40 assert(r.indexOf("AAAAAA") >= 0);
41 assert(r.indexOf("AAAAAAA") >= 0);
42 assert(r.indexOf("AAAAAAAA") >= 0);
43 assert(r.indexOf("AAAAAAAAA") >= 0);
44 assert(r.indexOf("AAAAAAAAAA") >= 0);
45 assert(r.indexOf("AAAAAAAAAAA") < 0);
46 }});
47 it("expands repeatedly", function () { with (this) {
48 var r = [];
49 for (var i = 0; i < 100; ++i)
50 r.push(AB.expand());
51 assert(r.indexOf("") < 0);
52 assert(r.indexOf("A B") >= 0);
53 assert(r.indexOf("A B A B") >= 0);
54 }});
55 it("expands repetitions differently", function () { with (this) {
56 var r = DIGITS.expand("<digit>{500}");
57 assert(~r.indexOf("0"));
58 assert(~r.indexOf("1"));
59 assert(~r.indexOf("2"));
60 assert(~r.indexOf("3"));
61 assert(~r.indexOf("4"));
62 assert(~r.indexOf("5"));
63 assert(~r.indexOf("6"));
64 assert(~r.indexOf("7"));
65 assert(~r.indexOf("8"));
66 assert(~r.indexOf("9"));
67 }});
68 }});