Search in sources :

Example 6 with ITerm

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 7 with ITerm

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 8 with ITerm

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 9 with ITerm

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));
}
Also used : ITerm(mb.nabl2.terms.ITerm) Test(org.junit.Test)

Example 10 with ITerm

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));
}
Also used : ITerm(mb.nabl2.terms.ITerm) Test(org.junit.Test)

Aggregations

ITerm (mb.nabl2.terms.ITerm)79 Test (org.junit.Test)24 Occurrence (mb.nabl2.scopegraph.terms.Occurrence)19 Scope (mb.nabl2.scopegraph.terms.Scope)18 SolveResult (mb.nabl2.solver.ISolver.SolveResult)16 Optional (java.util.Optional)15 IMessageInfo (mb.nabl2.constraints.messages.IMessageInfo)15 ITermVar (mb.nabl2.terms.ITermVar)15 Label (mb.nabl2.scopegraph.terms.Label)14 Map (java.util.Map)12 Set (java.util.Set)10 MessageContent (mb.nabl2.constraints.messages.MessageContent)10 SolverCore (mb.nabl2.solver.SolverCore)9 IUnifier (mb.nabl2.terms.unification.IUnifier)9 Function1 (org.metaborg.util.functions.Function1)9 Lists (com.google.common.collect.Lists)8 ISolution (mb.nabl2.solver.ISolution)8 HashMultimap (com.google.common.collect.HashMultimap)7 Multimap (com.google.common.collect.Multimap)7 IConstraint (mb.nabl2.constraints.IConstraint)7