diff --git a/IncrementalMinimization/src/DebugException.java b/IncrementalMinimization/src/minimization/DebugException.java similarity index 80% rename from IncrementalMinimization/src/DebugException.java rename to IncrementalMinimization/src/minimization/DebugException.java index ff871d2f..0cef7a85 100644 --- a/IncrementalMinimization/src/DebugException.java +++ b/IncrementalMinimization/src/minimization/DebugException.java @@ -1,5 +1,6 @@ +package minimization; -class DebugException extends Exception +public class DebugException extends Exception { private final Integer maxDepth; diff --git a/IncrementalMinimization/src/minimization/MinimizationAlgorithm.java b/IncrementalMinimization/src/minimization/MinimizationAlgorithm.java new file mode 100644 index 00000000..06785ff9 --- /dev/null +++ b/IncrementalMinimization/src/minimization/MinimizationAlgorithm.java @@ -0,0 +1,10 @@ +package minimization; + +import org.sat4j.specs.TimeoutException; + +import automata.sfa.SFA; + +public interface MinimizationAlgorithm +{ + public SFA minimize() throws TimeoutException, DebugException; +} diff --git a/IncrementalMinimization/src/MooreMinimization.java b/IncrementalMinimization/src/minimization/MooreMinimization.java similarity index 84% rename from IncrementalMinimization/src/MooreMinimization.java rename to IncrementalMinimization/src/minimization/MooreMinimization.java index 81eaa0e3..75517552 100644 --- a/IncrementalMinimization/src/MooreMinimization.java +++ b/IncrementalMinimization/src/minimization/MooreMinimization.java @@ -1,3 +1,4 @@ +package minimization; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; @@ -13,9 +14,24 @@ import automata.sfa.SFAMove; -public class MooreMinimization +public class MooreMinimization implements MinimizationAlgorithm { - private static List normalize(Integer p, Integer q) + public static SFA mooreMinimize(SFA aut, BooleanAlgebra ba) throws TimeoutException + { + MooreMinimization moore = new MooreMinimization(aut, ba); + return moore.minimize(); + } + + private SFA aut; + private BooleanAlgebra ba; + + private MooreMinimization(SFA aut, BooleanAlgebra ba) + { + this.aut = aut; + this.ba = ba; + } + + private List normalize(Integer p, Integer q) { List pair; if(p normalize(Integer p, Integer q) return pair; } - public static SFA mooreMinimize(SFA aut, BooleanAlgebra ba) throws TimeoutException + public SFA minimize() throws TimeoutException { if(aut.isEmpty()) { @@ -41,7 +57,7 @@ public static SFA mooreMinimize(SFA aut, BooleanAlgebra ba) } aut = aut.mkTotal(ba); int normalizeStateCount = (aut.stateCount()*aut.stateCount())/2; - HashSet> neq = new HashSet>(); + HashSet> neq = new HashSet>(normalizeStateCount); for (Integer p : aut.getFinalStates()) { for (Integer q : aut.getNonFinalStates()) diff --git a/IncrementalMinimization/src/IncrementalMinimization.java b/IncrementalMinimization/src/minimization/incremental/IncrementalMinimization.java similarity index 98% rename from IncrementalMinimization/src/IncrementalMinimization.java rename to IncrementalMinimization/src/minimization/incremental/IncrementalMinimization.java index 053f2c8f..4d5b0ffa 100644 --- a/IncrementalMinimization/src/IncrementalMinimization.java +++ b/IncrementalMinimization/src/minimization/incremental/IncrementalMinimization.java @@ -1,3 +1,5 @@ +package minimization.incremental; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -11,14 +13,18 @@ import java.util.Set; import java.util.Stack; +import minimization.DebugException; +import minimization.MinimizationAlgorithm; + import org.sat4j.specs.TimeoutException; +import structures.DisjointSets; import theory.BooleanAlgebra; import automata.sfa.SFA; import automata.sfa.SFAInputMove; import automata.sfa.SFAMove; -public class IncrementalMinimization +public class IncrementalMinimization implements MinimizationAlgorithm { protected class EquivTest //tests for equality of two given states in the automata diff --git a/IncrementalMinimization/src/IncrementalNaive.java b/IncrementalMinimization/src/minimization/incremental/IncrementalNaive.java similarity index 92% rename from IncrementalMinimization/src/IncrementalNaive.java rename to IncrementalMinimization/src/minimization/incremental/IncrementalNaive.java index 93eda39b..909c6cc2 100644 --- a/IncrementalMinimization/src/IncrementalNaive.java +++ b/IncrementalMinimization/src/minimization/incremental/IncrementalNaive.java @@ -1,10 +1,17 @@ +package minimization.incremental; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Stack; +import minimization.incremental.IncrementalMinimization.EquivTest; +import minimization.incremental.IncrementalMinimization.EquivTest.EquivRecord; + import org.sat4j.specs.TimeoutException; +import structures.DisjointSets; +import structures.MintermTree; import theory.BooleanAlgebra; import automata.sfa.SFA; import automata.sfa.SFAInputMove; diff --git a/IncrementalMinimization/src/IncrementalRecursive.java b/IncrementalMinimization/src/minimization/incremental/IncrementalRecursive.java similarity index 98% rename from IncrementalMinimization/src/IncrementalRecursive.java rename to IncrementalMinimization/src/minimization/incremental/IncrementalRecursive.java index d9b3a069..ca353eb5 100644 --- a/IncrementalMinimization/src/IncrementalRecursive.java +++ b/IncrementalMinimization/src/minimization/incremental/IncrementalRecursive.java @@ -1,3 +1,5 @@ +package minimization.incremental; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -5,8 +7,11 @@ import java.util.LinkedList; import java.util.List; +import minimization.incremental.IncrementalMinimization.EquivTest; + import org.sat4j.specs.TimeoutException; +import structures.DisjointSets; import theory.BooleanAlgebra; import automata.sfa.SFA; import automata.sfa.SFAInputMove; diff --git a/IncrementalMinimization/src/TimeBudgetExceededException.java b/IncrementalMinimization/src/minimization/incremental/TimeBudgetExceededException.java similarity index 93% rename from IncrementalMinimization/src/TimeBudgetExceededException.java rename to IncrementalMinimization/src/minimization/incremental/TimeBudgetExceededException.java index 2f1f27fa..e5d66bfa 100644 --- a/IncrementalMinimization/src/TimeBudgetExceededException.java +++ b/IncrementalMinimization/src/minimization/incremental/TimeBudgetExceededException.java @@ -1,3 +1,4 @@ +package minimization.incremental; import org.sat4j.specs.TimeoutException; import automata.sfa.SFA; diff --git a/IncrementalMinimization/src/DisjointSets.java b/IncrementalMinimization/src/structures/DisjointSets.java similarity index 99% rename from IncrementalMinimization/src/DisjointSets.java rename to IncrementalMinimization/src/structures/DisjointSets.java index 827e7a39..b30f7da2 100644 --- a/IncrementalMinimization/src/DisjointSets.java +++ b/IncrementalMinimization/src/structures/DisjointSets.java @@ -1,3 +1,4 @@ +package structures; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; diff --git a/IncrementalMinimization/src/MintermTree.java b/IncrementalMinimization/src/structures/MintermTree.java similarity index 98% rename from IncrementalMinimization/src/MintermTree.java rename to IncrementalMinimization/src/structures/MintermTree.java index 004fb008..138433f4 100644 --- a/IncrementalMinimization/src/MintermTree.java +++ b/IncrementalMinimization/src/structures/MintermTree.java @@ -1,3 +1,4 @@ +package structures; import java.util.ArrayList; import org.sat4j.specs.TimeoutException; diff --git a/IncrementalMinimization/src/TestDisjointSets.java b/IncrementalMinimization/src/test/TestDisjointSets.java similarity index 97% rename from IncrementalMinimization/src/TestDisjointSets.java rename to IncrementalMinimization/src/test/TestDisjointSets.java index 7ae1f9e4..553bc128 100644 --- a/IncrementalMinimization/src/TestDisjointSets.java +++ b/IncrementalMinimization/src/test/TestDisjointSets.java @@ -1,9 +1,12 @@ +package test; import static org.junit.Assert.*; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; +import structures.DisjointSets; + public class TestDisjointSets { DisjointSets sets; diff --git a/IncrementalMinimization/src/TestIncrementalMinimization.java b/IncrementalMinimization/src/test/TestIncrementalMinimization.java similarity index 97% rename from IncrementalMinimization/src/TestIncrementalMinimization.java rename to IncrementalMinimization/src/test/TestIncrementalMinimization.java index 3cfcb4a0..ba144a5b 100644 --- a/IncrementalMinimization/src/TestIncrementalMinimization.java +++ b/IncrementalMinimization/src/test/TestIncrementalMinimization.java @@ -1,3 +1,4 @@ +package test; import static org.junit.Assert.*; import java.io.BufferedReader; @@ -20,6 +21,14 @@ import java.util.Map.Entry; import java.util.TreeMap; + +import minimization.DebugException; +import minimization.MooreMinimization; +import minimization.incremental.IncrementalMinimization; +import minimization.incremental.IncrementalNaive; +import minimization.incremental.IncrementalRecursive; +import minimization.incremental.TimeBudgetExceededException; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -37,7 +46,9 @@ import automata.sfa.SFAInputMove; import automata.sfa.SFAMove; -public class TestIncrementalMinimization { +public class TestIncrementalMinimization +{ + public static final String REGEX_FILE = "src/test/regexlib-SFA.txt"; @Test public void testMyAut() throws TimeoutException @@ -148,7 +159,7 @@ public void testCompare() throws TimeoutException, IOException System.out.println("========================"); //import list of regex. Heavily borrowed code from symbolic automata library - FileReader regexFile = new FileReader("src/regexlib-SFA.txt"); + FileReader regexFile = new FileReader(REGEX_FILE); BufferedReader read = new BufferedReader(regexFile); ArrayList regexList = new ArrayList(); String line; @@ -333,7 +344,7 @@ public void testBudget() throws TimeoutException, IOException System.out.println("========================="); //import list of regex - FileReader regexFile = new FileReader("src/regexlib-SFA.txt"); + FileReader regexFile = new FileReader(REGEX_FILE); BufferedReader read = new BufferedReader(regexFile); ArrayList regexList = new ArrayList(); String line; @@ -495,7 +506,7 @@ private Double linearInterpolate(Integer x, Integer x0, Integer x1, Double y0, D } @Test - public void testRecord() throws IOException, DebugException + public void testRecord() throws IOException { //TODO: cleanup + document System.out.println("===================="); @@ -503,7 +514,7 @@ public void testRecord() throws IOException, DebugException System.out.println("===================="); //import list of regex - FileReader regexFile = new FileReader("src/regexlib-SFA.txt"); + FileReader regexFile = new FileReader(REGEX_FILE); BufferedReader read = new BufferedReader(regexFile); ArrayList regexList = new ArrayList(); String line; @@ -737,7 +748,7 @@ public void testDepth() throws IOException, TimeoutException System.out.println("STARTING DEPTH TEST"); System.out.println("==================="); //import list of regex - FileReader regexFile = new FileReader("src/regexlib-SFA.txt"); + FileReader regexFile = new FileReader(REGEX_FILE); BufferedReader read = new BufferedReader(regexFile); ArrayList regexList = new ArrayList(); String line; diff --git a/IncrementalMinimization/src/pattern@75.txt b/IncrementalMinimization/src/test/pattern@75.txt similarity index 100% rename from IncrementalMinimization/src/pattern@75.txt rename to IncrementalMinimization/src/test/pattern@75.txt diff --git a/IncrementalMinimization/src/regexlib-SFA.txt b/IncrementalMinimization/src/test/regexlib-SFA.txt similarity index 100% rename from IncrementalMinimization/src/regexlib-SFA.txt rename to IncrementalMinimization/src/test/regexlib-SFA.txt