DeltaTrie { public Node getRoot() { return root; } DeltaTrie(Model model, SemanticConditionList errors); void addWord(List<String> word, Product product); Node getRoot(); int height(); @Override String toString();  }
@Test public void trieStructure1() { Model model = assertParse("module Test;" + "delta D1;" + "delta D2;" + "productline PL;" + "features A,B;" + "delta D1 after D2 when A;" + "delta D2 when B;" + "root FM {" + " group [0 .. *] { A, B }" + "}"); ProductLine pl = model.getProductLine(); DeltaTrie pfgt = ProductLineAnalysisHelper.buildPFGT(pl, new SemanticConditionList()); assertTrue(pfgt.getRoot().isValidProduct()); assertEquals(2, pfgt.getRoot().getChildren().size()); assertTrue(pfgt.getRoot().getChildren().get("D1").isValidProduct()); assertTrue(pfgt.getRoot().getChildren().get("D2").isValidProduct()); assertEquals(0, pfgt.getRoot().getChildren().get("D1").getChildren().size()); assertEquals(1, pfgt.getRoot().getChildren().get("D2").getChildren().size()); assertTrue(pfgt.getRoot().getChildren().get("D2").getChildren().get("D1").isValidProduct()); }
@Test public void trieStructure2() { Model model = assertParse("module Test;" + "delta D1;" + "delta D2;" + "delta D3;" + "productline PL;" + "features A,B,C;" + "delta D1 when A;" + "delta D2 after D1 when B;" + "delta D3 after D2 when C;" + "root FM {" + " group [0 .. *] { A, B, C }" + "}"); ProductLine pl = model.getProductLine(); DeltaTrie pfgt = ProductLineAnalysisHelper.buildPFGT(pl, new SemanticConditionList()); assertTrue(pfgt.getRoot().isValidProduct()); assertEquals(3, pfgt.getRoot().getChildren().size()); assertTrue(pfgt.getRoot().getChildren().get("D1").isValidProduct()); assertTrue(pfgt.getRoot().getChildren().get("D2").isValidProduct()); assertTrue(pfgt.getRoot().getChildren().get("D3").isValidProduct()); assertEquals(2, pfgt.getRoot().getChildren().get("D1").getChildren().size()); assertEquals(1, pfgt.getRoot().getChildren().get("D2").getChildren().size()); assertEquals(0, pfgt.getRoot().getChildren().get("D3").getChildren().size()); assertTrue(pfgt.getRoot().getChildren().get("D1").getChildren().get("D2").isValidProduct()); assertTrue(pfgt.getRoot().getChildren().get("D1").getChildren().get("D3").isValidProduct()); assertTrue(pfgt.getRoot().getChildren().get("D2").getChildren().get("D3").isValidProduct()); }