use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class PersistentUnifier method isCyclic.
private boolean isCyclic(final ITermVar var, final Set<ITermVar> stack, final java.util.Map<ITermVar, Boolean> visited) {
final boolean cyclic;
final ITermVar rep = findRep(var);
if (!visited.containsKey(rep)) {
stack.add(rep);
visited.put(rep, false);
final ITerm term = terms().get(rep);
cyclic = term != null ? isCyclic(term.getVars().elementSet(), stack, visited) : false;
visited.put(rep, cyclic);
stack.remove(rep);
} else if (stack.contains(rep)) {
cyclic = true;
} else {
cyclic = visited.get(rep);
}
return cyclic;
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class PersistentUnifier method equalVars.
private boolean equalVars(final ITermVar left, final ITermVar right, final Set<Set2<ITermVar>> stack, final java.util.Map<Set2<ITermVar>, Boolean> visited) {
final ITermVar leftRep = findRep(left);
final ITermVar rightRep = findRep(right);
if (leftRep.equals(rightRep)) {
return true;
}
final Set2<ITermVar> pair = Set2.of(leftRep, rightRep);
final boolean equal;
if (!visited.containsKey(pair)) {
stack.add(pair);
visited.put(pair, false);
final ITerm leftTerm = terms().get(leftRep);
final ITerm rightTerm = terms().get(rightRep);
equal = (leftTerm != null && rightTerm != null) ? equalTerms(leftTerm, rightTerm, stack, visited) : false;
visited.put(pair, equal);
stack.remove(pair);
} else if (stack.contains(pair)) {
equal = false;
} else {
equal = visited.get(pair);
}
return equal;
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class PersistentUnifier method unequalVars.
private boolean unequalVars(final ITermVar left, final ITermVar right, Set<Set2<ITermVar>> stack, final java.util.Map<Set2<ITermVar>, Boolean> visited) {
final ITermVar leftRep = findRep(left);
final ITermVar rightRep = findRep(right);
if (leftRep.equals(rightRep)) {
return false;
}
final Set2<ITermVar> pair = Set2.of(leftRep, rightRep);
final boolean unequal;
if (!visited.containsKey(pair)) {
stack.add(pair);
visited.put(pair, false);
final ITerm leftTerm = terms().get(leftRep);
final ITerm rightTerm = terms().get(rightRep);
unequal = (leftTerm != null && rightTerm != null) ? unequalTerms(leftTerm, rightTerm, stack, visited) : false;
visited.put(pair, unequal);
stack.remove(pair);
} else if (stack.contains(pair)) {
unequal = false;
} else {
unequal = visited.get(pair);
}
return unequal;
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class HashcodeAndEqualsTest method testDifferentApplNullaryCtors.
@Test
public void testDifferentApplNullaryCtors() {
ITerm t1 = B.newAppl("Ctor1");
ITerm t2 = B.newAppl("Ctor2");
assertFalse(t1.equals(t2));
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class HashcodeAndEqualsTest method testSerializeSpecialized.
@Test
public void testSerializeSpecialized() throws Exception {
ITerm t = ImmutableSpecializedAppl.of("Hello, world!", 42);
byte[] b1 = serialize(t);
byte[] b2 = serialize(deserialize(b1));
assertTrue(Arrays.equals(b1, b2));
}
Aggregations