changed nfaAddTrap, bei dem Fall, dass Transition.readSymbol() einen nullwert zurückgibt. (Thx ChatGBT)
-> intersectionTests funktionieren
This commit is contained in:
parent
4422270452
commit
f0207de511
8 changed files with 132 additions and 39 deletions
5
.idea/jarRepositories.xml
generated
5
.idea/jarRepositories.xml
generated
|
|
@ -6,6 +6,11 @@
|
||||||
<option name="name" value="libs-release" />
|
<option name="name" value="libs-release" />
|
||||||
<option name="url" value="${env.ARTIFACTORY_URL}/maven" />
|
<option name="url" value="${env.ARTIFACTORY_URL}/maven" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Central Repository" />
|
||||||
|
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="snapshots" />
|
<option name="id" value="snapshots" />
|
||||||
<option name="name" value="libs-snapshot" />
|
<option name="name" value="libs-snapshot" />
|
||||||
|
|
|
||||||
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
|
|
@ -7,11 +7,12 @@
|
||||||
<option value="$PROJECT_DIR$/pom.xml" />
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
|
<option name="workspaceImportForciblyTurnedOn" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PWA">
|
<component name="PWA">
|
||||||
<option name="wasEnabledAtLeastOnce" value="true" />
|
<option name="wasEnabledAtLeastOnce" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="openjdk-21" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="openjdk-19" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
76
.idea/workspace.xml
generated
76
.idea/workspace.xml
generated
|
|
@ -5,10 +5,14 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="f5e08808-a5af-4c89-a1ee-21b3bcb9ae3e" name="Changes" comment="concat GEHT">
|
<list default="true" id="f5e08808-a5af-4c89-a1ee-21b3bcb9ae3e" name="Changes" comment="concat GEHT">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_08_01_2024_18_35__Changes_.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_08_01_2024_18_35__Changes_.xml" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/test/java/ab1/tests/myTests.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/jarRepositories.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/target/classes/ab1/impl/GRUPPE/NFAImpl.class" beforeDir="false" />
|
<change beforePath="$PROJECT_DIR$/target/classes/ab1/Transition$TransitionBuilder.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/ab1/Transition$TransitionBuilder.class" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/target/classes/ab1/Transition.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/ab1/Transition.class" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/target/test-classes/ab1/tests/FinalizeTests.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/test-classes/ab1/tests/FinalizeTests.class" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<list id="39d4ccb3-eae9-4ed4-996a-5a13f44678fa" name="Changes by carol" comment="" />
|
<list id="39d4ccb3-eae9-4ed4-996a-5a13f44678fa" name="Changes by carol" comment="" />
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
|
@ -16,6 +20,13 @@
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="Class" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_BRANCH_BY_REPOSITORY">
|
<option name="RECENT_BRANCH_BY_REPOSITORY">
|
||||||
<map>
|
<map>
|
||||||
|
|
@ -53,6 +64,9 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent"><![CDATA[{
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
|
"JUnit.ComplexTests.executor": "Run",
|
||||||
|
"JUnit.ComplexTests.intersection1Test.executor": "Run",
|
||||||
|
"JUnit.myTests.intersection1Test.executor": "Debug",
|
||||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
"WebServerToolWindowFactoryState": "false",
|
"WebServerToolWindowFactoryState": "false",
|
||||||
|
|
@ -71,8 +85,8 @@
|
||||||
"vue.rearranger.settings.migration": "true"
|
"vue.rearranger.settings.migration": "true"
|
||||||
}
|
}
|
||||||
}]]></component>
|
}]]></component>
|
||||||
<component name="RunManager" selected="JUnit.ab1 in ETI_Abgabe">
|
<component name="RunManager" selected="JUnit.ComplexTests">
|
||||||
<configuration name="ComplexTests.complement1Test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
<configuration name="ComplexTests" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||||
<module name="ETI_Abgabe" />
|
<module name="ETI_Abgabe" />
|
||||||
<extension name="coverage">
|
<extension name="coverage">
|
||||||
<pattern>
|
<pattern>
|
||||||
|
|
@ -82,14 +96,12 @@
|
||||||
</extension>
|
</extension>
|
||||||
<option name="PACKAGE_NAME" value="ab1.tests" />
|
<option name="PACKAGE_NAME" value="ab1.tests" />
|
||||||
<option name="MAIN_CLASS_NAME" value="ab1.tests.ComplexTests" />
|
<option name="MAIN_CLASS_NAME" value="ab1.tests.ComplexTests" />
|
||||||
<option name="METHOD_NAME" value="complement1Test" />
|
<option name="TEST_OBJECT" value="class" />
|
||||||
<option name="TEST_OBJECT" value="method" />
|
|
||||||
<dir value="$PROJECT_DIR$/src/test/java/ab1" />
|
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="ComplexTests.plus1Test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
<configuration name="ComplexTests.intersection1Test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||||
<module name="ETI_Abgabe" />
|
<module name="ETI_Abgabe" />
|
||||||
<extension name="coverage">
|
<extension name="coverage">
|
||||||
<pattern>
|
<pattern>
|
||||||
|
|
@ -99,14 +111,13 @@
|
||||||
</extension>
|
</extension>
|
||||||
<option name="PACKAGE_NAME" value="ab1.tests" />
|
<option name="PACKAGE_NAME" value="ab1.tests" />
|
||||||
<option name="MAIN_CLASS_NAME" value="ab1.tests.ComplexTests" />
|
<option name="MAIN_CLASS_NAME" value="ab1.tests.ComplexTests" />
|
||||||
<option name="METHOD_NAME" value="plus1Test" />
|
<option name="METHOD_NAME" value="intersection1Test" />
|
||||||
<option name="TEST_OBJECT" value="method" />
|
<option name="TEST_OBJECT" value="method" />
|
||||||
<dir value="$PROJECT_DIR$/src/test/java/ab1" />
|
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="ComplexTests.union1Test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
<configuration name="ComplexTests.intersection2Test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||||
<module name="ETI_Abgabe" />
|
<module name="ETI_Abgabe" />
|
||||||
<extension name="coverage">
|
<extension name="coverage">
|
||||||
<pattern>
|
<pattern>
|
||||||
|
|
@ -116,7 +127,7 @@
|
||||||
</extension>
|
</extension>
|
||||||
<option name="PACKAGE_NAME" value="ab1.tests" />
|
<option name="PACKAGE_NAME" value="ab1.tests" />
|
||||||
<option name="MAIN_CLASS_NAME" value="ab1.tests.ComplexTests" />
|
<option name="MAIN_CLASS_NAME" value="ab1.tests.ComplexTests" />
|
||||||
<option name="METHOD_NAME" value="union1Test" />
|
<option name="METHOD_NAME" value="intersection2Test" />
|
||||||
<option name="TEST_OBJECT" value="method" />
|
<option name="TEST_OBJECT" value="method" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
|
|
@ -130,7 +141,7 @@
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="ab1.tests in ETI_Abgabe" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
<configuration name="myTests.intersection1Test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||||
<module name="ETI_Abgabe" />
|
<module name="ETI_Abgabe" />
|
||||||
<extension name="coverage">
|
<extension name="coverage">
|
||||||
<pattern>
|
<pattern>
|
||||||
|
|
@ -139,7 +150,9 @@
|
||||||
</pattern>
|
</pattern>
|
||||||
</extension>
|
</extension>
|
||||||
<option name="PACKAGE_NAME" value="ab1.tests" />
|
<option name="PACKAGE_NAME" value="ab1.tests" />
|
||||||
<option name="TEST_OBJECT" value="package" />
|
<option name="MAIN_CLASS_NAME" value="ab1.tests.myTests" />
|
||||||
|
<option name="METHOD_NAME" value="intersection1Test" />
|
||||||
|
<option name="TEST_OBJECT" value="method" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
|
|
@ -157,11 +170,11 @@
|
||||||
</configuration>
|
</configuration>
|
||||||
<recent_temporary>
|
<recent_temporary>
|
||||||
<list>
|
<list>
|
||||||
|
<item itemvalue="JUnit.ComplexTests" />
|
||||||
|
<item itemvalue="JUnit.ComplexTests.intersection2Test" />
|
||||||
|
<item itemvalue="JUnit.ComplexTests.intersection1Test" />
|
||||||
|
<item itemvalue="JUnit.myTests.intersection1Test" />
|
||||||
<item itemvalue="JUnit.ab1 in ETI_Abgabe" />
|
<item itemvalue="JUnit.ab1 in ETI_Abgabe" />
|
||||||
<item itemvalue="JUnit.ComplexTests.plus1Test" />
|
|
||||||
<item itemvalue="JUnit.ComplexTests.complement1Test" />
|
|
||||||
<item itemvalue="JUnit.ComplexTests.union1Test" />
|
|
||||||
<item itemvalue="JUnit.ab1.tests in ETI_Abgabe" />
|
|
||||||
</list>
|
</list>
|
||||||
</recent_temporary>
|
</recent_temporary>
|
||||||
</component>
|
</component>
|
||||||
|
|
@ -269,20 +282,33 @@
|
||||||
<component name="XDebuggerManager">
|
<component name="XDebuggerManager">
|
||||||
<breakpoint-manager>
|
<breakpoint-manager>
|
||||||
<breakpoints>
|
<breakpoints>
|
||||||
<line-breakpoint enabled="true" type="java-method">
|
<line-breakpoint enabled="true" type="java-line">
|
||||||
<url>file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java</url>
|
<url>file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java</url>
|
||||||
<line>336</line>
|
<line>211</line>
|
||||||
<properties class="ab1.impl.GRUPPE.NFAImpl" method="complement">
|
<option name="timeStamp" value="43" />
|
||||||
<option name="EMULATED" value="true" />
|
</line-breakpoint>
|
||||||
<option name="WATCH_EXIT" value="false" />
|
<line-breakpoint enabled="true" type="java-line">
|
||||||
</properties>
|
<url>file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java</url>
|
||||||
<option name="timeStamp" value="13" />
|
<line>343</line>
|
||||||
|
<option name="timeStamp" value="44" />
|
||||||
|
</line-breakpoint>
|
||||||
|
<line-breakpoint enabled="true" type="java-line">
|
||||||
|
<url>file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java</url>
|
||||||
|
<line>355</line>
|
||||||
|
<option name="timeStamp" value="53" />
|
||||||
|
</line-breakpoint>
|
||||||
|
<line-breakpoint enabled="true" type="java-line">
|
||||||
|
<url>file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java</url>
|
||||||
|
<line>523</line>
|
||||||
|
<option name="timeStamp" value="55" />
|
||||||
</line-breakpoint>
|
</line-breakpoint>
|
||||||
</breakpoints>
|
</breakpoints>
|
||||||
</breakpoint-manager>
|
</breakpoint-manager>
|
||||||
<watches-manager>
|
<watches-manager>
|
||||||
<configuration name="JUnit">
|
<configuration name="JUnit">
|
||||||
<watch expression="((HashSet)((NFAImpl)testInstance).acceptingStates).toArray()[2]" custom="java.util.HashSet,ab1.impl.GRUPPE.NFAImpl" />
|
<watch expression="((HashSet)((NFAImpl)testInstance).acceptingStates).toArray()[2]" custom="java.util.HashSet,ab1.impl.GRUPPE.NFAImpl" />
|
||||||
|
<watch expression="transition.readSymbol()" />
|
||||||
|
<watch expression="transition.readSymbol()==letter" />
|
||||||
</configuration>
|
</configuration>
|
||||||
</watches-manager>
|
</watches-manager>
|
||||||
</component>
|
</component>
|
||||||
|
|
|
||||||
|
|
@ -206,15 +206,11 @@ public class NFAImpl implements NFA {
|
||||||
if (!this.isFinalized || !other.isFinalized()) {
|
if (!this.isFinalized || !other.isFinalized()) {
|
||||||
throw new FinalizedStateException();
|
throw new FinalizedStateException();
|
||||||
}
|
}
|
||||||
NFAImpl intersectionNFA = new NFAImpl(this.initialState);
|
NFA newNFA_A = this.complement();
|
||||||
|
NFA newNFA_B = other.complement();
|
||||||
intersectionNFA.states.addAll(this.states);
|
NFA unionNFA = newNFA_A.union(newNFA_B);
|
||||||
intersectionNFA.states.retainAll(other.getStates());
|
NFA result = unionNFA.complement();
|
||||||
|
return result;
|
||||||
intersectionNFA.transitions.addAll(this.transitions);
|
|
||||||
intersectionNFA.transitions.retainAll(other.getTransitions());
|
|
||||||
|
|
||||||
return intersectionNFA;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -345,7 +341,7 @@ public class NFAImpl implements NFA {
|
||||||
nfa.addAllTransitions(this.transitions);
|
nfa.addAllTransitions(this.transitions);
|
||||||
nfa.addAllAcceptingStates(this.acceptingStates);
|
nfa.addAllAcceptingStates(this.acceptingStates);
|
||||||
|
|
||||||
nfaAddTrap(nfa);
|
nfaAddTrap(nfa); //error on last occasion
|
||||||
|
|
||||||
NFAImpl fakeNFA = convertNFAtoDFA(nfa);
|
NFAImpl fakeNFA = convertNFAtoDFA(nfa);
|
||||||
|
|
||||||
|
|
@ -524,9 +520,11 @@ public class NFAImpl implements NFA {
|
||||||
for(char letter : completeAlphabet){
|
for(char letter : completeAlphabet){
|
||||||
boolean hasTransition = false;
|
boolean hasTransition = false;
|
||||||
for(Transition transition : input.getTransitions()){
|
for(Transition transition : input.getTransitions()){
|
||||||
if(transition.fromState().equals(state)&&transition.readSymbol().equals(letter)){
|
if(transition.fromState().equals(state)/*&&transition.readSymbol().equals(letter)*/){
|
||||||
hasTransition = true;
|
if(transition.readSymbol()!= null&&transition.readSymbol()==letter) {
|
||||||
break;
|
hasTransition = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!hasTransition){
|
if(!hasTransition){
|
||||||
|
|
|
||||||
63
src/test/java/ab1/tests/myTests.java
Normal file
63
src/test/java/ab1/tests/myTests.java
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
package ab1.tests;
|
||||||
|
|
||||||
|
import ab1.NFA;
|
||||||
|
import ab1.NFAFactory;
|
||||||
|
import ab1.NFAProvider;
|
||||||
|
import ab1.Transition;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class myTests {
|
||||||
|
private final NFAFactory factory = NFAProvider.provideFactory();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void intersection1Test() {
|
||||||
|
var nfaA = buildCharLanguage('a');
|
||||||
|
var nfaB = buildCharLanguage('b');
|
||||||
|
|
||||||
|
var testInstance = nfaA.intersection(nfaB);
|
||||||
|
|
||||||
|
assertFalse(testInstance.acceptsWord("a"));
|
||||||
|
assertFalse(testInstance.acceptsWord("b"));
|
||||||
|
assertFalse(testInstance.acceptsWord("ab"));
|
||||||
|
assertFalse(testInstance.acceptsWord("ba"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private NFA buildCharStarLanguage(char c) {
|
||||||
|
var instance = factory.buildNFA("START");
|
||||||
|
instance.addTransition(
|
||||||
|
Transition.builder()
|
||||||
|
.fromState("START")
|
||||||
|
.readSymbol(c)
|
||||||
|
.toState("START")
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
instance.addAcceptingState("START");
|
||||||
|
instance.finalizeAutomaton();
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NFA buildCharLanguage(char c) {
|
||||||
|
var instance = factory.buildNFA("START");
|
||||||
|
instance.addTransition(
|
||||||
|
Transition.builder()
|
||||||
|
.fromState("START")
|
||||||
|
.readSymbol(c)
|
||||||
|
.toState("ACCEPT")
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
instance.addAcceptingState("ACCEPT");
|
||||||
|
instance.finalizeAutomaton();
|
||||||
|
|
||||||
|
assertTrue(instance.acceptsWord(String.valueOf(c)));
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in a new issue