diff --git a/acompare2/src/AutomatonCompare.cpp b/acompare2/src/AutomatonCompare.cpp index 90d24082990d8215df64bd111ff946b262f214ae..f8e49fc265f83bb37f1567d8d21627045efe6141 100644 --- a/acompare2/src/AutomatonCompare.cpp +++ b/acompare2/src/AutomatonCompare.cpp @@ -7,1379 +7,28 @@ #include "AutomatonCompare.h" -#include "automaton/Automaton.h" - -#include <set> -#include <map> -#include <list> -#include <utility> -#include <vector> -#include <typeinfo> -#include <iostream> -#include <algorithm> - -#include "automaton/FSM/DFA.h" -#include "automaton/FSM/NFA.h" -#include "automaton/FSM/MultiInitialStateNFA.h" -#include "automaton/FSM/EpsilonNFA.h" -#include "automaton/FSM/ExtendedNFA.h" -#include "automaton/FSM/CompactNFA.h" -#include "automaton/TA/DFTA.h" -#include "automaton/TA/NFTA.h" -#include "automaton/PDA/NPDA.h" -#include "automaton/PDA/DPDA.h" -#include "automaton/PDA/InputDrivenNPDA.h" -#include "automaton/PDA/InputDrivenDPDA.h" -#include "automaton/PDA/VisiblyPushdownNPDA.h" -#include "automaton/PDA/VisiblyPushdownDPDA.h" -#include "automaton/PDA/RealTimeHeightDeterministicNPDA.h" -#include "automaton/PDA/RealTimeHeightDeterministicDPDA.h" -#include "automaton/PDA/SinglePopNPDA.h" -#include "automaton/PDA/SinglePopDPDA.h" -#include "automaton/TM/OneTapeDTM.h" - -bool AutomatonCompare::testCompare(const automaton::DFA<>& a, const automaton::DFA<>& b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::MultiInitialStateNFA < >& a, const automaton::MultiInitialStateNFA < >& b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialStates() == b.getInitialStates() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::NFA < > & a, const automaton::NFA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::EpsilonNFA < > & a, const automaton::EpsilonNFA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::ExtendedNFA < > & a, const automaton::ExtendedNFA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::CompactNFA < > & a, const automaton::CompactNFA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::DFTA < > & a, const automaton::DFTA < > & b) { - return a.getFinalStates() == b.getFinalStates() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::NFTA < > & a, const automaton::NFTA < > & b) { - return a.getFinalStates() == b.getFinalStates() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::DPDA < > & a, const automaton::DPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getInitialSymbol() == b.getInitialSymbol() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::NPDA < > & a, const automaton::NPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getInitialSymbol() == b.getInitialSymbol() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::InputDrivenDPDA < > & a, const automaton::InputDrivenDPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getInitialSymbol() == b.getInitialSymbol() && - a.getStates() == b.getStates() && - a.getPushdownStoreOperations() == b.getPushdownStoreOperations() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::InputDrivenNPDA < > & a, const automaton::InputDrivenNPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getInitialSymbol() == b.getInitialSymbol() && - a.getStates() == b.getStates() && - a.getPushdownStoreOperations() == b.getPushdownStoreOperations() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::VisiblyPushdownDPDA < > & a, const automaton::VisiblyPushdownDPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getCallInputAlphabet() == b.getCallInputAlphabet() && -// a.getReturnnputAlphabet() == b.getReturnInputAlphabet() && -// a.getLocalInputAlphabet() == b.getLocalInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && - a.getStates() == b.getStates() && - a.getCallTransitions() == b.getCallTransitions() && - a.getReturnTransitions() == b.getReturnTransitions() && - a.getLocalTransitions() == b.getLocalTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::VisiblyPushdownNPDA < > & a, const automaton::VisiblyPushdownNPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialStates() == b.getInitialStates() && -// a.getCallInputAlphabet() == b.getCallInputAlphabet() && -// a.getReturnnputAlphabet() == b.getReturnInputAlphabet() && -// a.getLocalInputAlphabet() == b.getLocalInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && - a.getStates() == b.getStates() && - a.getCallTransitions() == b.getCallTransitions() && - a.getReturnTransitions() == b.getReturnTransitions() && - a.getLocalTransitions() == b.getLocalTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::RealTimeHeightDeterministicDPDA < > & a, const automaton::RealTimeHeightDeterministicDPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && - a.getStates() == b.getStates() && - a.getCallTransitions() == b.getCallTransitions() && - a.getReturnTransitions() == b.getReturnTransitions() && - a.getLocalTransitions() == b.getLocalTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::RealTimeHeightDeterministicNPDA < > & a, const automaton::RealTimeHeightDeterministicNPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialStates() == b.getInitialStates() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && - a.getStates() == b.getStates() && - a.getCallTransitions() == b.getCallTransitions() && - a.getReturnTransitions() == b.getReturnTransitions() && - a.getLocalTransitions() == b.getLocalTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::SinglePopDPDA < > & a, const automaton::SinglePopDPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getInitialSymbol() == b.getInitialSymbol() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::SinglePopNPDA < > & a, const automaton::SinglePopNPDA < > & b) { - return a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && -// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && - a.getInitialSymbol() == b.getInitialSymbol() && - a.getStates() == b.getStates() && - a.getTransitions() == b.getTransitions() ; -} - -bool AutomatonCompare::testCompare(const automaton::OneTapeDTM<>& a, const automaton::OneTapeDTM<>& b) { - return a.getBlankSymbol() == b.getBlankSymbol() && - a.getFinalStates() == b.getFinalStates() && - a.getInitialState() == b.getInitialState() && -// a.getInputAlphabet() == b.getInputAlphabet() && - a.getStates() == b.getStates() && -// a.getTapeAlphabet() == b.getTapeAlphabet() && - a.getTransitions() == b.getTransitions() ; -} - -template <class T> void AutomatonCompare::setCompare(const std::set<T> a, const std::set<T> b) { - std::set<T> aMinusB; - std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin())); - - std::set<T> bMinusA; - std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin())); - - for(typename std::set<T>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++) { - std::cout << "< " << *iter << std::endl; - } - std::cout << "---" << std::endl; - for(typename std::set<T>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++) { - std::cout << "> " << *iter << std::endl; - } -} - -template <class T> void AutomatonCompare::listCompare(const std::list<T> a, const std::list<T> b) { - std::list<T> aMinusB; - std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin())); - - std::list<T> bMinusA; - std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin())); - - for(typename std::list<T>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++) { - std::cout << "< " << *iter << std::endl; - } - std::cout << "---" << std::endl; - for(typename std::list<T>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++) { - std::cout << "> " << *iter << std::endl; - } -} - -template <class T, class R> void AutomatonCompare::mapCompare(const std::map<T, R> a, const std::map<T, R> b) { - std::map<T, R> aMinusB; - std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin())); - - std::map<T, R> bMinusA; - std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin())); - - for(typename std::map<T, R>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++) { - std::cout << "< " << iter->first << ", " << iter->second << std::endl; - } - std::cout << "---" << std::endl; - for(typename std::map<T, R>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++) { - std::cout << "> " << iter->first << ", " << iter->second << std::endl; - } -} - -void AutomatonCompare::printCompare(const automaton::DFA<>& a, const automaton::DFA<>& b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::MultiInitialStateNFA < >& a, const automaton::MultiInitialStateNFA < >& b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialStates() != b.getInitialStates()) { - std::cout << "InitialStates" << std::endl; - - AutomatonCompare::setCompare(a.getInitialStates(), b.getInitialStates()); - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::NFA < > & a, const automaton::NFA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::EpsilonNFA < > & a, const automaton::EpsilonNFA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::ExtendedNFA < > & a, const automaton::ExtendedNFA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::CompactNFA < > & a, const automaton::CompactNFA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::DFTA < > & a, const automaton::DFTA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::NFTA < > & a, const automaton::NFTA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::DPDA < > & a, const automaton::DPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getInitialSymbol() != b.getInitialSymbol()) { - std::cout << "InitialSymbol" << std::endl; - - std::cout << "< " << a.getInitialSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::NPDA < > & a, const automaton::NPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getInitialSymbol() != b.getInitialSymbol()) { - std::cout << "InitialSymbol" << std::endl; - - std::cout << "< " << a.getInitialSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::InputDrivenDPDA < > & a, const automaton::InputDrivenDPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getInitialSymbol() != b.getInitialSymbol()) { - std::cout << "InitialSymbol" << std::endl; - - std::cout << "< " << a.getInitialSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getPushdownStoreOperations() != b.getPushdownStoreOperations()) { - std::cout << "PushdownStoreOperations" << std::endl; - - AutomatonCompare::mapCompare(a.getPushdownStoreOperations(), b.getPushdownStoreOperations()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::InputDrivenNPDA < > & a, const automaton::InputDrivenNPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getInitialSymbol() != b.getInitialSymbol()) { - std::cout << "InitialSymbol" << std::endl; - - std::cout << "< " << a.getInitialSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getPushdownStoreOperations() != b.getPushdownStoreOperations()) { - std::cout << "PushdownStoreOperations" << std::endl; - - AutomatonCompare::mapCompare(a.getPushdownStoreOperations(), b.getPushdownStoreOperations()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::VisiblyPushdownDPDA < > & a, const automaton::VisiblyPushdownDPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getCallInputAlphabet() != b.getCallInputAlphabet()) { - std::cout << "CallInputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getCallInputAlphabet(), b.getCallInputAlphabet()); - } - - if(a.getReturnInputAlphabet() != b.getReturnInputAlphabet()) { - std::cout << "ReturnInputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getReturnInputAlphabet(), b.getReturnInputAlphabet()); - } - - if(a.getLocalInputAlphabet() != b.getLocalInputAlphabet()) { - std::cout << "LocalInputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getLocalInputAlphabet(), b.getLocalInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { - std::cout << "BottomOfTheStackSymbol" << std::endl; - - std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getCallTransitions() != b.getCallTransitions()) { - std::cout << "CallTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); - } - - if(a.getReturnTransitions() != b.getReturnTransitions()) { - std::cout << "ReturnTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); - } - - if(a.getLocalTransitions() != b.getLocalTransitions()) { - std::cout << "LocalTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::VisiblyPushdownNPDA < > & a, const automaton::VisiblyPushdownNPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialStates() != b.getInitialStates()) { - std::cout << "Initial states" << std::endl; - - AutomatonCompare::setCompare(a.getInitialStates(), b.getInitialStates()); - } - - if(a.getCallInputAlphabet() != b.getCallInputAlphabet()) { - std::cout << "CallInputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getCallInputAlphabet(), b.getCallInputAlphabet()); - } - - if(a.getReturnInputAlphabet() != b.getReturnInputAlphabet()) { - std::cout << "ReturnInputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getReturnInputAlphabet(), b.getReturnInputAlphabet()); - } - - if(a.getLocalInputAlphabet() != b.getLocalInputAlphabet()) { - std::cout << "LocalInputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getLocalInputAlphabet(), b.getLocalInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { - std::cout << "BottomOfTheStackSymbol" << std::endl; - - std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getCallTransitions() != b.getCallTransitions()) { - std::cout << "CallTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); - } - - if(a.getReturnTransitions() != b.getReturnTransitions()) { - std::cout << "ReturnTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); - } - - if(a.getLocalTransitions() != b.getLocalTransitions()) { - std::cout << "LocalTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::RealTimeHeightDeterministicDPDA < > & a, const automaton::RealTimeHeightDeterministicDPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { - std::cout << "BottomOfTheStackSymbol" << std::endl; - - std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getCallTransitions() != b.getCallTransitions()) { - std::cout << "CallTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); - } - - if(a.getReturnTransitions() != b.getReturnTransitions()) { - std::cout << "ReturnTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); - } - - if(a.getLocalTransitions() != b.getLocalTransitions()) { - std::cout << "LocalTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::RealTimeHeightDeterministicNPDA < > & a, const automaton::RealTimeHeightDeterministicNPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialStates() != b.getInitialStates()) { - std::cout << "Initial states" << std::endl; - - AutomatonCompare::setCompare(a.getInitialStates(), b.getInitialStates()); - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { - std::cout << "BottomOfTheStackSymbol" << std::endl; - - std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getCallTransitions() != b.getCallTransitions()) { - std::cout << "CallTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); - } - - if(a.getReturnTransitions() != b.getReturnTransitions()) { - std::cout << "ReturnTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); - } - - if(a.getLocalTransitions() != b.getLocalTransitions()) { - std::cout << "LocalTransitions" << std::endl; - - AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::SinglePopDPDA < > & a, const automaton::SinglePopDPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getInitialSymbol() != b.getInitialSymbol()) { - std::cout << "InitialSymbol" << std::endl; - - std::cout << "< " << a.getInitialSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::SinglePopNPDA < > & a, const automaton::SinglePopNPDA < > & b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { - std::cout << "StackAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); - } - - if(a.getInitialSymbol() != b.getInitialSymbol()) { - std::cout << "InitialSymbol" << std::endl; - - std::cout << "< " << a.getInitialSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialSymbol() << std::endl; - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -void AutomatonCompare::printCompare(const automaton::OneTapeDTM<>& a, const automaton::OneTapeDTM<>& b) { - std::cout << "AutomatonCompareer" << std::endl; - - if(a.getBlankSymbol() != b.getBlankSymbol()) { - std::cout << "Blank symbol" << std::endl; - - std::cout << "< " << a.getBlankSymbol() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getBlankSymbol() << std::endl; - } - - if(a.getFinalStates() != b.getFinalStates()){ - std::cout << "FinalStates" << std::endl; - - AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); - } - - if(a.getInitialState() != b.getInitialState()) { - std::cout << "Initial state" << std::endl; - - std::cout << "< " << a.getInitialState() << std::endl; - std::cout << "---" << std::endl; - std::cout << "> " << b.getInitialState() << std::endl; - } - - if(a.getInputAlphabet() != b.getInputAlphabet()) { - std::cout << "InputAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); - } - - if(a.getStates() != b.getStates()) { - std::cout << "States" << std::endl; - - AutomatonCompare::setCompare(a.getStates(), b.getStates()); - } - - if(a.getTapeAlphabet() != b.getTapeAlphabet()) { - std::cout << "TapeAlphabet" << std::endl; - - AutomatonCompare::setCompare(a.getTapeAlphabet(), b.getTapeAlphabet()); - } - - if(a.getTransitions() != b.getTransitions()) { - std::cout << "Transitions" << std::endl; - - AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); - } -} - -int AutomatonCompare::compare(const automaton::DFA<>& a, const automaton::DFA<>& b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - -auto AutomatonCompareDFA = AutomatonCompare::RegistratorWrapper<int, automaton::DFA<>, automaton::DFA<>>(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::NFA < > & a, const automaton::NFA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - +auto AutomatonCompareDFA = AutomatonCompare::RegistratorWrapper<int, automaton::DFA < >, automaton::DFA < > >(AutomatonCompare::compare); auto AutomatonCompareNFA = AutomatonCompare::RegistratorWrapper<int, automaton::NFA < > , automaton::NFA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::MultiInitialStateNFA < >& a, const automaton::MultiInitialStateNFA < >& b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - -auto AutomatonCompareMultiInitialStateNFA = AutomatonCompare::RegistratorWrapper<int, automaton::MultiInitialStateNFA < >, automaton::MultiInitialStateNFA < >>(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::EpsilonNFA < > & a, const automaton::EpsilonNFA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - +auto AutomatonCompareMultiInitialStateNFA = AutomatonCompare::RegistratorWrapper<int, automaton::MultiInitialStateNFA < >, automaton::MultiInitialStateNFA < > >(AutomatonCompare::compare); auto AutomatonCompareEpsilonNFA = AutomatonCompare::RegistratorWrapper<int, automaton::EpsilonNFA < >, automaton::EpsilonNFA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::ExtendedNFA < > & a, const automaton::ExtendedNFA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareExtendedNFA = AutomatonCompare::RegistratorWrapper<int, automaton::ExtendedNFA < >, automaton::ExtendedNFA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::CompactNFA < > & a, const automaton::CompactNFA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareCompactNFA = AutomatonCompare::RegistratorWrapper<int, automaton::CompactNFA < >, automaton::CompactNFA < > >(AutomatonCompare::compare); -int AutomatonCompare::compare(const automaton::DFTA < > & a, const automaton::DFTA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareDFTA = AutomatonCompare::RegistratorWrapper<int, automaton::DFTA < >, automaton::DFTA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::NFTA < > & a, const automaton::NFTA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareNFTA = AutomatonCompare::RegistratorWrapper<int, automaton::NFTA < >, automaton::NFTA < > >(AutomatonCompare::compare); -int AutomatonCompare::compare(const automaton::DPDA < > & a, const automaton::DPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareDPDA = AutomatonCompare::RegistratorWrapper<int, automaton::DPDA < >, automaton::DPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::NPDA < > & a, const automaton::NPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareNPDA = AutomatonCompare::RegistratorWrapper<int, automaton::NPDA < >, automaton::NPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::InputDrivenDPDA < > & a, const automaton::InputDrivenDPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareInputDrivenDPDA = AutomatonCompare::RegistratorWrapper<int, automaton::InputDrivenDPDA < >, automaton::InputDrivenDPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::InputDrivenNPDA < > & a, const automaton::InputDrivenNPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareInputDrivenNPDA = AutomatonCompare::RegistratorWrapper<int, automaton::InputDrivenNPDA < >, automaton::InputDrivenNPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::VisiblyPushdownDPDA < > & a, const automaton::VisiblyPushdownDPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareVisiblyPushdownDPDA = AutomatonCompare::RegistratorWrapper<int, automaton::VisiblyPushdownDPDA < >, automaton::VisiblyPushdownDPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::VisiblyPushdownNPDA < > & a, const automaton::VisiblyPushdownNPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareVisiblyPushdownNPDA = AutomatonCompare::RegistratorWrapper<int, automaton::VisiblyPushdownNPDA < >, automaton::VisiblyPushdownNPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::RealTimeHeightDeterministicDPDA < > & a, const automaton::RealTimeHeightDeterministicDPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareRealTimeHeightDeterministicDPDA = AutomatonCompare::RegistratorWrapper<int, automaton::RealTimeHeightDeterministicDPDA < >, automaton::RealTimeHeightDeterministicDPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::RealTimeHeightDeterministicNPDA < > & a, const automaton::RealTimeHeightDeterministicNPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareRealTimeHeightDeterministicNPDA = AutomatonCompare::RegistratorWrapper<int, automaton::RealTimeHeightDeterministicNPDA < >, automaton::RealTimeHeightDeterministicNPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::SinglePopDPDA < > & a, const automaton::SinglePopDPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareSinglePopDPDA = AutomatonCompare::RegistratorWrapper<int, automaton::SinglePopDPDA < >, automaton::SinglePopDPDA < > >(AutomatonCompare::compare); - -int AutomatonCompare::compare(const automaton::SinglePopNPDA < > & a, const automaton::SinglePopNPDA < > & b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - auto AutomatonCompareSinglePopNPDA = AutomatonCompare::RegistratorWrapper<int, automaton::SinglePopNPDA < >, automaton::SinglePopNPDA < > >(AutomatonCompare::compare); -int AutomatonCompare::compare(const automaton::OneTapeDTM<>& a, const automaton::OneTapeDTM<>& b) { - if(!AutomatonCompare::testCompare(a, b)) { - AutomatonCompare::printCompare(a, b); - return 1; - } else { - return 0; - } -} - -auto AutomatonCompareOneTapeDTM = AutomatonCompare::RegistratorWrapper<int, automaton::OneTapeDTM<>, automaton::OneTapeDTM<>>(AutomatonCompare::compare); +auto AutomatonCompareOneTapeDTM = AutomatonCompare::RegistratorWrapper<int, automaton::OneTapeDTM < >, automaton::OneTapeDTM < > >(AutomatonCompare::compare); int AutomatonCompare::compare(const automaton::Automaton& a, const automaton::Automaton& b) { return dispatch(a.getData(), b.getData()); diff --git a/acompare2/src/AutomatonCompare.h b/acompare2/src/AutomatonCompare.h index d1870b3a26ad7573ca5d0238eca8d1a7d4501dfc..0919e8d6ca5248a9a70b29bbac46aefceef434ba 100644 --- a/acompare2/src/AutomatonCompare.h +++ b/acompare2/src/AutomatonCompare.h @@ -9,7 +9,6 @@ #define AUTOMATON_COMPARE_H_ #include <core/multipleDispatch.hpp> -#include <ostream> #include <automaton/Automaton.h> #include <automaton/AutomatonFeatures.h> @@ -17,94 +16,1537 @@ #include <list> #include <map> #include <utility> +#include <vector> +#include <iostream> +#include <ostream> +#include <algorithm> + +#include "automaton/FSM/DFA.h" +#include "automaton/FSM/NFA.h" +#include "automaton/FSM/MultiInitialStateNFA.h" +#include "automaton/FSM/EpsilonNFA.h" +#include "automaton/FSM/ExtendedNFA.h" +#include "automaton/FSM/CompactNFA.h" +#include "automaton/TA/DFTA.h" +#include "automaton/TA/NFTA.h" +#include "automaton/PDA/NPDA.h" +#include "automaton/PDA/DPDA.h" +#include "automaton/PDA/InputDrivenNPDA.h" +#include "automaton/PDA/InputDrivenDPDA.h" +#include "automaton/PDA/VisiblyPushdownNPDA.h" +#include "automaton/PDA/VisiblyPushdownDPDA.h" +#include "automaton/PDA/RealTimeHeightDeterministicNPDA.h" +#include "automaton/PDA/RealTimeHeightDeterministicDPDA.h" +#include "automaton/PDA/SinglePopNPDA.h" +#include "automaton/PDA/SinglePopDPDA.h" +#include "automaton/TM/OneTapeDTM.h" class AutomatonCompare : public std::DoubleDispatch<AutomatonCompare, int, const automaton::AutomatonBase &, const automaton::AutomatonBase &> { private: - static bool testCompare(const automaton::DFA<>& a, const automaton::DFA<>& b); - static void printCompare(const automaton::DFA<>& a, const automaton::DFA<>& b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::DFA < SymbolType, StateType > & a, const automaton::DFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::DFA < SymbolType, StateType > & a, const automaton::DFA < SymbolType, StateType > & b); - static bool testCompare(const automaton::NFA < > & a, const automaton::NFA < > & b); - static void printCompare(const automaton::NFA < > & a, const automaton::NFA < > & b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::NFA < SymbolType, StateType > & a, const automaton::NFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::NFA < SymbolType, StateType > & a, const automaton::NFA < SymbolType, StateType > & b); - static bool testCompare(const automaton::MultiInitialStateNFA < >& a, const automaton::MultiInitialStateNFA < >& b); - static void printCompare(const automaton::MultiInitialStateNFA < >& a, const automaton::MultiInitialStateNFA < >& b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::MultiInitialStateNFA < SymbolType, StateType > & a, const automaton::MultiInitialStateNFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::MultiInitialStateNFA < SymbolType, StateType > & a, const automaton::MultiInitialStateNFA < SymbolType, StateType > & b); - static bool testCompare(const automaton::EpsilonNFA < > & a, const automaton::EpsilonNFA < > & b); - static void printCompare(const automaton::EpsilonNFA < > & a, const automaton::EpsilonNFA < > & b); + template<class SymbolType, class EpsilonType, class StateType> + static bool testCompare(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & a, const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static void printCompare(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & a, const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & b); - static bool testCompare(const automaton::ExtendedNFA < > & a, const automaton::ExtendedNFA < > & b); - static void printCompare(const automaton::ExtendedNFA < > & a, const automaton::ExtendedNFA < > & b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::ExtendedNFA < SymbolType, StateType > & a, const automaton::ExtendedNFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::ExtendedNFA < SymbolType, StateType > & a, const automaton::ExtendedNFA < SymbolType, StateType > & b); - static bool testCompare(const automaton::CompactNFA < > & a, const automaton::CompactNFA < > & b); - static void printCompare(const automaton::CompactNFA < > & a, const automaton::CompactNFA < > & b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::CompactNFA < SymbolType, StateType > & a, const automaton::CompactNFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::CompactNFA < SymbolType, StateType > & a, const automaton::CompactNFA < SymbolType, StateType > & b); - static bool testCompare(const automaton::DPDA < > & a, const automaton::DPDA < > & b); - static void printCompare(const automaton::DPDA < > & a, const automaton::DPDA < > & b); + template<class SymbolType, class EpsilonType, class StateType> + static bool testCompare(const automaton::DPDA < SymbolType, EpsilonType, StateType > & a, const automaton::DPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static void printCompare(const automaton::DPDA < SymbolType, EpsilonType, StateType > & a, const automaton::DPDA < SymbolType, EpsilonType, StateType > & b); - static bool testCompare(const automaton::NPDA < > & a, const automaton::NPDA < > & b); - static void printCompare(const automaton::NPDA < > & a, const automaton::NPDA < > & b); + template<class SymbolType, class EpsilonType, class StateType> + static bool testCompare(const automaton::NPDA < SymbolType, EpsilonType, StateType > & a, const automaton::NPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static void printCompare(const automaton::NPDA < SymbolType, EpsilonType, StateType > & a, const automaton::NPDA < SymbolType, EpsilonType, StateType > & b); - static bool testCompare(const automaton::DFTA < > & a, const automaton::DFTA < > & b); - static void printCompare(const automaton::DFTA < > & a, const automaton::DFTA < > & b); + template<class SymbolType, class RankType, class StateType> + static bool testCompare(const automaton::DFTA < SymbolType, RankType, StateType > & a, const automaton::DFTA < SymbolType, RankType, StateType > & b); + template<class SymbolType, class RankType, class StateType> + static void printCompare(const automaton::DFTA < SymbolType, RankType, StateType > & a, const automaton::DFTA < SymbolType, RankType, StateType > & b); - static bool testCompare(const automaton::NFTA < > & a, const automaton::NFTA < > & b); - static void printCompare(const automaton::NFTA < > & a, const automaton::NFTA < > & b); + template<class SymbolType, class RankType, class StateType> + static bool testCompare(const automaton::NFTA < SymbolType, RankType, StateType > & a, const automaton::NFTA < SymbolType, RankType, StateType > & b); + template<class SymbolType, class RankType, class StateType> + static void printCompare(const automaton::NFTA < SymbolType, RankType, StateType > & a, const automaton::NFTA < SymbolType, RankType, StateType > & b); - static bool testCompare(const automaton::InputDrivenDPDA < > & a, const automaton::InputDrivenDPDA < > & b); - static void printCompare(const automaton::InputDrivenDPDA < > & a, const automaton::InputDrivenDPDA < > & b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::InputDrivenDPDA < SymbolType, StateType > & a, const automaton::InputDrivenDPDA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::InputDrivenDPDA < SymbolType, StateType > & a, const automaton::InputDrivenDPDA < SymbolType, StateType > & b); - static bool testCompare(const automaton::InputDrivenNPDA < > & a, const automaton::InputDrivenNPDA < > & b); - static void printCompare(const automaton::InputDrivenNPDA < > & a, const automaton::InputDrivenNPDA < > & b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::InputDrivenNPDA < SymbolType, StateType > & a, const automaton::InputDrivenNPDA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::InputDrivenNPDA < SymbolType, StateType > & a, const automaton::InputDrivenNPDA < SymbolType, StateType > & b); - static bool testCompare(const automaton::VisiblyPushdownDPDA < > & a, const automaton::VisiblyPushdownDPDA < > & b); - static void printCompare(const automaton::VisiblyPushdownDPDA < > & a, const automaton::VisiblyPushdownDPDA < > & b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & b); - static bool testCompare(const automaton::VisiblyPushdownNPDA < > & a, const automaton::VisiblyPushdownNPDA < > & b); - static void printCompare(const automaton::VisiblyPushdownNPDA < > & a, const automaton::VisiblyPushdownNPDA < > & b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & b); - static bool testCompare(const automaton::RealTimeHeightDeterministicDPDA < > & a, const automaton::RealTimeHeightDeterministicDPDA < > & b); - static void printCompare(const automaton::RealTimeHeightDeterministicDPDA < > & a, const automaton::RealTimeHeightDeterministicDPDA < > & b); + template<class SymbolType, class EpsilonType, class StateType> + static bool testCompare(const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static void printCompare(const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & b); - static bool testCompare(const automaton::RealTimeHeightDeterministicNPDA < > & a, const automaton::RealTimeHeightDeterministicNPDA < > & b); - static void printCompare(const automaton::RealTimeHeightDeterministicNPDA < > & a, const automaton::RealTimeHeightDeterministicNPDA < > & b); + template<class SymbolType, class EpsilonType, class StateType> + static bool testCompare(const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static void printCompare(const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & b); - static bool testCompare(const automaton::SinglePopDPDA < > & a, const automaton::SinglePopDPDA < > & b); - static void printCompare(const automaton::SinglePopDPDA < > & a, const automaton::SinglePopDPDA < > & b); + template<class SymbolType, class EpsilonType, class StateType> + static bool testCompare(const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static void printCompare(const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & b); - static bool testCompare(const automaton::SinglePopNPDA < > & a, const automaton::SinglePopNPDA < > & b); - static void printCompare(const automaton::SinglePopNPDA < > & a, const automaton::SinglePopNPDA < > & b); + template<class SymbolType, class EpsilonType, class StateType> + static bool testCompare(const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static void printCompare(const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & b); - static bool testCompare(const automaton::OneTapeDTM<>& a, const automaton::OneTapeDTM<>& b); - static void printCompare(const automaton::OneTapeDTM<>& a, const automaton::OneTapeDTM<>& b); + template<class SymbolType, class StateType> + static bool testCompare(const automaton::OneTapeDTM < SymbolType, StateType > & a, const automaton::OneTapeDTM < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static void printCompare(const automaton::OneTapeDTM < SymbolType, StateType > & a, const automaton::OneTapeDTM < SymbolType, StateType > & b); template <class T> static void setCompare(const std::set<T> a, const std::set<T> b); template <class T> static void listCompare(const std::list<T> a, const std::list<T> b); template <class T, class R> static void mapCompare(const std::map<T, R> a, const std::map<T, R> b); public: - static int compare(const automaton::DFA<>& a, const automaton::DFA<>& b); - static int compare(const automaton::NFA < > & a, const automaton::NFA < > & b); - static int compare(const automaton::MultiInitialStateNFA < >& a, const automaton::MultiInitialStateNFA < >& b); - static int compare(const automaton::EpsilonNFA < > & a, const automaton::EpsilonNFA < > & b); - static int compare(const automaton::ExtendedNFA < > & a, const automaton::ExtendedNFA < > & b); - static int compare(const automaton::CompactNFA < > & a, const automaton::CompactNFA < > & b); - - static int compare(const automaton::DFTA < > & a, const automaton::DFTA < > & b); - static int compare(const automaton::NFTA < > & a, const automaton::NFTA < > & b); - - static int compare(const automaton::DPDA < > & a, const automaton::DPDA < > & b); - static int compare(const automaton::NPDA < > & a, const automaton::NPDA < > & b); - static int compare(const automaton::InputDrivenDPDA < > & a, const automaton::InputDrivenDPDA < > & b); - static int compare(const automaton::InputDrivenNPDA < > & a, const automaton::InputDrivenNPDA < > & b); - static int compare(const automaton::RealTimeHeightDeterministicDPDA < > & a, const automaton::RealTimeHeightDeterministicDPDA < > & b); - static int compare(const automaton::RealTimeHeightDeterministicNPDA < > & a, const automaton::RealTimeHeightDeterministicNPDA < > & b); - static int compare(const automaton::SinglePopDPDA < > & a, const automaton::SinglePopDPDA < > & b); - static int compare(const automaton::SinglePopNPDA < > & a, const automaton::SinglePopNPDA < > & b); - static int compare(const automaton::VisiblyPushdownDPDA < > & a, const automaton::VisiblyPushdownDPDA < > & b); - static int compare(const automaton::VisiblyPushdownNPDA < > & a, const automaton::VisiblyPushdownNPDA < > & b); - - static int compare(const automaton::OneTapeDTM<>& a, const automaton::OneTapeDTM<>& b); + template<class SymbolType, class StateType> + static int compare(const automaton::DFA < SymbolType, StateType > & a, const automaton::DFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::NFA < SymbolType, StateType > & a, const automaton::NFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::MultiInitialStateNFA < SymbolType, StateType > & a, const automaton::MultiInitialStateNFA < SymbolType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static int compare(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & a, const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::ExtendedNFA < SymbolType, StateType > & a, const automaton::ExtendedNFA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::CompactNFA < SymbolType, StateType > & a, const automaton::CompactNFA < SymbolType, StateType > & b); + + template<class SymbolType, class RankType, class StateType> + static int compare(const automaton::DFTA < SymbolType, RankType, StateType > & a, const automaton::DFTA < SymbolType, RankType, StateType > & b); + template<class SymbolType, class RankType, class StateType> + static int compare(const automaton::NFTA < SymbolType, RankType, StateType > & a, const automaton::NFTA < SymbolType, RankType, StateType > & b); + + template<class SymbolType, class EpsilonType, class StateType> + static int compare(const automaton::DPDA < SymbolType, EpsilonType, StateType > & a, const automaton::DPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static int compare(const automaton::NPDA < SymbolType, EpsilonType, StateType > & a, const automaton::NPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::InputDrivenDPDA < SymbolType, StateType > & a, const automaton::InputDrivenDPDA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::InputDrivenNPDA < SymbolType, StateType > & a, const automaton::InputDrivenNPDA < SymbolType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static int compare(const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static int compare(const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static int compare(const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class EpsilonType, class StateType> + static int compare(const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & b); + template<class SymbolType, class StateType> + static int compare(const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & b); + + template<class SymbolType, class StateType> + static int compare(const automaton::OneTapeDTM < SymbolType, StateType > & a, const automaton::OneTapeDTM < SymbolType, StateType > & b); static int compare(const automaton::Automaton& a, const automaton::Automaton& b); }; +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::DFA < SymbolType, StateType > & a, const automaton::DFA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::MultiInitialStateNFA < SymbolType, StateType > & a, const automaton::MultiInitialStateNFA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialStates() == b.getInitialStates() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::NFA < SymbolType, StateType > & a, const automaton::NFA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class EpsilonType, class StateType> +bool AutomatonCompare::testCompare(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & a, const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::ExtendedNFA < SymbolType, StateType > & a, const automaton::ExtendedNFA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::CompactNFA < SymbolType, StateType > & a, const automaton::CompactNFA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class RankType, class StateType> +bool AutomatonCompare::testCompare(const automaton::DFTA < SymbolType, RankType, StateType > & a, const automaton::DFTA < SymbolType, RankType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class RankType, class StateType> +bool AutomatonCompare::testCompare(const automaton::NFTA < SymbolType, RankType, StateType > & a, const automaton::NFTA < SymbolType, RankType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class EpsilonType, class StateType> +bool AutomatonCompare::testCompare(const automaton::DPDA < SymbolType, EpsilonType, StateType > & a, const automaton::DPDA < SymbolType, EpsilonType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getInitialSymbol() == b.getInitialSymbol() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class EpsilonType, class StateType> +bool AutomatonCompare::testCompare(const automaton::NPDA < SymbolType, EpsilonType, StateType > & a, const automaton::NPDA < SymbolType, EpsilonType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getInitialSymbol() == b.getInitialSymbol() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::InputDrivenDPDA < SymbolType, StateType > & a, const automaton::InputDrivenDPDA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getInitialSymbol() == b.getInitialSymbol() && + a.getStates() == b.getStates() && + a.getPushdownStoreOperations() == b.getPushdownStoreOperations() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::InputDrivenNPDA < SymbolType, StateType > & a, const automaton::InputDrivenNPDA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getInitialSymbol() == b.getInitialSymbol() && + a.getStates() == b.getStates() && + a.getPushdownStoreOperations() == b.getPushdownStoreOperations() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getCallInputAlphabet() == b.getCallInputAlphabet() && +// a.getReturnnputAlphabet() == b.getReturnInputAlphabet() && +// a.getLocalInputAlphabet() == b.getLocalInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && + a.getStates() == b.getStates() && + a.getCallTransitions() == b.getCallTransitions() && + a.getReturnTransitions() == b.getReturnTransitions() && + a.getLocalTransitions() == b.getLocalTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialStates() == b.getInitialStates() && +// a.getCallInputAlphabet() == b.getCallInputAlphabet() && +// a.getReturnnputAlphabet() == b.getReturnInputAlphabet() && +// a.getLocalInputAlphabet() == b.getLocalInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && + a.getStates() == b.getStates() && + a.getCallTransitions() == b.getCallTransitions() && + a.getReturnTransitions() == b.getReturnTransitions() && + a.getLocalTransitions() == b.getLocalTransitions() ; +} + +template<class SymbolType, class EpsilonType, class StateType> +bool AutomatonCompare::testCompare(const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && + a.getStates() == b.getStates() && + a.getCallTransitions() == b.getCallTransitions() && + a.getReturnTransitions() == b.getReturnTransitions() && + a.getLocalTransitions() == b.getLocalTransitions() ; +} + +template<class SymbolType, class EpsilonType, class StateType> +bool AutomatonCompare::testCompare(const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialStates() == b.getInitialStates() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getBottomOfTheStackSymbol() == b.getBottomOfTheStackSymbol() && + a.getStates() == b.getStates() && + a.getCallTransitions() == b.getCallTransitions() && + a.getReturnTransitions() == b.getReturnTransitions() && + a.getLocalTransitions() == b.getLocalTransitions() ; +} + +template<class SymbolType, class EpsilonType, class StateType> +bool AutomatonCompare::testCompare(const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getInitialSymbol() == b.getInitialSymbol() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class EpsilonType, class StateType> +bool AutomatonCompare::testCompare(const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & b) { + return a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && +// a.getPushdownStoreAlphabet() == b.getPushdownStoreAlphabet() && + a.getInitialSymbol() == b.getInitialSymbol() && + a.getStates() == b.getStates() && + a.getTransitions() == b.getTransitions() ; +} + +template<class SymbolType, class StateType> +bool AutomatonCompare::testCompare(const automaton::OneTapeDTM < SymbolType, StateType > & a, const automaton::OneTapeDTM < SymbolType, StateType > & b) { + return a.getBlankSymbol() == b.getBlankSymbol() && + a.getFinalStates() == b.getFinalStates() && + a.getInitialState() == b.getInitialState() && +// a.getInputAlphabet() == b.getInputAlphabet() && + a.getStates() == b.getStates() && +// a.getTapeAlphabet() == b.getTapeAlphabet() && + a.getTransitions() == b.getTransitions() ; +} + +template <class T> void AutomatonCompare::setCompare(const std::set<T> a, const std::set<T> b) { + std::set<T> aMinusB; + std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin())); + + std::set<T> bMinusA; + std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin())); + + for(typename std::set<T>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++) { + std::cout << "< " << *iter << std::endl; + } + std::cout << "---" << std::endl; + for(typename std::set<T>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++) { + std::cout << "> " << *iter << std::endl; + } +} + +template <class T> void AutomatonCompare::listCompare(const std::list<T> a, const std::list<T> b) { + std::list<T> aMinusB; + std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin())); + + std::list<T> bMinusA; + std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin())); + + for(typename std::list<T>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++) { + std::cout << "< " << *iter << std::endl; + } + std::cout << "---" << std::endl; + for(typename std::list<T>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++) { + std::cout << "> " << *iter << std::endl; + } +} + +template <class T, class R> void AutomatonCompare::mapCompare(const std::map<T, R> a, const std::map<T, R> b) { + std::map<T, R> aMinusB; + std::set_difference(a.begin(), a.end(), b.begin(), b.end(), std::inserter(aMinusB, aMinusB.begin())); + + std::map<T, R> bMinusA; + std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(bMinusA, bMinusA.begin())); + + for(typename std::map<T, R>::const_iterator iter = aMinusB.begin(); iter != aMinusB.end(); iter++) { + std::cout << "< " << iter->first << ", " << iter->second << std::endl; + } + std::cout << "---" << std::endl; + for(typename std::map<T, R>::const_iterator iter = bMinusA.begin(); iter != bMinusA.end(); iter++) { + std::cout << "> " << iter->first << ", " << iter->second << std::endl; + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::DFA < SymbolType, StateType > & a, const automaton::DFA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::MultiInitialStateNFA < SymbolType, StateType > & a, const automaton::MultiInitialStateNFA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialStates() != b.getInitialStates()) { + std::cout << "InitialStates" << std::endl; + + AutomatonCompare::setCompare(a.getInitialStates(), b.getInitialStates()); + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::NFA < SymbolType, StateType > & a, const automaton::NFA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class EpsilonType, class StateType> +void AutomatonCompare::printCompare(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & a, const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::ExtendedNFA < SymbolType, StateType > & a, const automaton::ExtendedNFA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::CompactNFA < SymbolType, StateType > & a, const automaton::CompactNFA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class RankType, class StateType> +void AutomatonCompare::printCompare(const automaton::DFTA < SymbolType, RankType, StateType > & a, const automaton::DFTA < SymbolType, RankType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class RankType, class StateType> +void AutomatonCompare::printCompare(const automaton::NFTA < SymbolType, RankType, StateType > & a, const automaton::NFTA < SymbolType, RankType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class EpsilonType, class StateType> +void AutomatonCompare::printCompare(const automaton::DPDA < SymbolType, EpsilonType, StateType > & a, const automaton::DPDA < SymbolType, EpsilonType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getInitialSymbol() != b.getInitialSymbol()) { + std::cout << "InitialSymbol" << std::endl; + + std::cout << "< " << a.getInitialSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class EpsilonType, class StateType> +void AutomatonCompare::printCompare(const automaton::NPDA < SymbolType, EpsilonType, StateType > & a, const automaton::NPDA < SymbolType, EpsilonType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getInitialSymbol() != b.getInitialSymbol()) { + std::cout << "InitialSymbol" << std::endl; + + std::cout << "< " << a.getInitialSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::InputDrivenDPDA < SymbolType, StateType > & a, const automaton::InputDrivenDPDA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getInitialSymbol() != b.getInitialSymbol()) { + std::cout << "InitialSymbol" << std::endl; + + std::cout << "< " << a.getInitialSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getPushdownStoreOperations() != b.getPushdownStoreOperations()) { + std::cout << "PushdownStoreOperations" << std::endl; + + AutomatonCompare::mapCompare(a.getPushdownStoreOperations(), b.getPushdownStoreOperations()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::InputDrivenNPDA < SymbolType, StateType > & a, const automaton::InputDrivenNPDA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getInitialSymbol() != b.getInitialSymbol()) { + std::cout << "InitialSymbol" << std::endl; + + std::cout << "< " << a.getInitialSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getPushdownStoreOperations() != b.getPushdownStoreOperations()) { + std::cout << "PushdownStoreOperations" << std::endl; + + AutomatonCompare::mapCompare(a.getPushdownStoreOperations(), b.getPushdownStoreOperations()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getCallInputAlphabet() != b.getCallInputAlphabet()) { + std::cout << "CallInputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getCallInputAlphabet(), b.getCallInputAlphabet()); + } + + if(a.getReturnInputAlphabet() != b.getReturnInputAlphabet()) { + std::cout << "ReturnInputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getReturnInputAlphabet(), b.getReturnInputAlphabet()); + } + + if(a.getLocalInputAlphabet() != b.getLocalInputAlphabet()) { + std::cout << "LocalInputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getLocalInputAlphabet(), b.getLocalInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { + std::cout << "BottomOfTheStackSymbol" << std::endl; + + std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getCallTransitions() != b.getCallTransitions()) { + std::cout << "CallTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); + } + + if(a.getReturnTransitions() != b.getReturnTransitions()) { + std::cout << "ReturnTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); + } + + if(a.getLocalTransitions() != b.getLocalTransitions()) { + std::cout << "LocalTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialStates() != b.getInitialStates()) { + std::cout << "Initial states" << std::endl; + + AutomatonCompare::setCompare(a.getInitialStates(), b.getInitialStates()); + } + + if(a.getCallInputAlphabet() != b.getCallInputAlphabet()) { + std::cout << "CallInputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getCallInputAlphabet(), b.getCallInputAlphabet()); + } + + if(a.getReturnInputAlphabet() != b.getReturnInputAlphabet()) { + std::cout << "ReturnInputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getReturnInputAlphabet(), b.getReturnInputAlphabet()); + } + + if(a.getLocalInputAlphabet() != b.getLocalInputAlphabet()) { + std::cout << "LocalInputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getLocalInputAlphabet(), b.getLocalInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { + std::cout << "BottomOfTheStackSymbol" << std::endl; + + std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getCallTransitions() != b.getCallTransitions()) { + std::cout << "CallTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); + } + + if(a.getReturnTransitions() != b.getReturnTransitions()) { + std::cout << "ReturnTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); + } + + if(a.getLocalTransitions() != b.getLocalTransitions()) { + std::cout << "LocalTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); + } +} + +template<class SymbolType, class EpsilonType, class StateType> +void AutomatonCompare::printCompare(const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { + std::cout << "BottomOfTheStackSymbol" << std::endl; + + std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getCallTransitions() != b.getCallTransitions()) { + std::cout << "CallTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); + } + + if(a.getReturnTransitions() != b.getReturnTransitions()) { + std::cout << "ReturnTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); + } + + if(a.getLocalTransitions() != b.getLocalTransitions()) { + std::cout << "LocalTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); + } +} + +template<class SymbolType, class EpsilonType, class StateType> +void AutomatonCompare::printCompare(const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialStates() != b.getInitialStates()) { + std::cout << "Initial states" << std::endl; + + AutomatonCompare::setCompare(a.getInitialStates(), b.getInitialStates()); + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getBottomOfTheStackSymbol() != b.getBottomOfTheStackSymbol()) { + std::cout << "BottomOfTheStackSymbol" << std::endl; + + std::cout << "< " << a.getBottomOfTheStackSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getBottomOfTheStackSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getCallTransitions() != b.getCallTransitions()) { + std::cout << "CallTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getCallTransitions(), b.getCallTransitions()); + } + + if(a.getReturnTransitions() != b.getReturnTransitions()) { + std::cout << "ReturnTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getReturnTransitions(), b.getReturnTransitions()); + } + + if(a.getLocalTransitions() != b.getLocalTransitions()) { + std::cout << "LocalTransitions" << std::endl; + + AutomatonCompare::mapCompare(a.getLocalTransitions(), b.getLocalTransitions()); + } +} + +template<class SymbolType, class EpsilonType, class StateType> +void AutomatonCompare::printCompare(const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getInitialSymbol() != b.getInitialSymbol()) { + std::cout << "InitialSymbol" << std::endl; + + std::cout << "< " << a.getInitialSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class EpsilonType, class StateType> +void AutomatonCompare::printCompare(const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getPushdownStoreAlphabet() != b.getPushdownStoreAlphabet()) { + std::cout << "StackAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getPushdownStoreAlphabet(), b.getPushdownStoreAlphabet()); + } + + if(a.getInitialSymbol() != b.getInitialSymbol()) { + std::cout << "InitialSymbol" << std::endl; + + std::cout << "< " << a.getInitialSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialSymbol() << std::endl; + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +void AutomatonCompare::printCompare(const automaton::OneTapeDTM < SymbolType, StateType > & a, const automaton::OneTapeDTM < SymbolType, StateType > & b) { + std::cout << "AutomatonCompareer" << std::endl; + + if(a.getBlankSymbol() != b.getBlankSymbol()) { + std::cout << "Blank symbol" << std::endl; + + std::cout << "< " << a.getBlankSymbol() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getBlankSymbol() << std::endl; + } + + if(a.getFinalStates() != b.getFinalStates()){ + std::cout << "FinalStates" << std::endl; + + AutomatonCompare::setCompare(a.getFinalStates(), b.getFinalStates()); + } + + if(a.getInitialState() != b.getInitialState()) { + std::cout << "Initial state" << std::endl; + + std::cout << "< " << a.getInitialState() << std::endl; + std::cout << "---" << std::endl; + std::cout << "> " << b.getInitialState() << std::endl; + } + + if(a.getInputAlphabet() != b.getInputAlphabet()) { + std::cout << "InputAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getInputAlphabet(), b.getInputAlphabet()); + } + + if(a.getStates() != b.getStates()) { + std::cout << "States" << std::endl; + + AutomatonCompare::setCompare(a.getStates(), b.getStates()); + } + + if(a.getTapeAlphabet() != b.getTapeAlphabet()) { + std::cout << "TapeAlphabet" << std::endl; + + AutomatonCompare::setCompare(a.getTapeAlphabet(), b.getTapeAlphabet()); + } + + if(a.getTransitions() != b.getTransitions()) { + std::cout << "Transitions" << std::endl; + + AutomatonCompare::mapCompare(a.getTransitions(), b.getTransitions()); + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::DFA < SymbolType, StateType > & a, const automaton::DFA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::NFA < SymbolType, StateType > & a, const automaton::NFA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::MultiInitialStateNFA < SymbolType, StateType > & a, const automaton::MultiInitialStateNFA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class EpsilonType, class StateType> +int AutomatonCompare::compare(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & a, const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::ExtendedNFA < SymbolType, StateType > & a, const automaton::ExtendedNFA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::CompactNFA < SymbolType, StateType > & a, const automaton::CompactNFA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class RankType, class StateType> +int AutomatonCompare::compare(const automaton::DFTA < SymbolType, RankType, StateType > & a, const automaton::DFTA < SymbolType, RankType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class RankType, class StateType> +int AutomatonCompare::compare(const automaton::NFTA < SymbolType, RankType, StateType > & a, const automaton::NFTA < SymbolType, RankType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class EpsilonType, class StateType> +int AutomatonCompare::compare(const automaton::DPDA < SymbolType, EpsilonType, StateType > & a, const automaton::DPDA < SymbolType, EpsilonType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class EpsilonType, class StateType> +int AutomatonCompare::compare(const automaton::NPDA < SymbolType, EpsilonType, StateType > & a, const automaton::NPDA < SymbolType, EpsilonType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::InputDrivenDPDA < SymbolType, StateType > & a, const automaton::InputDrivenDPDA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::InputDrivenNPDA < SymbolType, StateType > & a, const automaton::InputDrivenNPDA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownDPDA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & a, const automaton::VisiblyPushdownNPDA < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class EpsilonType, class StateType> +int AutomatonCompare::compare(const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class EpsilonType, class StateType> +int AutomatonCompare::compare(const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class EpsilonType, class StateType> +int AutomatonCompare::compare(const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopDPDA < SymbolType, EpsilonType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class EpsilonType, class StateType> +int AutomatonCompare::compare(const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & a, const automaton::SinglePopNPDA < SymbolType, EpsilonType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + +template<class SymbolType, class StateType> +int AutomatonCompare::compare(const automaton::OneTapeDTM < SymbolType, StateType > & a, const automaton::OneTapeDTM < SymbolType, StateType > & b) { + if(!AutomatonCompare::testCompare(a, b)) { + AutomatonCompare::printCompare(a, b); + return 1; + } else { + return 0; + } +} + #endif /* AUTOMATON_COMPARE_H_ */