diff --git a/alib2algo/src/automaton/generate/RandomAutomatonFactory.cpp b/alib2algo/src/automaton/generate/RandomAutomatonFactory.cpp index 0f5c0e565e6918a4002e08eaa23837e316bcf1d5..4c26ae37ea13a4e2be960a71e20e35d272a31c77 100644 --- a/alib2algo/src/automaton/generate/RandomAutomatonFactory.cpp +++ b/alib2algo/src/automaton/generate/RandomAutomatonFactory.cpp @@ -3,23 +3,6 @@ namespace automaton::generate { -automaton::NFA < std::string, unsigned > RandomAutomatonFactory::generateNFA( size_t statesCount, size_t alphabetSize, bool randomizedAlphabet, double density ) { - constexpr size_t ENGLISH_ALPHABET_SIZE = 26; - if(alphabetSize > ENGLISH_ALPHABET_SIZE) - throw exception::CommonException("Too big alphabet."); - - ext::deque < std::string > alphabet; - for(char i = 'a'; i <= 'z'; i++) - alphabet.push_back ( std::string ( 1, i ) ); - - if(randomizedAlphabet) - shuffle(alphabet.begin(), alphabet.end(), ext::random_devices::semirandom); - - alphabet.resize ( alphabetSize ); - - return automaton::generate::RandomAutomatonFactory::LeslieConnectedNFA( statesCount, alphabet, density ); -} - unsigned RandomAutomatonFactory::ithAccessibleState ( const ext::deque < bool > & VStates, size_t i ) { i ++; for( size_t j = 0; j < VStates.size ( ); j++ ) { @@ -55,13 +38,4 @@ auto GenerateNFA1 = registration::AbstractRegister < automaton::generate::Random @param density density of the transition function (0-100)\n\ @return random nondeterministic finite automaton" ); -auto GenerateNFA2 = registration::AbstractRegister < automaton::generate::RandomAutomatonFactory, automaton::NFA < std::string, unsigned >, size_t, size_t, bool, double > ( automaton::generate::RandomAutomatonFactory::generateNFA, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "statesCount", "alphabetSize", "randomizedAlphabet", "density" ).setDocumentation ( -"Generates a random finite automaton.\n\ -\n\ -@param statesCount number of states in the generated automaton\n\ -@param alphabetSize size of the alphabet (1-26)\n\ -@param randomizedAlphabet selects random symbols from a-z range if true\n\ -@param density density of the transition function (0-100). 100 means every possible transition is created\n\ -@return random nondeterministic finite automaton" ); - } /* namespace */ diff --git a/alib2algo/src/automaton/generate/RandomAutomatonFactory.h b/alib2algo/src/automaton/generate/RandomAutomatonFactory.h index 5f6bafde60475b53c67efdc805070447168cd2d9..cf74489534a5d64b269b695da2e361c7c7cd1be8 100644 --- a/alib2algo/src/automaton/generate/RandomAutomatonFactory.h +++ b/alib2algo/src/automaton/generate/RandomAutomatonFactory.h @@ -54,20 +54,6 @@ public: template < class SymbolType > static automaton::NFA < SymbolType, unsigned > generateNFA ( size_t statesCount, const ext::set < SymbolType > & alphabet, double density ); - /** - * \overload - * - * Generates a random finite automaton. - * - * \param statesCount number of states in the generated automaton - * \param alphabetSize size of the alphabet (1-26) - * \param randomizedAlphabet selects random symbols from a-z range if true - * \param density density of the transition function (0-100). 100 means every possible transition is created - * - * \return random nondeterministic finite automaton - */ - static automaton::NFA < std::string, unsigned > generateNFA ( size_t statesCount, size_t alphabetSize, bool randomizedAlphabet, double density ); - private: /** * Selects ith accessible state form \p VStates. diff --git a/tests/aql/AutomataConcatenation.aql b/tests/aql/AutomataConcatenation.aql index 066ea23b55c0e706d7649285e380c0c8e59e76e8..6aa11491fa24c4a8310b0b64dcd2cb1fb80dc405 100644 --- a/tests/aql/AutomataConcatenation.aql +++ b/tests/aql/AutomataConcatenation.aql @@ -1,8 +1,8 @@ begin declare auto $iter = 200; while ( -- $iter ) do begin - execute automaton::generate::RandomAutomatonFactory 10 3 false 5 > $a1; - execute automaton::generate::RandomAutomatonFactory 10 3 false 5 > $a2; + execute automaton::generate::RandomAutomatonFactory 10 <(alphabet::generate::GenerateAlphabet 3 false true) 5 > $a1; + execute automaton::generate::RandomAutomatonFactory 10 <(alphabet::generate::GenerateAlphabet 3 false true) 5 > $a2; execute automaton::transform::AutomataConcatenation $a1 $a2 | automaton::determinize::Determinize - | automaton::simplify::Trim - | automaton::simplify::Minimize - | automaton::simplify::Normalize - > $r1; execute automaton::transform::AutomataConcatenationEpsilonTransition $a1 $a2 | automaton::simplify::EpsilonRemoverIncoming - | automaton::determinize::Determinize - | automaton::simplify::Trim - | automaton::simplify::Minimize - | automaton::simplify::Normalize - > $r2; diff --git a/tests/aql/AutomatonIteration.aql b/tests/aql/AutomatonIteration.aql index 820de5f8b7546299760efed80b4c1f6ac3355a63..27878aa1403e48e57d81e2ceecf2d9d23bfa9981 100644 --- a/tests/aql/AutomatonIteration.aql +++ b/tests/aql/AutomatonIteration.aql @@ -1,7 +1,7 @@ begin declare auto $iter = 100; while ( -- $iter ) do begin - execute automaton::generate::RandomAutomatonFactory 10 3 true 5 > $aut; + execute automaton::generate::RandomAutomatonFactory 10 <(alphabet::generate::GenerateAlphabet 3 true true) 5 > $aut; execute automaton::transform::AutomatonIteration $aut | automaton::determinize::Determinize - | automaton::simplify::Trim - | automaton::simplify::Minimize - | automaton::simplify::Normalize - > $iter1; diff --git a/tests/aql/InfiniteLanguage.aql b/tests/aql/InfiniteLanguage.aql index 7890557621735b719852cfe628c5b5e2341f690c..2224b0271418d18d11fea279ffdbc5efb150e89f 100644 --- a/tests/aql/InfiniteLanguage.aql +++ b/tests/aql/InfiniteLanguage.aql @@ -1,7 +1,7 @@ begin declare auto $iter = 100; while ( -- $iter ) do begin - execute automaton::generate::RandomAutomatonFactory 6 1 false 5 > $aut; + execute automaton::generate::RandomAutomatonFactory 6 <(alphabet::generate::GenerateAlphabet 1 false true) 5 > $aut; execute ToRegExpStateElimination $aut > $regexp; execute automaton::properties::InfiniteLanguage $aut > $r1; diff --git a/tests/aql/functions.aql b/tests/aql/functions.aql index 4e99e39e0791533d02bec4dcbdbd4a09043191e8..9229737ee9ded4153fe9ee9fa3c9fe305d665354 100644 --- a/tests/aql/functions.aql +++ b/tests/aql/functions.aql @@ -2,5 +2,5 @@ function automaton::simplify::ToMinimalDFA ( auto $automaton ) returning auto be return batch automaton::simplify::EpsilonRemoverIncoming $automaton | automaton::determinize::Determinize - | automaton::simplify::Trim - | automaton::simplify::Minimize - | automaton::simplify::Normalize -; end -print automaton::generate::RandomAutomatonFactory 5 3 true 25 | automaton::simplify::ToMinimalDFA - -print expression automaton::simplify::ToMinimalDFA ( automaton::generate::RandomAutomatonFactory ( 5, 3, "true", 25 ) ) +print automaton::generate::RandomAutomatonFactory 5 <(alphabet::generate::GenerateAlphabet 3 true true) 25 | automaton::simplify::ToMinimalDFA - +print expression automaton::simplify::ToMinimalDFA ( automaton::generate::RandomAutomatonFactory ( 5, alphabet::generate::GenerateAlphabet (3, "true", "true"), 25 ) ) diff --git a/tests/cppaql/conversionsTest.cpp b/tests/cppaql/conversionsTest.cpp index b62795c7da70fdd527b8cf1e06dca1583775712e..621175c58fe46043d987bdf89032c3098be55167 100644 --- a/tests/cppaql/conversionsTest.cpp +++ b/tests/cppaql/conversionsTest.cpp @@ -11,7 +11,7 @@ const double RAND_DENSITY = 2.5; const size_t ITERATIONS = 50; std::string qGenNFA ( ) { - return ext::concat ( "execute automaton::generate::RandomAutomatonFactory (size_t)", rand ( ) % RAND_STATES + 1, " (size_t)", rand ( ) % RAND_ALPHABET + 1, " (bool)true (double)\"", RAND_DENSITY, "\"" ); + return ext::concat ( "execute automaton::generate::RandomAutomatonFactory (size_t)", rand ( ) % RAND_STATES + 1, " <(alphabet::generate::GenerateAlphabet (size_t)", rand ( ) % RAND_ALPHABET + 1, " true true) (double)\"", RAND_DENSITY, "\"" ); } static const std::string qMinimize ( "automaton::simplify::efficient::EpsilonRemoverIncoming - | automaton::determinize::Determinize - | " diff --git a/tests/cppaql/minimizeTest.cpp b/tests/cppaql/minimizeTest.cpp index 0f53a3cde52e52cd2c97f32ac8a48c23ea0e7b5f..85fc215827af55afea74867f1d3e89b350d39b6e 100644 --- a/tests/cppaql/minimizeTest.cpp +++ b/tests/cppaql/minimizeTest.cpp @@ -11,7 +11,7 @@ const double RAND_DENSITY = 2.5; const size_t ITERATIONS = 100; static std::string qGenNFA ( ) { - return ext::concat ( "execute automaton::generate::RandomAutomatonFactory (size_t)", rand ( ) % RAND_STATES + 1, " (size_t)", rand ( ) % RAND_ALPHABET + 1, " (bool)true (double)\"", RAND_DENSITY, "\"" ); + return ext::concat ( "execute automaton::generate::RandomAutomatonFactory (size_t)", rand ( ) % RAND_STATES + 1, " <(alphabet::generate::GenerateAlphabet (size_t)", rand ( ) % RAND_ALPHABET + 1, " (bool)true true) (double)\"", RAND_DENSITY, "\"" ); } TEST_CASE ( "Minimization FA test", "[integration]" ) {