From 52e842962dba30c59957d7bb5191111df076f6a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=AA=20Vi=E1=BA=BFt=20M=E1=BA=ABn?= Date: Sun, 28 Apr 2024 23:48:25 +0200 Subject: [PATCH] Additional info on leaf features --- .gitignore | 4 +- README.md | 1 + pom.xml | 15 +++-- .../tugraz/ist/ase/hiconfit/KBStatistics.java | 1 + .../ist/ase/hiconfit/KBStatisticsTest.java | 57 +++++++++++++++++++ src/test/resources/fms/bamboobike.fm4conf | 4 +- 6 files changed, 75 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 87e405c..17bbf57 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,6 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +*.log \ No newline at end of file diff --git a/README.md b/README.md index 9ceee2d..7af916b 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ The tool analysis and prints out the following statistics of given knowledge bas 2. **Statistics for feature model** - The CTC ratio - The number of features +- The number of leaf features - The number of relationships - The number of cross-tree constraints - The number of MANDATORY relationships diff --git a/pom.xml b/pom.xml index 2966092..79ef276 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ at.tugraz.ist.ase.hiconfit kbstatistics - 1.3.1 + 1.3.2 jar @@ -22,7 +22,7 @@ UTF-8 20 20 - 0.1.1-alpha-04 + 1.0.1-alpha-32 @@ -42,13 +42,13 @@ at.tugraz.ist.ase.hiconfit kb - ${artifact.version} + ${kb.version} ch.qos.logback logback-classic - 1.4.6 + 1.4.12 test @@ -57,6 +57,13 @@ + + + org.junit.jupiter + junit-jupiter + 5.10.2 + test + diff --git a/src/main/java/at/tugraz/ist/ase/hiconfit/KBStatistics.java b/src/main/java/at/tugraz/ist/ase/hiconfit/KBStatistics.java index ee6a084..64d9868 100644 --- a/src/main/java/at/tugraz/ist/ase/hiconfit/KBStatistics.java +++ b/src/main/java/at/tugraz/ist/ase/hiconfit/KBStatistics.java @@ -202,6 +202,7 @@ private void saveFMStatistics(BufferedWriter writer, int counter, KB kb, writer.newLine(); writer.write("CTC ratio: " + ctc); writer.newLine(); writer.write("#features: " + fm.getNumOfFeatures()); writer.newLine(); + writer.write("#leaf features: " + fm.getNumOfLeaf()); writer.newLine(); writer.write("#relationships: " + fm.getNumOfRelationships()); writer.newLine(); writer.write("#constraints: " + fm.getNumOfConstraints()); writer.newLine(); writer.write("#MANDATORY: " + fm.getNumOfRelationships(MandatoryRelationship.class)); writer.newLine(); diff --git a/src/test/java/at/tugraz/ist/ase/hiconfit/KBStatisticsTest.java b/src/test/java/at/tugraz/ist/ase/hiconfit/KBStatisticsTest.java index 231c743..2df5db4 100644 --- a/src/test/java/at/tugraz/ist/ase/hiconfit/KBStatisticsTest.java +++ b/src/test/java/at/tugraz/ist/ase/hiconfit/KBStatisticsTest.java @@ -142,6 +142,7 @@ void testOneFM() { CTC ratio: 0.4 #features: 12 + #leaf features: 9 #relationships: 6 #constraints: 4 #MANDATORY: 2 @@ -153,6 +154,48 @@ void testOneFM() { assertEquals(expected, content.get()); } + @Test + void testOneFM_2() { + String[] args = new String[]{"-fm", "./src/test/resources/fms/bamboobike.fm4conf"}; + + KBStatistics_CmdLineOptions options = new KBStatistics_CmdLineOptions(null, programTitle, null, usage); + options.parseArgument(args); + + KBStatistics kbStatistics = new KBStatistics(options); + + assertDoesNotThrow(kbStatistics::calculate); + + File file = new File("statistics.txt"); + assertTrue(file.exists()); + + // read the content from file + AtomicReference content = new AtomicReference<>(""); + assertDoesNotThrow(() -> content.set(String.join("\n", Files.readAllLines(file.toPath())))); + + String expected = """ + 1 + Name: bamboobike.fm4conf + Source: SPLOT + #variables: 11 + #constraints: 8 + #Choco variables: 26 + #Choco constraints: 20 + Consistency: true + + CTC ratio: 0.25 + #features: 11 + #leaf features: 8 + #relationships: 6 + #constraints: 2 + #MANDATORY: 2 + #OPTIONAL: 2 + #ALTERNATIVE: 1 + #OR: 1 + #REQUIRES: 1 + #EXCLUDES: 1"""; + assertEquals(expected, content.get()); + } + @Test void testManyFMs() { String[] args = new String[]{"-fm-dir", "./src/test/resources/fms"}; @@ -183,6 +226,7 @@ void testManyFMs() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -202,6 +246,7 @@ void testManyFMs() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -221,6 +266,7 @@ void testManyFMs() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -240,6 +286,7 @@ void testManyFMs() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -259,6 +306,7 @@ void testManyFMs() { CTC ratio: 0.3218390804597701 #features: 263 + #leaf features: 160 #relationships: 177 #constraints: 84 #MANDATORY: 67 @@ -278,6 +326,7 @@ void testManyFMs() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -297,6 +346,7 @@ void testManyFMs() { CTC ratio: 0.4 #features: 12 + #leaf features: 9 #relationships: 6 #constraints: 4 #MANDATORY: 2 @@ -346,6 +396,7 @@ void testManyFMsAndKB() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -365,6 +416,7 @@ void testManyFMsAndKB() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -384,6 +436,7 @@ void testManyFMsAndKB() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -403,6 +456,7 @@ void testManyFMsAndKB() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -422,6 +476,7 @@ void testManyFMsAndKB() { CTC ratio: 0.3218390804597701 #features: 263 + #leaf features: 160 #relationships: 177 #constraints: 84 #MANDATORY: 67 @@ -441,6 +496,7 @@ void testManyFMsAndKB() { CTC ratio: 0.25 #features: 11 + #leaf features: 8 #relationships: 6 #constraints: 2 #MANDATORY: 2 @@ -460,6 +516,7 @@ void testManyFMsAndKB() { CTC ratio: 0.4 #features: 12 + #leaf features: 9 #relationships: 6 #constraints: 4 #MANDATORY: 2 diff --git a/src/test/resources/fms/bamboobike.fm4conf b/src/test/resources/fms/bamboobike.fm4conf index d0db7d4..e36a48b 100644 --- a/src/test/resources/fms/bamboobike.fm4conf +++ b/src/test/resources/fms/bamboobike.fm4conf @@ -16,8 +16,8 @@ Back-pedal RELATIONSHIPS: mandatory(Bamboo Bike, Frame), mandatory(Bamboo Bike, Brake), -optional(Engine, Bamboo Bike), -optional(Drop Handlebar, Bamboo Bike), +optional(Bamboo Bike, Engine), +optional(Bamboo Bike, Drop Handlebar), alternative(Frame, Female, Male, Step-through), or(Brake, Front, Rear, Back-pedal) CONSTRAINTS: