Add testing minimization
This commit is contained in:
parent
346f0016a5
commit
04109bd54b
|
@ -38,6 +38,7 @@ set(TEST_FILES
|
||||||
tests/DFAToRegular/DFAToRegular.cpp
|
tests/DFAToRegular/DFAToRegular.cpp
|
||||||
tests/invertFDFA/InvertFDFA.cpp
|
tests/invertFDFA/InvertFDFA.cpp
|
||||||
tests/DFAToRegular/DFAToRegular2.cpp
|
tests/DFAToRegular/DFAToRegular2.cpp
|
||||||
|
tests/DFAToMinDFA/CountSizesMinDFA.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(Formalang src/main.cpp ${SOURCE_FILES})
|
add_executable(Formalang src/main.cpp ${SOURCE_FILES})
|
||||||
|
|
|
@ -55,6 +55,7 @@ class DFAGraph {
|
||||||
bool NotExistVertex(size_t number);
|
bool NotExistVertex(size_t number);
|
||||||
|
|
||||||
size_t GetCountVertexes() const;
|
size_t GetCountVertexes() const;
|
||||||
|
size_t GetReallyCountVertexes() const;
|
||||||
const std::vector<size_t>& GetFinalVertexes() const;
|
const std::vector<size_t>& GetFinalVertexes() const;
|
||||||
size_t GetStartVertex() const;
|
size_t GetStartVertex() const;
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ class NFAGraph {
|
||||||
bool NotExistVertex(size_t number);
|
bool NotExistVertex(size_t number);
|
||||||
|
|
||||||
size_t GetCountVertexes() const;
|
size_t GetCountVertexes() const;
|
||||||
|
size_t GetReallyCountVertexes() const;
|
||||||
const std::vector<size_t>& GetFinalVertexes() const;
|
const std::vector<size_t>& GetFinalVertexes() const;
|
||||||
const std::vector<size_t>& GetStartVertexes() const;
|
const std::vector<size_t>& GetStartVertexes() const;
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,10 @@ size_t DFAGraph::GetCountVertexes() const {
|
||||||
return count_vertexes_;
|
return count_vertexes_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t DFAGraph::GetReallyCountVertexes() const {
|
||||||
|
return vertexes_.size();
|
||||||
|
}
|
||||||
|
|
||||||
const std::vector<size_t>& DFAGraph::GetFinalVertexes() const {
|
const std::vector<size_t>& DFAGraph::GetFinalVertexes() const {
|
||||||
return final_vertexes_;
|
return final_vertexes_;
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,6 +150,10 @@ size_t NFAGraph::GetCountVertexes() const {
|
||||||
return count_vertexes_;
|
return count_vertexes_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t NFAGraph::GetReallyCountVertexes() const {
|
||||||
|
return vertexes_.size();
|
||||||
|
}
|
||||||
|
|
||||||
const std::vector<size_t>& NFAGraph::GetFinalVertexes() const {
|
const std::vector<size_t>& NFAGraph::GetFinalVertexes() const {
|
||||||
return final_vertexes_;
|
return final_vertexes_;
|
||||||
}
|
}
|
||||||
|
|
40
tests/DFAToMinDFA/CountSizesMinDFA.cpp
Normal file
40
tests/DFAToMinDFA/CountSizesMinDFA.cpp
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include "regular/RegularTree.hpp"
|
||||||
|
#include "converters/RegularToNFA.hpp"
|
||||||
|
#include "converters/NFAToDFA.hpp"
|
||||||
|
#include "converters/DFAToMinDFA.hpp"
|
||||||
|
#include "converters/DFAToRegular.hpp"
|
||||||
|
|
||||||
|
using namespace regular;
|
||||||
|
using namespace NFA;
|
||||||
|
using namespace DFA;
|
||||||
|
using namespace converters;
|
||||||
|
|
||||||
|
size_t GetCountVertexes(const std::string& regular) {
|
||||||
|
RegularTree r(regular);
|
||||||
|
NFAGraph NFA_tree = RegularToNFAGraph(std::move(r));
|
||||||
|
DFAGraph DFA_graph = NFAGraphToDFAGraph(std::move(NFA_tree));
|
||||||
|
DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph));
|
||||||
|
|
||||||
|
return DFA_graph.GetReallyCountVertexes();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DFA_to_min_DFA, a_start) {
|
||||||
|
EXPECT_EQ(GetCountVertexes("a*"), GetCountVertexes("( a | )*| | | aaa a a"));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DFA_to_min_DFA, a_plus) {
|
||||||
|
EXPECT_EQ(GetCountVertexes("a+"), GetCountVertexes("( a | a a )+|a | a |a "));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DFA_to_min_DFA, a_star_or_b_star) {
|
||||||
|
EXPECT_EQ(GetCountVertexes("a*|b*"), GetCountVertexes("a|b|a*|a+|b*|b+|bbb b b b| a a aa a aa | a+"));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DFA_to_min_DFA, epsilon) {
|
||||||
|
EXPECT_EQ(GetCountVertexes(" "), GetCountVertexes(" | | | "));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DFA_to_min_DFA, a_or_b_star) {
|
||||||
|
EXPECT_EQ(GetCountVertexes("(a|b)*"), GetCountVertexes("a+|b+|a*|b*|a*b*a*|a|b(a|b)*|b| |(a|b)*"));
|
||||||
|
}
|
Loading…
Reference in a new issue