it(test, () => { test = test.replace(/⨂/g, ''); let [lhs, rhs] = test.split(/ [A-Z]+ /).map(toNormalPredicate); let expected = test.match(/ ([A-Z]+) /)![1]; let actual = ''; // NB: isSubsetOf() can't handle alternations, and can't determine disjoint/overlapping relationships. if (lhs.indexOf('|') === -1 && rhs.indexOf('|') === -1) { let isSubset = isSubsetOf(lhs, rhs); let isSuperset = isSubsetOf(rhs, lhs); if (isSubset && isSuperset) actual = 'EQUALS'; else if (isSubset) actual = 'SUBSET'; else if (isSuperset) actual = 'SUPERSET'; } // If isSubsetOf() couldn't determine the relationship, then use intersect instead. if (actual === '') { let intersection = intersect(lhs, rhs); if (lhs === rhs) actual = 'EQUALS'; else if (intersection === lhs) actual = 'SUBSET'; else if (intersection === rhs) actual = 'SUPERSET'; else if (intersection === NONE) actual = 'DISJOINT'; else actual = 'OVERLAPS'; } expect(actual).equals(expected); });
it(test, () => { test = test.replace(/⨂/g, ''); let lhsA = test.split(' = ')[0].split(' ∩ ')[0]; let lhsB = test.split(' = ')[0].split(' ∩ ')[1]; let rhs = test.split(' = ')[1]; let actual: string; let expected = rhs; try { actual = intersect(toNormalPredicate(lhsA), toNormalPredicate(lhsB)); } catch (ex) { actual = 'ERROR'; } expect(actual).equals(expected); });
expect(edges.every(edge => { let intersection = intersect(edge.parent.predicate, edge.child.predicate); return intersection === edge.child.predicate; })).to.be.true;