source: class ProgramAbstractionTest  {
  
      @Test
      public void core() {
  
target:         Model model = assertParse("module M;"
              + "class C(Rat myParam) { Int myField = 99; Int myMethod(String a, Bool b) { return 88; } }"
              + "productline PL;"
              + "features F;");
          SemanticConditionList errors = new SemanticConditionList();
          ProductLine pl = model.getProductLine();
          DeltaTrie trie = ProductLineAnalysisHelper.buildPFGT(pl, errors);
          ProgramAbstraction pa = trie.getRoot().getProgramAbstraction();
  
          assertTrue(pa.getClasses().containsKey("M.C"));
  
          assertEquals(2, pa.getClasses().get("M.C").get("fields").keySet().size());
          assertTrue(pa.getClasses().get("M.C").get("fields").containsKey("myParam"));
          assertEquals("Rat", pa.getClasses().get("M.C").get("fields").get("myParam").get(0));
          assertTrue(pa.getClasses().get("M.C").get("fields").containsKey("myField"));
          assertEquals("Int", pa.getClasses().get("M.C").get("fields").get("myField").get(0));
  
          assertTrue(pa.getClasses().get("M.C").get("methods").containsKey("myMethod"));
          assertEquals(3, pa.getClasses().get("M.C").get("methods").get("myMethod").size());
          assertEquals("Int", pa.getClasses().get("M.C").get("methods").get("myMethod").get(0));
          assertEquals("String", pa.getClasses().get("M.C").get("methods").get("myMethod").get(1));
          assertEquals("Bool", pa.getClasses().get("M.C").get("methods").get("myMethod").get(2));
  
      }
  
  }