diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 610a639..7c31b47 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,10 +4,10 @@
-
+
-
+
@@ -64,7 +64,10 @@
"JUnit.ComplexTests.finite2Test.executor": "Debug",
"JUnit.ComplexTests.intersection1Test.executor": "Run",
"JUnit.ComplexTests.intersection2Test.executor": "Run",
+ "JUnit.myTests.executor": "Run",
"JUnit.myTests.intersection1Test.executor": "Run",
+ "JUnit.myTests.myTest_1.executor": "Run",
+ "JUnit.myTests.myTest_2.executor": "Run",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
@@ -83,7 +86,7 @@
"vue.rearranger.settings.migration": "true"
}
}]]>
-
+
@@ -99,22 +102,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -131,7 +118,7 @@
-
+
@@ -140,14 +127,29 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -156,8 +158,8 @@
-
-
+
+
@@ -176,11 +178,11 @@
+
+
+
-
-
-
@@ -284,7 +286,15 @@
1704896842030
-
+
+
+ 1704898189901
+
+
+
+ 1704898189902
+
+
@@ -310,7 +320,8 @@
-
+
+
@@ -325,11 +336,10 @@
355
-
- file://$PROJECT_DIR$/src/test/java/ab1/tests/ComplexTests.java
- 141
-
-
+
+
+
+
diff --git a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
index 15c1b90..f9c6732 100644
--- a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
+++ b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
@@ -423,7 +423,7 @@ public class NFAImpl implements NFA {
Character readSymbol = path.get(path.size()-1).getElement_1();
Transition currentTransition = new Transition(fromState, readSymbol, path.get(path.size()-1).getElement_2());
for(int i=transitions.indexOf(currentTransition)+1;i path, List transitions, Character letter){
String fromState = path.get(path.size()-2).getElement_2();
for(Transition transition : transitions){
- if (transition.fromState().equals(fromState) && transition.readSymbol().equals(letter)) {
+ if (transition.fromState().equals(fromState) && transition.readSymbol()==(letter)) {
//found new Transition
path.remove(path.size()-1);
return transition.toState();
@@ -507,7 +507,7 @@ public class NFAImpl implements NFA {
String fromState = path.get(path.size()-1).getElement_2();
for(Character letter : letters) {
for (Transition transition : transitions) {
- if(transition.fromState().equals(fromState)&&transition.readSymbol().equals(letter)){
+ if(transition.fromState().equals(fromState)&&transition.readSymbol()==(letter)){
//found new Transition
if(stateInPath(path, transition.toState())) {
//loop!
diff --git a/src/test/java/ab1/tests/myTests.java b/src/test/java/ab1/tests/myTests.java
index 3187091..1b33ccd 100644
--- a/src/test/java/ab1/tests/myTests.java
+++ b/src/test/java/ab1/tests/myTests.java
@@ -5,6 +5,9 @@ import ab1.NFAFactory;
import ab1.NFAProvider;
import ab1.Transition;
import org.junit.jupiter.api.Test;
+
+import java.util.Random;
+
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -12,19 +15,94 @@ public class myTests {
private final NFAFactory factory = NFAProvider.provideFactory();
@Test
- public void intersection1Test() {
- var nfaA = buildCharLanguage('a');
- var nfaB = buildCharLanguage('b');
+ public void myTest_1() {
+ NFA nfa_nothing_1 = factory.buildNFA("START");
+ nfa_nothing_1.addAcceptingState("START");
+ nfa_nothing_1.finalizeAutomaton();
+ assertTrue(nfa_nothing_1.acceptsWord(""));
+ assertTrue(nfa_nothing_1.isFinite());
+ NFA nfa_everything = nfa_nothing_1.complement();
+ assertFalse(nfa_everything.acceptsWord(""));
+
+ NFA nfa_nothing_2 = factory.buildNFA("START");
+ nfa_nothing_2.addAcceptingState("START");
+ nfa_nothing_2.finalizeAutomaton();
+ NFA nfa_union_1 = nfa_nothing_1.union(nfa_nothing_2);
+ assertTrue(nfa_union_1.acceptsWord(""));
+ assertFalse(nfa_union_1.acceptsWord("a"));
+ assertFalse(nfa_union_1.acceptsWord("aa"));
+ assertFalse(nfa_union_1.acceptsWord("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
+ assertFalse(nfa_union_1.acceptsWord("sdafhuwifhcauwnfxuawnehuinfhu"));
+ assertFalse(nfa_union_1.acceptsWord(" "));
+
+ NFA nfa_complete_everything = nfa_nothing_1.union(nfa_everything);
+ assertTrue(nfa_complete_everything.acceptsWord(""));
+ assertTrue(nfa_complete_everything.acceptsWord("a"));
+ assertTrue(nfa_complete_everything.acceptsWord("dsahfuanewqnx"));
+
+
- var testInstance = nfaA.intersection(nfaB);
- assertFalse(testInstance.acceptsWord("a"));
- assertFalse(testInstance.acceptsWord("b"));
- assertFalse(testInstance.acceptsWord("ab"));
- assertFalse(testInstance.acceptsWord("ba"));
}
+ @Test
+ public void myTest_2(){
+ NFA nfa_abcd = factory.buildNFA("START");
+ nfa_abcd.addTransition(new Transition("START", 'a', "1"));
+ nfa_abcd.addTransition(new Transition("START", 'b', "2"));
+ nfa_abcd.addTransition(new Transition("START", 'c', "3"));
+ nfa_abcd.addTransition(new Transition("START", 'd', "4"));
+ nfa_abcd.addTransition(new Transition("1", null, "END"));
+ nfa_abcd.addTransition(new Transition("2", null, "END"));
+ nfa_abcd.addTransition(new Transition("3", null, "END"));
+ nfa_abcd.addTransition(new Transition("4", null, "END"));
+ nfa_abcd.addAcceptingState("END");
+ assertTrue(nfa_abcd.isFinite());
+ nfa_abcd.addTransition(new Transition("3", 'c', "3"));
+ assertFalse(nfa_abcd.isFinite());
+ nfa_abcd.addTransition(new Transition("3", null, "START"));
+ NFA nfa_cfg = factory.buildNFA("START");
+ nfa_cfg.addTransition(new Transition("START", 'c', "1"));
+ nfa_cfg.addTransition(new Transition("START", 'f', "2"));
+ nfa_cfg.addTransition(new Transition("START", 'g', "3"));
+ nfa_cfg.addAcceptingState("1");
+ nfa_cfg.addAcceptingState("2");
+ nfa_cfg.addAcceptingState("3");
+ nfa_cfg.addTransition(new Transition("1", null, "START"));
+
+ nfa_abcd.finalizeAutomaton();
+ nfa_cfg.finalizeAutomaton();
+ assertTrue(nfa_cfg.acceptsWord("c"));
+ assertTrue(nfa_cfg.acceptsWord("ccccccccccccccc"));
+ assertTrue(nfa_abcd.acceptsWord("ccccccccccccccccca"));
+ assertTrue(nfa_abcd.acceptsWord("a"));
+ assertFalse(nfa_cfg.acceptsWord("aa"));
+ NFA nfa_interception_1 = nfa_abcd.intersection(nfa_cfg);
+ assertFalse(nfa_interception_1.acceptsWord("cccccccca"));
+ assertFalse(nfa_interception_1.acceptsWord("cccccccca"));
+ assertFalse(nfa_interception_1.acceptsWord("cf"));
+ assertFalse(nfa_interception_1.acceptsWord("d"));
+ assertTrue(nfa_interception_1.acceptsWord("c"));
+ assertTrue(nfa_interception_1.acceptsWord("cccccc"));
+ assertFalse(nfa_interception_1.isFinite());
+ }
+
+ @Test
+ public void myTest_3(){
+ Random random = new Random();
+ NFA nfa = factory.buildNFA("0");
+
+ int i=0;
+ for(i=0;i<10;i++){
+ nfa.addTransition(new Transition(""+i, 'a', ""+(i+1)));
+ nfa.addTransition(new Transition(""+i, 'a', ""+(i+1)));
+ }
+ nfa.addAcceptingState(""+(i+1));
+ assertTrue(nfa.isFinite());
+
+ int random_int = random.nextInt(26);
+ }