import "loops.eol";

@data numNodes
operation nodes() {
  return 1.to(3);
}

@data cycleLength
operation cycLength() {
  return 0.to(numNodes - 1);
}

@model
operation populateGraph() {
 // Here we populate the empty graph model with a sequence of nodes.
 var g = new Graph;
 for (i in 1.to(numNodes)) {
   var n = new Node;
   n.name = "n" + i;
   if (i > 1) {
     var e = new Edge;
     e.source = g.nodes.get(n.size - 1);
     e.target = n;
   }
   g.nodes.add(n);
 }
}

@test
operation originalHasNoLoops() {
  assertFalse(hasLoop(Node.all.first));
}

@test
operation loopIsDetected() {
  var e = new Edge;
  e.source = Node.all.select(n|n.name == "n" + (1 + cycleLength)).first;
  e.target = Node.all.first;
  assertTrue(hasLoop(Node.all.first));
}
