From da41dfec26489680d0ebad0cb5961aa8f2682358 Mon Sep 17 00:00:00 2001 From: Joshua Moerman Date: Thu, 21 May 2015 16:45:33 +0200 Subject: [PATCH] Adds expected length (in randomised phase) as option to main --- java/YannakakisEQOracle.java | 2 +- lib/test_suite.cpp | 5 +++-- lib/test_suite.hpp | 2 +- src/main.cpp | 27 +++++++++------------------ 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/java/YannakakisEQOracle.java b/java/YannakakisEQOracle.java index f2801f8..0bf8be1 100644 --- a/java/YannakakisEQOracle.java +++ b/java/YannakakisEQOracle.java @@ -23,7 +23,7 @@ import java.util.*; public class YannakakisEQOracle implements EquivalenceOracle.MealyEquivalenceOracle { private final MembershipOracle> sulOracle; private final List> alphabets; - private final ProcessBuilder pb = new ProcessBuilder("/Users/joshua/Documents/PhD/Yannakakis/build/main", "--", "1", "stream"); + private final ProcessBuilder pb = new ProcessBuilder("/Users/joshua/Documents/PhD/Yannakakis/build/main", "--", "0", "3", "random"); private int currentAlphabet = 0; private long bound = 100; diff --git a/lib/test_suite.cpp b/lib/test_suite.cpp index 914cfdb..fde1c29 100644 --- a/lib/test_suite.cpp +++ b/lib/test_suite.cpp @@ -33,14 +33,15 @@ void test(const mealy & specification, const transfer_sequences & prefixes, } void randomized_test(const mealy & specification, const transfer_sequences & prefixes, - const separating_family & separating_family, size_t min_k, + const separating_family & separating_family, size_t min_k, size_t rnd_length, const writer & output) { clog << "*** K >= " << min_k << endl; std::random_device rd; std::mt19937 generator(rd()); - uniform_int_distribution<> unfair_coin(0, 2); + // https://en.wikipedia.org/wiki/Geometric_distribution we have the random variable Y here + uniform_int_distribution<> unfair_coin(0, rnd_length); uniform_int_distribution prefix_selection(0, prefixes.size() - 1); uniform_int_distribution suffix_selection; uniform_int_distribution input_selection(0, specification.input_size - 1); diff --git a/lib/test_suite.hpp b/lib/test_suite.hpp index 67331f1..16ac810 100644 --- a/lib/test_suite.hpp +++ b/lib/test_suite.hpp @@ -19,7 +19,7 @@ void test(mealy const & specification, transfer_sequences const & prefixes, /// \brief Performs random non-exhaustive tests for more states (harmonized, e.g. HSI / DS) [[noreturn]] void randomized_test(mealy const & specification, transfer_sequences const & prefixes, separating_family const & separating_family, size_t min_k, - writer const & output); + size_t rnd_length, writer const & output); /// \brief returns a writer which simply writes everything to cout (via inputs) writer default_writer(const std::vector & inputs); diff --git a/src/main.cpp b/src/main.cpp index f093c09..18163ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,19 +18,19 @@ using namespace std; using time_logger = silent_timer; int main(int argc, char *argv[]) try { - if(argc != 4) { - cerr << "usage: main " << endl; + if(argc != 5) { + cerr << "usage: main " << endl; return 1; } const string filename = argv[1]; const bool use_stdio = filename == "--"; - // 0 => only states checks. 1 => transition checks. 2 or more => deep checks const auto k_max = stoul(argv[2]); + const auto rnd_length = stoul(argv[3]); - const string mode = argv[3]; - const bool streaming = mode == "stream" || mode == "stop"; - const bool random_part = streaming && mode != "stop"; + const string mode = argv[4]; + const bool streaming = mode == "all" || mode == "fixed"; + const bool random_part = mode == "all" || mode == "random"; const bool use_distinguishing_sequence = true; const bool randomize_prefixes = true; @@ -63,7 +63,6 @@ int main(int argc, char *argv[]) try { return create_splitting_tree(machine, randomize_hopcroft ? randomized_hopcroft_style : hopcroft_style); }(); - return splitting_tree_hopcroft.root; }(); @@ -93,22 +92,13 @@ int main(int argc, char *argv[]) try { } }(); - auto inputs = [&]{ - return create_reverse_map(translation.input_indices); - }(); - - - // const auto all_pair_seperating_sequences = all_pair_seperating_sequences_fut.get(); - // const auto sequence = sequence_fut.get(); + auto inputs = create_reverse_map(translation.input_indices); const auto separating_family = [&]{ time_logger t("making seperating family"); return create_separating_family(sequence, all_pair_separating_sequences); }(); - // const auto transfer_sequences = transfer_sequences_fut.get(); - // const auto inputs = inputs_fut.get(); - if(streaming){ time_logger t("outputting all preset tests"); test(machine, transfer_sequences, separating_family, k_max, default_writer(inputs)); @@ -116,7 +106,8 @@ int main(int argc, char *argv[]) try { if(random_part){ time_logger t("outputting all random tests"); - randomized_test(machine, transfer_sequences, separating_family, k_max+1, default_writer(inputs)); + const auto k_max_ = streaming ? k_max + 1 : 0; + randomized_test(machine, transfer_sequences, separating_family, k_max_, rnd_length, default_writer(inputs)); } } catch (exception const & e) {