diff --git a/alib2integrationtest/test-src/tests/minimizeTest.cpp b/alib2integrationtest/test-src/tests/minimizeTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..319d9bc3eebdd25946899c78830e9d0d72a842dc --- /dev/null +++ b/alib2integrationtest/test-src/tests/minimizeTest.cpp @@ -0,0 +1,64 @@ +#include <catch2/catch.hpp> +#include <alib/vector> + +#include "testing/TimeoutAqlTest.hpp" +#include "testing/TestFiles.hpp" + +const unsigned RAND_STATES = 15; +const unsigned RAND_ALPHABET = 5; +const double RAND_DENSITY = 2.5; +const size_t ITERATIONS = 100; + +static const std::string qGenNFA ( ) { + std::ostringstream oss; + oss << "execute automaton::generate::RandomAutomatonFactory "; + oss << "(size_t)" << rand ( ) % RAND_STATES + 1 << " "; + oss << "(size_t)" << rand ( ) % RAND_ALPHABET + 1 << " "; + oss << "(bool)true "; + oss << "(double)\"" << RAND_DENSITY << "\""; + return oss.str ( ); +} + +TEST_CASE ( "Minimization FA test", "[integration]" ) { + static const std::string qDet ( "automaton::determinize::Determinize - | automaton::simplify::Trim -" ); + static const std::string qMinimizeHop ( qDet + " | " + "automaton::simplify::Minimize - | automaton::simplify::Normalize -" ); + static const std::string qMinimizeBrz ( qDet + " | " + "automaton::simplify::MinimizeBrzozowski - | automaton::simplify::Trim - | automaton::simplify::Normalize -" ); + static const std::string qMinimizeDis ( qDet + " | " + "automaton::simplify::MinimizeDistinguishableStates - | automaton::simplify::Normalize -" ); + + + SECTION ( "Files tests" ) { + for ( const std::string & inputFile : TestFiles::Get ( "/automaton/aconversion.test.*.xml$" ) ) { + ext::vector < std::string > qs; + + qs = { + "execute < " + inputFile + " > $gen", + "quit compare::AutomatonCompare <( $gen | " + qMinimizeHop + " )" + " <( $gen | " + qMinimizeBrz + ")" + }; + TimeoutAqlTest ( 2s, qs ); + + qs = { + "execute < " + inputFile + " > $gen", + "quit compare::AutomatonCompare <( $gen | " + qMinimizeHop + " )" + " <( $gen | " + qMinimizeDis + ")" + }; + TimeoutAqlTest ( 2s, qs ); + } + } + + SECTION ( "Random tests" ) { + for ( size_t i = 0; i < ITERATIONS; i++ ) { + ext::vector < std::string > qs; + + qs = { + qGenNFA ( ) + " > $gen", + "quit compare::AutomatonCompare <( $gen | " + qMinimizeHop + " )" + " <( $gen | " + qMinimizeBrz + ")" + }; + TimeoutAqlTest ( 2s, qs ); + + qs = { + qGenNFA ( ) + " > $gen", + "quit compare::AutomatonCompare <( $gen | " + qMinimizeHop + " )" + " <( $gen | " + qMinimizeDis + ")" + }; + TimeoutAqlTest ( 2s, qs ); + } + } +}