Skip to content
Snippets Groups Projects
Commit 454e558e authored by Thomas's avatar Thomas
Browse files

gen constant length

parent b58ec02c
No related branches found
No related tags found
No related merge requests found
...@@ -3,17 +3,20 @@ import de.learnlib.api.query.DefaultQuery; ...@@ -3,17 +3,20 @@ import de.learnlib.api.query.DefaultQuery;
import de.learnlib.oracle.equivalence.RandomWordsEQOracle; import de.learnlib.oracle.equivalence.RandomWordsEQOracle;
import net.automatalib.automata.fsa.FiniteStateAcceptor; import net.automatalib.automata.fsa.FiniteStateAcceptor;
import net.automatalib.automata.fsa.impl.compact.CompactNFA; import net.automatalib.automata.fsa.impl.compact.CompactNFA;
import net.automatalib.commons.util.collections.CollectionsUtil;
import net.automatalib.words.Word; import net.automatalib.words.Word;
import net.automatalib.words.WordBuilder;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Collection; import java.util.*;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
import java.util.stream.Stream; import java.util.stream.Stream;
public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> extends RandomWordsEQOracle<A, I, Boolean> { public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> extends RandomWordsEQOracle<A, I, Boolean> {
CompactNFA<I> target; CompactNFA<I> target;
final int maxLength;
final Random random;
final int maxTests;
public DumpRFSAEQOracle(CompactNFA<I> target, MembershipOracle<I, Boolean> mqOracle, int minLength, int maxLength, int maxTests) { public DumpRFSAEQOracle(CompactNFA<I> target, MembershipOracle<I, Boolean> mqOracle, int minLength, int maxLength, int maxTests) {
this(target, mqOracle, minLength, maxLength, maxTests, new Random(), 1); this(target, mqOracle, minLength, maxLength, maxTests, new Random(), 1);
...@@ -26,7 +29,10 @@ public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> exte ...@@ -26,7 +29,10 @@ public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> exte
public DumpRFSAEQOracle(CompactNFA<I> target, MembershipOracle<I, Boolean> mqOracle, int minLength, int maxLength, int maxTests, Random random, int batchSize) { public DumpRFSAEQOracle(CompactNFA<I> target, MembershipOracle<I, Boolean> mqOracle, int minLength, int maxLength, int maxTests, Random random, int batchSize) {
super(mqOracle, minLength, maxLength, maxTests, random, batchSize); super(mqOracle, minLength, maxLength, maxTests, random, batchSize);
this.maxLength = maxLength;
this.random = random;
this.target = target; this.target = target;
this.maxTests = maxTests;
} }
/** /**
...@@ -80,4 +86,25 @@ public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> exte ...@@ -80,4 +86,25 @@ public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> exte
} else } else
return null; return null;
} }
Word<I> generateTestWord(List<? extends I> symbolList, int numSyms) {
final WordBuilder<I> result = new WordBuilder<>(maxLength);
for (int j = 0; j < maxLength; ++j) {
int symidx = random.nextInt(numSyms);
I sym = symbolList.get(symidx);
result.append(sym);
}
return result.toWord();
}
@Override
protected Stream<Word<I>> generateTestWords(A hypothesis, Collection<? extends I> inputs) {
final List<? extends I> symbolList = CollectionsUtil.randomAccessList(inputs);
return Stream.generate(() -> generateTestWord(symbolList, symbolList.size())).limit(maxTests);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment