diff --git a/route.js b/route.js index d219597..6890350 100644 --- a/route.js +++ b/route.js @@ -78,14 +78,6 @@ function Routing(exports) { return key in this.entries; }; - $Dict.prototype.smallerOf = function (other) { - return (other.length < this.length) ? other : this; - }; - - $Dict.prototype.largerOf = function (other) { - return (this.length < other.length) ? this : other; - }; - function is_emptyMatcher(m) { return (m === emptyMatcher); } @@ -333,8 +325,8 @@ function Routing(exports) { var w = merge(r1.get(__), r2.get(__)); if (is_emptyMatcher(w)) { - var smaller = r1.smallerOf(r2); - var larger = r1.largerOf(r2); + var smaller = r1.length < r2.length ? r1 : r2; + var larger = r1.length < r2.length ? r2 : r1; var target = larger.copy(); for (var key in smaller.entries) { var k = merge(smaller.get(key), larger.get(key)); @@ -430,7 +422,7 @@ function Routing(exports) { if (is_emptyMatcher(w1)) { if (is_emptyMatcher(w2)) { - for (var key in r1.smallerOf(r2).entries) examineKey(key); + for (var key in (r1.length < r2.length ? r1 : r2).entries) examineKey(key); } else { for (var key in r1.entries) examineKey(key); } @@ -658,7 +650,7 @@ function Routing(exports) { // Optimize similarly to intersect(). if (is_emptyMatcher(w1)) { if (is_emptyMatcher(w2)) { - for (var key in r1.smallerOf(r2).entries) examineKey(key); + for (var key in (r1.length < r2.length ? r1 : r2).entries) examineKey(key); } else { for (var key in r1.entries) examineKey(key); } diff --git a/tr.js b/tr.js index e8394da..ab3ec8f 100644 --- a/tr.js +++ b/tr.js @@ -126,3 +126,47 @@ dump(r.simpleGestalt(false, "A", 0, 0).union(r.simpleGestalt(true, "B", 0, 0)) dump(r.simpleGestalt(false, "A", 0, 0).union(r.simpleGestalt(true, "B", 0, 0)) .equals(r.simpleGestalt(false, "B", 0, 0).union(r.simpleGestalt(true, "A", 0, 0))) === false); + + +console.log("debugging unions (1)"); +dumpM(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]), + r.compilePattern(r.arrayToSet(['C']), [1, 3]), + r.compilePattern(r.arrayToSet(['B']), [3, 4]))); + +dumpM(r.union(r.compilePattern(r.arrayToSet(['C']), [1, 3]), + r.compilePattern(r.arrayToSet(['B']), [3, 4]))); + +dumpM(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]), + r.compilePattern(r.arrayToSet(['C']), [1, 3]))); + +dumpM(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]), + r.compilePattern(r.arrayToSet(['B']), [3, 4]))); + +console.log("debugging unions (2)"); +var MU = r.emptyMatcher; +MU = r.union(MU, r.compilePattern(r.arrayToSet(['A']), [r.__, 2])); +dumpM(MU); +MU = r.union(MU, r.compilePattern(r.arrayToSet(['C']), [1, 3])); +dumpM(MU); +MU = r.union(MU, r.compilePattern(r.arrayToSet(['B']), [3, 4])); +dumpM(MU); + +console.log("debugging unions (3)"); +dumpM(r.union(r.compilePattern(r.arrayToSet('A'), [2]), + dumpM(r.union(r.compilePattern(r.arrayToSet('B'), [2]), + r.compilePattern(r.arrayToSet('C'), [3]))))); + +console.log("matcherKeys on wild matchers"); +dump(r.matcherKeys(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]), + r.compilePattern(r.arrayToSet(['C']), [1, 3]), + r.compilePattern(r.arrayToSet(['B']), [3, 4])), + r.compileProjection([r._$(), r._$()])))); +dump(r.matcherKeys(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]), + r.compilePattern(r.arrayToSet(['C']), [1, 3]), + r.compilePattern(r.arrayToSet(['B']), [3, 4])), + r.compileProjection([r.__, r._$])))); +dump(r.matcherKeys(r.project(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]), + r.compilePattern(r.arrayToSet(['C']), [1, 3]), + r.compilePattern(r.arrayToSet(['B']), [3, 4])), + r.compileProjection([r._$(), r._$()])), + r.compileProjection([r.__, r._$]))));