From 454e558e09012db1bb58d1e2c6b302068ff4d0a2 Mon Sep 17 00:00:00 2001 From: Thomas <thomas.vogt1@rwth-aachen.de> Date: Mon, 13 Jan 2020 15:55:02 +0100 Subject: [PATCH] gen constant length --- learnlib/DumpRFSAEQOracle.java | 35 ++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/learnlib/DumpRFSAEQOracle.java b/learnlib/DumpRFSAEQOracle.java index 0d32d48..b2163ac 100644 --- a/learnlib/DumpRFSAEQOracle.java +++ b/learnlib/DumpRFSAEQOracle.java @@ -3,17 +3,20 @@ import de.learnlib.api.query.DefaultQuery; import de.learnlib.oracle.equivalence.RandomWordsEQOracle; import net.automatalib.automata.fsa.FiniteStateAcceptor; import net.automatalib.automata.fsa.impl.compact.CompactNFA; +import net.automatalib.commons.util.collections.CollectionsUtil; import net.automatalib.words.Word; +import net.automatalib.words.WordBuilder; import javax.annotation.Nullable; -import java.util.Collection; -import java.util.Objects; -import java.util.Random; -import java.util.Set; +import java.util.*; import java.util.stream.Stream; public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> extends RandomWordsEQOracle<A, I, Boolean> { 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) { this(target, mqOracle, minLength, maxLength, maxTests, new Random(), 1); @@ -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) { super(mqOracle, minLength, maxLength, maxTests, random, batchSize); + this.maxLength = maxLength; + this.random = random; this.target = target; + this.maxTests = maxTests; } /** @@ -80,4 +86,25 @@ public class DumpRFSAEQOracle<A extends FiniteStateAcceptor<Integer, I>, I> exte } else 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); + } + } -- GitLab