package terms;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import exceptions.SyntaxException;
import models.terms.DependencyTerm;
import models.terms.Resource;
import utils.Utils;
public class DependencyTermTest {
Resource a = new Resource("a", Utils.INT, 1);
Resource b = new Resource("b", Utils.INT, 1);
Resource c = new Resource("c", Utils.INT, 1);
Resource d = new Resource("d", Utils.INT, 1);
Resource e = new Resource("e", Utils.INT, 1);
Resource f = new Resource("f", Utils.INT, 1);
Resource g = new Resource("g", Utils.INT, 1);
Resource h = new Resource("h", Utils.INT, 2);
Resource i = new Resource("i", Utils.INT, 2);
Resource j = new Resource("j", Utils.INT, 2);
Resource k = new Resource("k", Utils.INT, 2);
@Test
void EqualsTest() {
DependencyTerm t1 = new DependencyTerm(a, b, c);
DependencyTerm t2 = new DependencyTerm(a, b, c);
assertEquals(t1, t2);
DependencyTerm t3 = new DependencyTerm(a, b, c, d, e);
assertNotEquals(t1, t3);
DependencyTerm t4 = new DependencyTerm(a, d, e, b, c);
assertEquals(t3, t4);
DependencyTerm t5 = new DependencyTerm(a, b, c, b, c);
assertNotEquals(t1, t5);
}
@Test
void OrderTest() {
DependencyTerm t1 = new DependencyTerm(a, b, c);
assertEquals(t1.getOrder(), 1);
DependencyTerm t2 = new DependencyTerm(h, i, a);
assertEquals(t2.getOrder(), 1);
DependencyTerm t3 = new DependencyTerm(a, b, c, d, e);
assertEquals(t3.getOrder(), 1);
DependencyTerm t4 = new DependencyTerm(h, i, a, j , b);
assertEquals(t4.getOrder(), 1);
DependencyTerm t5 = new DependencyTerm(h, i, a, j, k);
assertEquals(t5.getOrder(), 2);
assertThrows(SyntaxException.class, () -> {
new DependencyTerm(a, b, c, h, i);
});
}
@Test
void StringTest() {
DependencyTerm t1 = new DependencyTerm(a, b, c);
assertEquals(t1.toString(), "[a : b -> c]");
DependencyTerm t3 = new DependencyTerm(a, b, c, d, e);
assertEquals(t3.toString(), "[a : b -> c, d -> e]");
DependencyTerm t4 = new DependencyTerm(a, d, e, b, c);
assertEquals(t4.toString(), "[a : b -> c, d -> e]");
DependencyTerm t5 = new DependencyTerm(a, b, c, b, c);
assertEquals(t5.toString(), "[a : b -> c, b -> c]");
}
@Test
void MaxIndexAndMaxDepthTest() {
DependencyTerm t1 = new DependencyTerm(a, b, c);
assertEquals(t1.getMaxIndex(), 3);
assertEquals(t1.getMaxDepth(), 1);
DependencyTerm t2 = new DependencyTerm(a, b, c, d, e);
assertEquals(t2.getMaxIndex(), 5);
assertEquals(t2.getMaxDepth(), 1);
DependencyTerm t3 = new DependencyTerm(t2, f, g);
assertEquals(t3.getMaxIndex(), 3);
assertEquals(t3.getMaxDepth(), 2);
DependencyTerm t4 = new DependencyTerm(t3, t1, t2);
assertEquals(t4.getMaxIndex(), 3);
assertEquals(t4.getMaxDepth(), 3);
}
}