From efea7e7874e3105edad6d6949189029a755ca17c Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Fri, 20 Jun 2014 15:03:14 +0200 Subject: [PATCH] refactor parsers and composers --- alib2/src/alphabet/SymbolFeatures.h | 21 + alib2/src/alphabet/SymbolFromStringParser.cpp | 55 +- alib2/src/alphabet/SymbolFromStringParser.h | 20 +- alib2/src/alphabet/SymbolFromXMLParser.cpp | 52 +- alib2/src/alphabet/SymbolFromXMLParser.h | 43 +- .../src/automaton/AutomatonFromXMLParser.cpp | 18 + alib2/src/automaton/AutomatonFromXMLParser.h | 5 +- alib2/src/factory/AutomatonFactory.cpp | 2 +- alib2/src/factory/LabelFactory.cpp | 2 +- alib2/src/factory/RegExpFactory.cpp | 2 +- alib2/src/factory/StringFactory.cpp | 2 +- alib2/src/factory/SymbolFactory.cpp | 2 +- alib2/src/label/LabelFeatures.h | 21 + alib2/src/label/LabelFromStringParser.cpp | 52 +- alib2/src/label/LabelFromStringParser.h | 31 +- alib2/src/label/LabelFromXMLParser.cpp | 33 +- alib2/src/label/LabelFromXMLParser.h | 39 +- alib2/src/regexp/RegExpFromStringParser.cpp | 160 +++--- alib2/src/regexp/RegExpFromStringParser.h | 5 +- alib2/src/regexp/RegExpFromXMLParser.cpp | 54 +- alib2/src/regexp/RegExpFromXMLParser.h | 5 +- alib2/src/regexp/RegExpToXMLComposer.cpp | 10 +- alib2/src/string/String.cpp | 14 +- alib2/src/string/StringFromStringParser.cpp | 51 +- alib2/src/string/StringFromStringParser.h | 6 +- alib2/src/string/StringFromXMLParser.cpp | 68 ++- alib2/src/string/StringFromXMLParser.h | 9 +- alib2/src/string/StringToXMLComposer.cpp | 26 +- alib2/src/string/StringToXMLComposer.h | 1 - alib2/test-src/alphabet/SymbolTest.cpp | 452 +---------------- alib2/test-src/alphabet/SymbolTest.h | 2 - alib2/test-src/label/LabelTest.cpp | 14 +- alib2/test-src/regexp/RegExpTest.cpp | 14 +- alib2/test-src/string/StringTest.cpp | 470 +----------------- alib2/test-src/string/StringTest.h | 4 - 35 files changed, 604 insertions(+), 1161 deletions(-) create mode 100644 alib2/src/alphabet/SymbolFeatures.h create mode 100644 alib2/src/label/LabelFeatures.h diff --git a/alib2/src/alphabet/SymbolFeatures.h b/alib2/src/alphabet/SymbolFeatures.h new file mode 100644 index 0000000000..2219a4fb01 --- /dev/null +++ b/alib2/src/alphabet/SymbolFeatures.h @@ -0,0 +1,21 @@ +/* + * LabelFeatures.h + * + * Created on: Jun 19, 2014 + * Author: Jan Travnicek + */ + +#ifndef LABEL_FEATURES_H_ +#define LABEL_FEATURES_H_ + +namespace label { + +enum class FEATURES { + LABELED_SYMBOL, + BLANK_SYMBOL, + BOTTOM_OF_THE_STACK_SYMBOL +}; + +} /* namespace label */ + +#endif /* LABEL_FEATURES_H_ */ diff --git a/alib2/src/alphabet/SymbolFromStringParser.cpp b/alib2/src/alphabet/SymbolFromStringParser.cpp index 66a8635e1d..527fe7795f 100644 --- a/alib2/src/alphabet/SymbolFromStringParser.cpp +++ b/alib2/src/alphabet/SymbolFromStringParser.cpp @@ -10,40 +10,51 @@ SymbolFromStringParser::SymbolFromStringParser(std::stringstream& input) : m_Sym } -Symbol* SymbolFromStringParser::parse() { - SymbolFromStringLexer::Token token = m_SymbolLexer.next().token(); +Symbol SymbolFromStringParser::parse() { + SymbolFromStringLexer::Token token = m_SymbolLexer.token(); switch(token.type) { case SymbolFromStringLexer::TokenType::BLANK: - return new Symbol(BlankSymbol()); + return Symbol(BlankSymbol()); case SymbolFromStringLexer::TokenType::BOTTOM: - return new Symbol(BottomOfTheStackSymbol()); - case SymbolFromStringLexer::TokenType::ERROR: { - label::Label* label = m_LabelParser.parse(); - if(label != NULL) { - Symbol* res = new Symbol(LabeledSymbol(std::move(*label))); - delete label; - return res; - } else - return NULL; - } + return Symbol(BottomOfTheStackSymbol()); + case SymbolFromStringLexer::TokenType::ERROR: + return Symbol(LabeledSymbol(m_LabelParser.parse())); case SymbolFromStringLexer::TokenType::TEOF: - return NULL; + throw alib::AlibException(); } - return NULL; + throw alib::AlibException(); } -Symbol SymbolFromStringParser::parseSymbol() { - Symbol* symbol = parse(); - +Symbol SymbolFromStringParser::parseValue() { SymbolFromStringLexer::Token token = m_SymbolLexer.next().token(); - if(token.type == SymbolFromStringLexer::TokenType::TEOF && symbol != NULL) { - Symbol res = std::move(*symbol); - delete symbol; + if(token.type == SymbolFromStringLexer::TokenType::ERROR) { + m_LabelParser.m_Lexer.next(); + } + Symbol res = parse(); + + token = m_SymbolLexer.next().token(); + if(token.type == SymbolFromStringLexer::TokenType::TEOF) { return std::move(res); } else { - delete symbol; throw alib::AlibException(); } } +Symbol* SymbolFromStringParser::parsePointer() { + SymbolFromStringLexer::Token token = m_SymbolLexer.next().token(); + if(token.type == SymbolFromStringLexer::TokenType::BLANK || token.type == SymbolFromStringLexer::TokenType::BOTTOM) { + return new Symbol(parse()); + } else if(token.type == SymbolFromStringLexer::TokenType::ERROR) { + label::LabelFromStringLexer::Token token2 = m_LabelParser.m_Lexer.next().token(); + if(token2.type == label::LabelFromStringLexer::TokenType::STRING || token2.type == label::LabelFromStringLexer::TokenType::CHAR || token2.type == label::LabelFromStringLexer::TokenType::INTEGER) { + return new Symbol(parse()); + } else { + return NULL; + } + } else { + return NULL; + } + +} + } /* namespace alphabet */ diff --git a/alib2/src/alphabet/SymbolFromStringParser.h b/alib2/src/alphabet/SymbolFromStringParser.h index 4cc7d589f8..6115aef72d 100644 --- a/alib2/src/alphabet/SymbolFromStringParser.h +++ b/alib2/src/alphabet/SymbolFromStringParser.h @@ -14,6 +14,18 @@ #include "SymbolFromStringLexer.h" #include "../label/LabelFromStringParser.h" +namespace string { + +class StringFromStringParser; + +} /* namespace alphabet */ + +namespace regexp { + +class RegExpFromStringParser; + +} /* namespace regexp */ + namespace alphabet { class SymbolFromStringParser { @@ -21,11 +33,13 @@ class SymbolFromStringParser { SymbolFromStringLexer m_SymbolLexer; label::LabelFromStringParser m_LabelParser; + Symbol* parsePointer(); + Symbol parse(); public: SymbolFromStringParser(std::stringstream&); - Symbol* parse(); - Symbol parseSymbol(); - + Symbol parseValue(); + friend class string::StringFromStringParser; + friend class regexp::RegExpFromStringParser; }; } /* namespace alphabet */ diff --git a/alib2/src/alphabet/SymbolFromXMLParser.cpp b/alib2/src/alphabet/SymbolFromXMLParser.cpp index 650cd201cc..903d8fb56a 100644 --- a/alib2/src/alphabet/SymbolFromXMLParser.cpp +++ b/alib2/src/alphabet/SymbolFromXMLParser.cpp @@ -19,20 +19,50 @@ namespace alphabet { Symbol SymbolFromXMLParser::parse(std::list<sax::Token>& input) const { if(isToken(input, sax::Token::TokenType::START_ELEMENT, "LabeledSymbol")) { - popToken(input, sax::Token::TokenType::START_ELEMENT, "LabeledSymbol"); - label::Label data = alib::FromXMLParsers::labelParser.parse(input); - popToken(input, sax::Token::TokenType::END_ELEMENT, "LabeledSymbol"); - return Symbol(LabeledSymbol(data)); + return parseLabeledSymbol(input); } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "BlankSymbol")) { - popToken(input, sax::Token::TokenType::START_ELEMENT, "BlankSymbol"); - popToken(input, sax::Token::TokenType::END_ELEMENT, "BlankSymbol"); - return Symbol(BlankSymbol()); + return parseBlankSymbol(input); } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "BottomOfTheStackSymbol")) { - popToken(input, sax::Token::TokenType::START_ELEMENT, "BottomOfTheStackSymbol"); - popToken(input, sax::Token::TokenType::END_ELEMENT, "BottomOfTheStackSymbol"); - return Symbol(BlankSymbol()); + return parseBlankSymbol(input); } else { - throw sax::ParserException(sax::Token("", sax::Token::TokenType::START_ELEMENT), input.front()); + throw sax::ParserException(sax::Token("LabeledSymbol, BlankSymbol, BottomOfTheStackSymbol", sax::Token::TokenType::START_ELEMENT), input.front()); + } +} + +Symbol SymbolFromXMLParser::parseLabeledSymbol(std::list<sax::Token>& input) const { + popToken(input, sax::Token::TokenType::START_ELEMENT, "LabeledSymbol"); + label::Label data = alib::FromXMLParsers::labelParser.parse(input); + popToken(input, sax::Token::TokenType::END_ELEMENT, "LabeledSymbol"); + return Symbol(LabeledSymbol(data)); +} + +Symbol SymbolFromXMLParser::parseBlankSymbol(std::list<sax::Token>& input) const { + popToken(input, sax::Token::TokenType::START_ELEMENT, "BlankSymbol"); + popToken(input, sax::Token::TokenType::END_ELEMENT, "BlankSymbol"); + return Symbol(BlankSymbol()); +} + +Symbol SymbolFromXMLParser::parseBottomOfTheStackSymbol(std::list<sax::Token>& input) const { + popToken(input, sax::Token::TokenType::START_ELEMENT, "BottomOfTheStackSymbol"); + popToken(input, sax::Token::TokenType::END_ELEMENT, "BottomOfTheStackSymbol"); + return Symbol(BottomOfTheStackSymbol()); +} + +Symbol SymbolFromXMLParser::parseValue(std::list<sax::Token>& input) const { + Symbol res = parse(input); + + if(input.size() == 0) { + return res; + } else { + throw alib::AlibException(); + } +} + +Symbol* SymbolFromXMLParser::parsePointer(std::list<sax::Token>& input) const { + if(isToken(input, sax::Token::TokenType::START_ELEMENT, "LabeledSymbol") || isToken(input, sax::Token::TokenType::START_ELEMENT, "BlankSymbol") || isToken(input, sax::Token::TokenType::START_ELEMENT, "BottomOfTheStackSymbol")) { + return new Symbol(parse(input)); + } else { + return NULL; } } diff --git a/alib2/src/alphabet/SymbolFromXMLParser.h b/alib2/src/alphabet/SymbolFromXMLParser.h index 17089602eb..0761c30f8c 100644 --- a/alib2/src/alphabet/SymbolFromXMLParser.h +++ b/alib2/src/alphabet/SymbolFromXMLParser.h @@ -14,21 +14,54 @@ #include "../sax/Token.h" #include "../label/Label.h" +namespace string { + +class StringFromXMLParser; + +} /* namespace alphabet */ + +namespace regexp { + +class RegExpFromXMLParser; + +} /* namespace regexp */ + +namespace automaton { + +class AutomatonFromXMLParser; + +} /* namespace automaton */ + namespace alphabet { /** * Parser used to get String from XML parsed into list of tokens. */ class SymbolFromXMLParser : public sax::FromXMLParser { + Symbol parse(std::list<sax::Token>& input) const; + + Symbol parseLabeledSymbol(std::list<sax::Token>& input) const; + Symbol parseBlankSymbol(std::list<sax::Token>& input) const; + Symbol parseBottomOfTheStackSymbol(std::list<sax::Token>& input) const; + /** + * Parses the XML tokens and returns symbol. The input is destroyed in the process. + * @param input XML tokens represented as list of tokens + * @return Symbol* the parsed symbol or NULL when by first token it is not a symbol + * @throws ParserException when tokens do not represent Symbol but first token seemd as a symbol + */ + Symbol* parsePointer(std::list<sax::Token>& input) const; public: /** - * Parses the XML and returns regular expression. The input is destroyed in the process. - * @param input XML represented as list of tokens - * @return String - * @throws ParserException when an error occurs + * Parses the XML tokens and returns symbol. The input is destroyed in the process. + * @param input XML tokens represented as list of tokens + * @return Symbol the parsed symbol + * @throws ParserException when tokens do not represent Symbol */ - Symbol parse(std::list<sax::Token>& input) const; + Symbol parseValue(std::list<sax::Token>& input) const; + friend class string::StringFromXMLParser; + friend class regexp::RegExpFromXMLParser; + friend class automaton::AutomatonFromXMLParser; }; } /* namespace alphabet */ diff --git a/alib2/src/automaton/AutomatonFromXMLParser.cpp b/alib2/src/automaton/AutomatonFromXMLParser.cpp index 12d149bb70..7cd16f866f 100644 --- a/alib2/src/automaton/AutomatonFromXMLParser.cpp +++ b/alib2/src/automaton/AutomatonFromXMLParser.cpp @@ -15,6 +15,24 @@ namespace automaton { +Automaton AutomatonFromXMLParser::parseValue(std::list<sax::Token>& input) const { + Automaton res = parse(input); + + if(input.size() == 0) { + return res; + } else { + throw alib::AlibException(); + } +} + +Automaton* AutomatonFromXMLParser::parsePointer(std::list<sax::Token>& input) const { + if(isToken(input, sax::Token::TokenType::START_ELEMENT, "automaton") || isToken(input, sax::Token::TokenType::START_ELEMENT, "EpsilonNFA") || isToken(input, sax::Token::TokenType::START_ELEMENT, "NFA") || isToken(input, sax::Token::TokenType::START_ELEMENT, "DFA")) { + return new Automaton(parse(input)); + } else { + return NULL; + } +} + Automaton AutomatonFromXMLParser::parse(std::list<sax::Token> &input) const { if(isToken(input, sax::Token::TokenType::START_ELEMENT, "automaton")) return Automaton(parseUnknownAutomaton(input)); diff --git a/alib2/src/automaton/AutomatonFromXMLParser.h b/alib2/src/automaton/AutomatonFromXMLParser.h index cda6323585..743242e006 100644 --- a/alib2/src/automaton/AutomatonFromXMLParser.h +++ b/alib2/src/automaton/AutomatonFromXMLParser.h @@ -61,6 +61,9 @@ protected: alphabet::Symbol parseSymbolIO(std::list<sax::Token> &input) const; std::variant<string::Epsilon, alphabet::Symbol> parseEpsilonSymbolIO(std::list<sax::Token> &input) const; + + Automaton parse(std::list<sax::Token>& input) const; + Automaton* parsePointer(std::list<sax::Token>& input) const; public: /** * Parses the xml and returns the automaton. The input is destroyed in the process. @@ -68,7 +71,7 @@ public: * @return UnknownAutomaton * @throws ParserException when an error occurs */ - Automaton parse(std::list<sax::Token> &input) const; + Automaton parseValue(std::list<sax::Token> &input) const; UnknownAutomaton parseUnknownAutomaton(std::list<sax::Token>& input) const; EpsilonNFA parseEpsilonNFA(std::list<sax::Token>& input) const; diff --git a/alib2/src/factory/AutomatonFactory.cpp b/alib2/src/factory/AutomatonFactory.cpp index 8840a7e576..5c9db6d2f9 100644 --- a/alib2/src/factory/AutomatonFactory.cpp +++ b/alib2/src/factory/AutomatonFactory.cpp @@ -36,7 +36,7 @@ Automaton AutomatonFactory::fromStream(std::istream& in) { } Automaton AutomatonFactory::parse(std::list<sax::Token> tokens) { - return alib::FromXMLParsers::automatonParser.parse(tokens); + return alib::FromXMLParsers::automatonParser.parseValue(tokens); } void AutomatonFactory::toFile(const Automaton& automaton, const std::string& filename) { diff --git a/alib2/src/factory/LabelFactory.cpp b/alib2/src/factory/LabelFactory.cpp index f3f60ec401..806f3c8092 100644 --- a/alib2/src/factory/LabelFactory.cpp +++ b/alib2/src/factory/LabelFactory.cpp @@ -36,7 +36,7 @@ Label LabelFactory::fromStream(std::istream& in) { } Label LabelFactory::parse(std::list<sax::Token> tokens) { - return alib::FromXMLParsers::labelParser.parse(tokens); + return alib::FromXMLParsers::labelParser.parseValue(tokens); } void LabelFactory::toFile(const Label& symbol, const std::string& filename) { diff --git a/alib2/src/factory/RegExpFactory.cpp b/alib2/src/factory/RegExpFactory.cpp index 72235a3002..26ff3043f5 100644 --- a/alib2/src/factory/RegExpFactory.cpp +++ b/alib2/src/factory/RegExpFactory.cpp @@ -36,7 +36,7 @@ RegExp RegExpFactory::fromStream(std::istream& in) { } RegExp RegExpFactory::parse(std::list<sax::Token> tokens) { - return alib::FromXMLParsers::regexpParser.parse(tokens); + return alib::FromXMLParsers::regexpParser.parseValue(tokens); } void RegExpFactory::toFile(const RegExp& regexp, const std::string& filename) { diff --git a/alib2/src/factory/StringFactory.cpp b/alib2/src/factory/StringFactory.cpp index 13ff353bf2..008d49552c 100644 --- a/alib2/src/factory/StringFactory.cpp +++ b/alib2/src/factory/StringFactory.cpp @@ -36,7 +36,7 @@ String StringFactory::fromStream(std::istream& in) { } String StringFactory::parse(std::list<sax::Token> tokens) { - return alib::FromXMLParsers::stringParser.parse(tokens); + return alib::FromXMLParsers::stringParser.parseValue(tokens); } void StringFactory::toFile(const String& string, const std::string& filename) { diff --git a/alib2/src/factory/SymbolFactory.cpp b/alib2/src/factory/SymbolFactory.cpp index d007df997c..cd80ca0a3d 100644 --- a/alib2/src/factory/SymbolFactory.cpp +++ b/alib2/src/factory/SymbolFactory.cpp @@ -36,7 +36,7 @@ Symbol SymbolFactory::fromStream(std::istream& in) { } Symbol SymbolFactory::parse(std::list<sax::Token> tokens) { - return alib::FromXMLParsers::symbolParser.parse(tokens); + return alib::FromXMLParsers::symbolParser.parseValue(tokens); } void SymbolFactory::toFile(const Symbol& symbol, const std::string& filename) { diff --git a/alib2/src/label/LabelFeatures.h b/alib2/src/label/LabelFeatures.h new file mode 100644 index 0000000000..d821ce879a --- /dev/null +++ b/alib2/src/label/LabelFeatures.h @@ -0,0 +1,21 @@ +/* + * LabelFeatures.h + * + * Created on: Jun 19, 2014 + * Author: Jan Travnicek + */ + +#ifndef LABEL_FEATURES_H_ +#define LABEL_FEATURES_H_ + +namespace label { + +enum class FEATURES { + STRING, + CHAR, + INTEGER +}; + +} /* namespace label */ + +#endif /* LABEL_FEATURES_H_ */ diff --git a/alib2/src/label/LabelFromStringParser.cpp b/alib2/src/label/LabelFromStringParser.cpp index d172aef6bc..908a47125f 100644 --- a/alib2/src/label/LabelFromStringParser.cpp +++ b/alib2/src/label/LabelFromStringParser.cpp @@ -11,32 +11,48 @@ LabelFromStringParser::LabelFromStringParser(std::stringstream& input) : m_Lexer } -Label* LabelFromStringParser::parse() { +Label LabelFromStringParser::parse() { + return parse(std::set<FEATURES>({FEATURES::STRING, FEATURES::CHAR, FEATURES::INTEGER})); +} + +Label LabelFromStringParser::parse(const std::set<FEATURES>& features) { + LabelFromStringLexer::Token token = m_Lexer.token(); + switch(token.type) { + case LabelFromStringLexer::TokenType::TEOF: + throw alib::AlibException(); + case LabelFromStringLexer::TokenType::STRING: + if(!features.count(FEATURES::STRING)) throw alib::AlibException(); + return Label(label::StringLabel(token.value)); + case LabelFromStringLexer::TokenType::CHAR: + if(!features.count(FEATURES::CHAR)) throw alib::AlibException(); + return Label(label::CharacterLabel(token.value[0])); + case LabelFromStringLexer::TokenType::INTEGER: + if(!features.count(FEATURES::INTEGER)) throw alib::AlibException(); + return Label(label::IntegerLabel(std::stoi(token.value))); + case LabelFromStringLexer::TokenType::ERROR: + break; + } + throw alib::AlibException(); +} + +Label LabelFromStringParser::parseValue() { + m_Lexer.next(); + Label res = parse(); + LabelFromStringLexer::Token token = m_Lexer.next().token(); if(token.type == LabelFromStringLexer::TokenType::TEOF) { - return NULL; - } else if(token.type == LabelFromStringLexer::TokenType::STRING) { - return new label::Label(label::StringLabel(token.value)); - } else if(token.type == LabelFromStringLexer::TokenType::CHAR) { - return new label::Label(label::CharacterLabel(token.value[0])); - } else if(token.type == LabelFromStringLexer::TokenType::INTEGER) { - return new label::Label(label::IntegerLabel(std::stoi(token.value))); + return std::move(res); } else { - return NULL; + throw alib::AlibException(); } } -Label LabelFromStringParser::parseLabel() { - Label* label = parse(); - +Label* LabelFromStringParser::parsePointer() { LabelFromStringLexer::Token token = m_Lexer.next().token(); - if(token.type == LabelFromStringLexer::TokenType::TEOF && label != NULL) { - Label res = std::move(*label); - delete label; - return std::move(res); + if(token.type == LabelFromStringLexer::TokenType::STRING || token.type == LabelFromStringLexer::TokenType::CHAR || token.type == LabelFromStringLexer::TokenType::INTEGER) { + return new Label(parse()); } else { - delete label; - throw alib::AlibException(); + return NULL; } } diff --git a/alib2/src/label/LabelFromStringParser.h b/alib2/src/label/LabelFromStringParser.h index 8e2ee7c34b..3b36cdc4a6 100644 --- a/alib2/src/label/LabelFromStringParser.h +++ b/alib2/src/label/LabelFromStringParser.h @@ -9,19 +9,44 @@ #define LABEL_FROM_STRING_PARSER_H_ #include "Label.h" +#include "LabelFeatures.h" #include <vector> +#include <set> #include "LabelFromStringLexer.h" +namespace alphabet { + +class SymbolFromStringParser; + +} /* namespace alphabet */ + +namespace regexp { + +class RegExpFromStringParser; + +} /* namespace regexp */ + +namespace string { + +class StringFromStringParser; + +} /* namespace string */ + namespace label { class LabelFromStringParser { LabelFromStringLexer m_Lexer; + Label parse(const std::set<FEATURES>&); + Label parse(); + Label* parsePointer(); + public: LabelFromStringParser(std::stringstream&); - Label* parse(); - Label parseLabel(); - + Label parseValue(); + friend class alphabet::SymbolFromStringParser; + friend class regexp::RegExpFromStringParser; + friend class string::StringFromStringParser; }; } /* namespace label */ diff --git a/alib2/src/label/LabelFromXMLParser.cpp b/alib2/src/label/LabelFromXMLParser.cpp index 43995a545d..3b7ebdb4ae 100644 --- a/alib2/src/label/LabelFromXMLParser.cpp +++ b/alib2/src/label/LabelFromXMLParser.cpp @@ -15,23 +15,48 @@ namespace label { Label LabelFromXMLParser::parse(std::list<sax::Token>& input) const { + return parse(input, std::set<FEATURES>({FEATURES::STRING, FEATURES::CHAR, FEATURES::INTEGER})); +} + +Label LabelFromXMLParser::parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const { if(isToken(input, sax::Token::TokenType::START_ELEMENT, "IntegerLabel")) { + if(!features.count(FEATURES::INTEGER)) throw alib::AlibException(); popToken(input, sax::Token::TokenType::START_ELEMENT, "IntegerLabel"); - label::Label data = Label(IntegerLabel(std::stoi(popTokenData(input, sax::Token::TokenType::CHARACTER)))); + Label data(IntegerLabel(std::stoi(popTokenData(input, sax::Token::TokenType::CHARACTER)))); popToken(input, sax::Token::TokenType::END_ELEMENT, "IntegerLabel"); return data; } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "StringLabel")) { + if(!features.count(FEATURES::STRING)) throw alib::AlibException(); popToken(input, sax::Token::TokenType::START_ELEMENT, "StringLabel"); - label::Label data = Label(StringLabel(popTokenData(input, sax::Token::TokenType::CHARACTER))); + Label data(StringLabel(popTokenData(input, sax::Token::TokenType::CHARACTER))); popToken(input, sax::Token::TokenType::END_ELEMENT, "StringLabel"); return data; } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "CharacterLabel")) { + if(!features.count(FEATURES::CHAR)) throw alib::AlibException(); popToken(input, sax::Token::TokenType::START_ELEMENT, "CharacterLabel"); - label::Label data = Label(CharacterLabel(popTokenData(input, sax::Token::TokenType::CHARACTER)[0])); + Label data(CharacterLabel(popTokenData(input, sax::Token::TokenType::CHARACTER)[0])); popToken(input, sax::Token::TokenType::END_ELEMENT, "CharacterLabel"); return data; } else { - throw sax::ParserException(sax::Token("", sax::Token::TokenType::START_ELEMENT), input.front()); + throw sax::ParserException(sax::Token("IntegerLabel, StringLabel, CharacterLabel", sax::Token::TokenType::START_ELEMENT), input.front()); + } +} + +Label LabelFromXMLParser::parseValue(std::list<sax::Token>& input) const { + Label label = parse(input); + + if(input.size() == 0) { + return std::move(label); + } else { + throw new alib::AlibException(); + } +} + +Label* LabelFromXMLParser::parsePointer(std::list<sax::Token>& input) const { + if(isToken(input, sax::Token::TokenType::START_ELEMENT, "IntegerLabel") || isToken(input, sax::Token::TokenType::START_ELEMENT, "StringLabel") || isToken(input, sax::Token::TokenType::START_ELEMENT, "CharacterLabel")) { + return new Label(parse(input)); + } else { + return NULL; } } diff --git a/alib2/src/label/LabelFromXMLParser.h b/alib2/src/label/LabelFromXMLParser.h index 2f5fa2b02d..4374f6534a 100644 --- a/alib2/src/label/LabelFromXMLParser.h +++ b/alib2/src/label/LabelFromXMLParser.h @@ -10,25 +10,50 @@ #include "../sax/FromXMLParser.h" #include <vector> +#include <set> #include "Label.h" +#include "LabelFeatures.h" #include "../sax/Token.h" #include "../label/Label.h" +namespace alphabet { + +class SymbolFromXMLParser; + +} /* namespace alphabet */ + +namespace automaton { + +class AutomatonFromXMLParser; + +} /* namespace automaton */ + namespace label { /** - * Parser used to get String from XML parsed into list of tokens. + * Parser used to transform sequence of xml tokens to internal representation of Label. */ class LabelFromXMLParser : public sax::FromXMLParser { + Label parse(std::list<sax::Token>& input, const std::set<FEATURES>&) const; + Label parse(std::list<sax::Token>& input) const; + + /** + * Parses the XML tokens and returns label. The input is destroyed in the process. + * @param input XML tokens represented as list of tokens + * @return Label* the parsed label or NULL when by first token it is not a label + * @throws ParserException when tokens do not represent Label but first token seemd as a label + */ + Label* parsePointer(std::list<sax::Token>& input) const; public: /** - * Parses the XML and returns regular expression. The input is destroyed in the process. - * @param input XML represented as list of tokens - * @return String - * @throws ParserException when an error occurs + * Parses the XML tokens and returns label. The input is destroyed in the process. + * @param input XML tokens represented as list of tokens + * @return Label the parsed label + * @throws ParserException when tokens do not represent Label */ - Label parse(std::list<sax::Token>& input) const; - + Label parseValue(std::list<sax::Token>& input) const; + friend class alphabet::SymbolFromXMLParser; + friend class automaton::AutomatonFromXMLParser; }; } /* namespace label */ diff --git a/alib2/src/regexp/RegExpFromStringParser.cpp b/alib2/src/regexp/RegExpFromStringParser.cpp index 296bfb5a43..d94b4169d4 100644 --- a/alib2/src/regexp/RegExpFromStringParser.cpp +++ b/alib2/src/regexp/RegExpFromStringParser.cpp @@ -8,57 +8,81 @@ RegExpFromStringParser::RegExpFromStringParser(std::stringstream& input) : m_Reg } -RegExp* RegExpFromStringParser::parse() { - m_RegexpLexer.next(); +RegExp RegExpFromStringParser::parse() { RegExpElement* element = this->alternation(); - if(element != NULL) { - RegExp* regexp = new RegExp(std::move(*element)); - delete element; - return regexp; - } else { - return NULL; - } + RegExp regexp(std::move(*element)); + delete element; + return regexp; } -RegExp RegExpFromStringParser::parseRegexp() { - RegExp* regexp = parse(); +RegExp RegExpFromStringParser::parseValue() { + RegExpFromStringLexer::Token token = m_RegexpLexer.next().token(); + if(token.type == RegExpFromStringLexer::TokenType::ERROR) { + alphabet::SymbolFromStringLexer::Token token = m_SymbolParser.m_SymbolLexer.next().token(); + if(token.type == alphabet::SymbolFromStringLexer::TokenType::ERROR) { + m_SymbolParser.m_LabelParser.m_Lexer.next(); + } + } + RegExp res = parse(); - RegExpFromStringLexer::Token token = m_RegexpLexer.token(); - if(token.type == RegExpFromStringLexer::TokenType::TEOF && regexp != NULL) { - RegExp res = std::move(*regexp); - delete regexp; + token = m_RegexpLexer.token(); + if(token.type == RegExpFromStringLexer::TokenType::TEOF) { return std::move(res); } else { - delete regexp; throw alib::AlibException(); } } - -RegExpElement* RegExpFromStringParser::alternation() { - RegExpElement* concatenation = this->concatenation(); - if(concatenation != NULL) { - return this->alternationCont(concatenation); +RegExp* RegExpFromStringParser::parsePointer() { + RegExpFromStringLexer::Token token = m_RegexpLexer.next().token(); + if(token.type == RegExpFromStringLexer::TokenType::EMPTY || token.type == RegExpFromStringLexer::TokenType::EPS || token.type == RegExpFromStringLexer::TokenType::LPAR) { + return new RegExp(parse()); + } else if(token.type == RegExpFromStringLexer::TokenType::ERROR) { + alphabet::SymbolFromStringLexer::Token token = m_SymbolParser.m_SymbolLexer.next().token(); + if(token.type == alphabet::SymbolFromStringLexer::TokenType::BLANK) { + return new RegExp(parse()); + } else if(token.type == alphabet::SymbolFromStringLexer::TokenType::ERROR) { + label::LabelFromStringLexer::Token token = m_SymbolParser.m_LabelParser.m_Lexer.next().token(); + if(token.type == label::LabelFromStringLexer::TokenType::STRING || token.type == label::LabelFromStringLexer::TokenType::CHAR || token.type == label::LabelFromStringLexer::TokenType::INTEGER) { + return new RegExp(parse()); + } else { + return NULL; + } + } else { + return NULL; + } } else { return NULL; } + +} + +RegExpElement* RegExpFromStringParser::alternation() { + return this->alternationCont(this->concatenation()); } RegExpElement* RegExpFromStringParser::alternationCont(RegExpElement* left) { RegExpFromStringLexer::Token token = m_RegexpLexer.token(); if(token.type == RegExpFromStringLexer::TokenType::PLUS) { - m_RegexpLexer.next(); + RegExpFromStringLexer::Token token = m_RegexpLexer.next().token(); + if(token.type == RegExpFromStringLexer::TokenType::ERROR) { + alphabet::SymbolFromStringLexer::Token token = m_SymbolParser.m_SymbolLexer.next().token(); + if(token.type == alphabet::SymbolFromStringLexer::TokenType::ERROR) { + m_SymbolParser.m_LabelParser.m_Lexer.next(); + } + } - RegExpElement* right = this->concatenation(); - if(right != NULL) { + try { + RegExpElement* right = this->concatenation(); Alternation* res = new Alternation(std::move(*left), std::move(*right)); - - delete left; delete right; + delete left; + left = NULL; + return this->alternationContCont(res); - } else { + } catch (...) { delete left; - return NULL; + throw; } } else { return left; @@ -68,17 +92,24 @@ RegExpElement* RegExpFromStringParser::alternationCont(RegExpElement* left) { RegExpElement* RegExpFromStringParser::alternationContCont(Alternation* res) { RegExpFromStringLexer::Token token = m_RegexpLexer.token(); if(token.type == RegExpFromStringLexer::TokenType::PLUS) { - m_RegexpLexer.next(); + RegExpFromStringLexer::Token token = m_RegexpLexer.next().token(); + if(token.type == RegExpFromStringLexer::TokenType::ERROR) { + alphabet::SymbolFromStringLexer::Token token = m_SymbolParser.m_SymbolLexer.next().token(); + if(token.type == alphabet::SymbolFromStringLexer::TokenType::ERROR) { + m_SymbolParser.m_LabelParser.m_Lexer.next(); + } + } - RegExpElement* next = this->concatenation(); - if(next != NULL) { + try { + RegExpElement* next = this->concatenation(); res->appendElement(std::move(*next)); delete next; - } else { - return NULL; - } - return this->alternationContCont(res); + return this->alternationContCont(res); + } catch (...) { + delete res; + throw; + } } else { return res; } @@ -86,28 +117,24 @@ RegExpElement* RegExpFromStringParser::alternationContCont(Alternation* res) { RegExpElement* RegExpFromStringParser::concatenation() { - RegExpElement* factor = this->factor(); - if(factor != NULL) { - return this->concatenationCont(factor); - } else { - return NULL; - } + return this->concatenationCont(this->factor()); } RegExpElement* RegExpFromStringParser::concatenationCont(RegExpElement* left) { RegExpFromStringLexer::Token token = m_RegexpLexer.token(); if(token.type == RegExpFromStringLexer::TokenType::ERROR || token.type == RegExpFromStringLexer::TokenType::LPAR || token.type == RegExpFromStringLexer::TokenType::EPS || token.type == RegExpFromStringLexer::TokenType::EMPTY) { - RegExpElement* right = this->factor(); - if(right != NULL) { + try { + RegExpElement* right = this->factor(); Concatenation* res = new Concatenation(std::move(*left), std::move(*right)); - - delete left; delete right; + delete left; + left = NULL; + return this->concatenationContCont(res); - } else { + } catch (...) { delete left; - return NULL; + throw; } } else { return left; @@ -118,14 +145,16 @@ RegExpElement* RegExpFromStringParser::concatenationContCont(Concatenation* res) RegExpFromStringLexer::Token token = m_RegexpLexer.token(); if(token.type == RegExpFromStringLexer::TokenType::ERROR || token.type == RegExpFromStringLexer::TokenType::LPAR || token.type == RegExpFromStringLexer::TokenType::EPS || token.type == RegExpFromStringLexer::TokenType::EMPTY) { - RegExpElement* next = this->factor(); - if(next != NULL) { + try { + RegExpElement* next = this->factor(); res->appendElement(std::move(*next)); delete next; - } else { - return NULL; + + return this->concatenationContCont(res); + } catch (...) { + delete res; + throw; } - return this->concatenationContCont(res); } else { return res; } @@ -134,30 +163,37 @@ RegExpElement* RegExpFromStringParser::concatenationContCont(Concatenation* res) RegExpElement* RegExpFromStringParser::factor() { RegExpFromStringLexer::Token token = m_RegexpLexer.token(); if(token.type == RegExpFromStringLexer::TokenType::LPAR) { - m_RegexpLexer.next(); + RegExpFromStringLexer::Token token = m_RegexpLexer.next().token(); + if(token.type == RegExpFromStringLexer::TokenType::ERROR) { + alphabet::SymbolFromStringLexer::Token token = m_SymbolParser.m_SymbolLexer.next().token(); + if(token.type == alphabet::SymbolFromStringLexer::TokenType::ERROR) { + m_SymbolParser.m_LabelParser.m_Lexer.next(); + } + } RegExpElement* base = this->alternation(); token = m_RegexpLexer.token(); - if(token.type != RegExpFromStringLexer::TokenType::RPAR) return NULL; + if(token.type != RegExpFromStringLexer::TokenType::RPAR) throw alib::AlibException(); return this->star(base); } else if(token.type == RegExpFromStringLexer::TokenType::EPS) { return this->star(new RegExpEpsilon()); } else if(token.type == RegExpFromStringLexer::TokenType::EMPTY) { return this->star(new RegExpEmpty()); } else if(token.type == RegExpFromStringLexer::TokenType::ERROR) { - alphabet::Symbol* symbol = m_SymbolParser.parse(); - if(symbol != NULL) { - RegExpSymbol* res = new RegExpSymbol(std::move(*symbol)); - delete symbol; - return this->star(res); - } else - return NULL; + RegExpSymbol* res = new RegExpSymbol(m_SymbolParser.parse()); + return this->star(res); } else { - return NULL; + throw alib::AlibException(); } } RegExpElement* RegExpFromStringParser::star(RegExpElement* elem) { RegExpFromStringLexer::Token token = m_RegexpLexer.next().token(); + if(token.type == RegExpFromStringLexer::TokenType::ERROR) { + alphabet::SymbolFromStringLexer::Token token = m_SymbolParser.m_SymbolLexer.next().token(); + if(token.type == alphabet::SymbolFromStringLexer::TokenType::ERROR) { + m_SymbolParser.m_LabelParser.m_Lexer.next(); + } + } if(token.type == RegExpFromStringLexer::TokenType::STAR) { Iteration* iter = new Iteration(std::move(*elem)); delete elem; diff --git a/alib2/src/regexp/RegExpFromStringParser.h b/alib2/src/regexp/RegExpFromStringParser.h index 910ce2821e..f7775f82bb 100644 --- a/alib2/src/regexp/RegExpFromStringParser.h +++ b/alib2/src/regexp/RegExpFromStringParser.h @@ -31,10 +31,11 @@ class RegExpFromStringParser { RegExpFromStringLexer m_RegexpLexer; alphabet::SymbolFromStringParser m_SymbolParser; + RegExp parse(); + RegExp* parsePointer(); public: RegExpFromStringParser(std::stringstream&); - RegExp* parse(); - RegExp parseRegexp(); + RegExp parseValue(); }; diff --git a/alib2/src/regexp/RegExpFromXMLParser.cpp b/alib2/src/regexp/RegExpFromXMLParser.cpp index 9aa1028697..9d29abb388 100644 --- a/alib2/src/regexp/RegExpFromXMLParser.cpp +++ b/alib2/src/regexp/RegExpFromXMLParser.cpp @@ -9,6 +9,8 @@ #include "../sax/ParserException.h" #include "../label/StringLabel.h" +#include "../FromXMLParsers.h" + namespace regexp { RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input) const { @@ -17,31 +19,43 @@ RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input) const { RegExp regexp; parseAlphabet(input, regexp); - if(isTokenType(input, sax::Token::TokenType::START_ELEMENT)) { - RegExpElement* element = parseElement(input); - regexp.setRegExp(std::move(*element)); - delete element; - } + RegExpElement* element = parseElement(input); + regexp.setRegExp(std::move(*element)); + delete element; popToken(input, sax::Token::TokenType::END_ELEMENT, "regexp"); return regexp; } +RegExp RegExpFromXMLParser::parseValue(std::list<sax::Token>& input) const { + RegExp res = parse(input); + + if(input.size() == 0) { + return res; + } else { + throw alib::AlibException(); + } +} + +RegExp* RegExpFromXMLParser::parsePointer(std::list<sax::Token>& input) const { + if(isToken(input, sax::Token::TokenType::START_ELEMENT, "regexp")) { + return new RegExp(parse(input)); + } else { + return NULL; + } +} + void RegExpFromXMLParser::parseAlphabet(std::list<sax::Token> &input, RegExp& regexp) const { popToken(input, sax::Token::TokenType::START_ELEMENT, "alphabet"); - while (isToken(input, sax::Token::TokenType::START_ELEMENT, "symbol")) { - alphabet::Symbol* symbol = parseSymbol<alphabet::Symbol>(input); - regexp.addSymbolToAlphabet(*symbol); - delete symbol; + while (isTokenType(input, sax::Token::TokenType::START_ELEMENT)) { + regexp.addSymbolToAlphabet(alib::FromXMLParsers::symbolParser.parse(input)); } popToken(input, sax::Token::TokenType::END_ELEMENT, "alphabet"); } RegExpElement* RegExpFromXMLParser::parseElement(std::list<sax::Token>& input) const { - if (isToken(input, sax::Token::TokenType::START_ELEMENT, "symbol")) { - return parseSymbol<RegExpSymbol>(input); - } else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "empty")) { + if (isToken(input, sax::Token::TokenType::START_ELEMENT, "empty")) { return parseEmpty(input); } else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "epsilon")) { return parseEpsilon(input); @@ -52,7 +66,7 @@ RegExpElement* RegExpFromXMLParser::parseElement(std::list<sax::Token>& input) c } else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "concatenation")) { return parseConcatenation(input); } else { - return NULL; + return new RegExpSymbol(alib::FromXMLParsers::symbolParser.parse(input)); } } @@ -60,9 +74,7 @@ Alternation* RegExpFromXMLParser::parseAlternation(std::list<sax::Token>& input) popToken(input, sax::Token::TokenType::START_ELEMENT, "alternation"); RegExpElement* element1 = parseElement(input); - if(!element1) throw alib::AlibException("Not enought elements in alternation"); RegExpElement* element2 = parseElement(input); - if(!element2) throw alib::AlibException("Not enought elements in alternation"); Alternation* alternation = new Alternation(std::move(*element1), std::move(*element2)); delete element1; @@ -82,9 +94,7 @@ Concatenation* RegExpFromXMLParser::parseConcatenation(std::list<sax::Token>& in popToken(input, sax::Token::TokenType::START_ELEMENT, "concatenation"); RegExpElement* element1 = parseElement(input); - if(!element1) throw alib::AlibException("Not enought elements in concatenation"); RegExpElement* element2 = parseElement(input); - if(!element2) throw alib::AlibException("Not enought elements in concatenation"); Concatenation* concatenation = new Concatenation(std::move(*element1), std::move(*element2)); delete element1; @@ -105,7 +115,6 @@ Iteration* RegExpFromXMLParser::parseIteration(std::list<sax::Token>& input) con popToken(input, sax::Token::TokenType::START_ELEMENT, "iteration"); RegExpElement* element = parseElement(input); - if(!element) throw sax::ParserException(sax::Token("", sax::Token::TokenType::CHARACTER), input.front()); Iteration* iteration = new Iteration(std::move(*element)); delete element; @@ -131,14 +140,5 @@ RegExpEmpty* RegExpFromXMLParser::parseEmpty(std::list<sax::Token>& input) const return empty; } -template <class T> -T* RegExpFromXMLParser::parseSymbol(std::list<sax::Token>& input) const { - popToken(input, sax::Token::TokenType::START_ELEMENT, "symbol"); - - T* symbol = new T(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel(popTokenData(input, sax::Token::TokenType::CHARACTER)))))); - popToken(input, sax::Token::TokenType::END_ELEMENT, "symbol"); - return symbol; -} - } /* namespace regexp */ diff --git a/alib2/src/regexp/RegExpFromXMLParser.h b/alib2/src/regexp/RegExpFromXMLParser.h index d5097dbe02..6ce576a756 100644 --- a/alib2/src/regexp/RegExpFromXMLParser.h +++ b/alib2/src/regexp/RegExpFromXMLParser.h @@ -26,11 +26,12 @@ class RegExpFromXMLParser : public sax::FromXMLParser { RegExpEpsilon* parseEpsilon(std::list<sax::Token>& input) const; RegExpEmpty* parseEmpty(std::list<sax::Token>& input) const; - template <class T> T* parseSymbol(std::list<sax::Token> &input) const; Iteration* parseIteration(std::list<sax::Token> &input) const; Alternation* parseAlternation(std::list<sax::Token> &input) const; Concatenation* parseConcatenation(std::list<sax::Token> &input) const; + RegExp parse(std::list<sax::Token>& input) const; + RegExp* parsePointer(std::list<sax::Token>& input) const; public: /** * Parses the XML and returns regular expression. The input is destroyed in the process. @@ -38,7 +39,7 @@ public: * @return RegExp * @throws ParserException when an error occurs */ - RegExp parse(std::list<sax::Token>& input) const; + RegExp parseValue(std::list<sax::Token>& input) const; }; } /* namespace regexp */ diff --git a/alib2/src/regexp/RegExpToXMLComposer.cpp b/alib2/src/regexp/RegExpToXMLComposer.cpp index 965c5f20dd..dabb628930 100644 --- a/alib2/src/regexp/RegExpToXMLComposer.cpp +++ b/alib2/src/regexp/RegExpToXMLComposer.cpp @@ -7,6 +7,8 @@ #include "RegExpToXMLComposer.h" +#include "../ToXMLComposers.h" + namespace regexp { void RegExpToXMLComposer::Visit(void* userData, const RegExp& regexp) const { @@ -16,9 +18,7 @@ void RegExpToXMLComposer::Visit(void* userData, const RegExp& regexp) const { { out.push_back(sax::Token("alphabet", sax::Token::TokenType::START_ELEMENT)); for (const auto& symbol: regexp.getAlphabet()) { - out.push_back(sax::Token("symbol", sax::Token::TokenType::START_ELEMENT)); - out.push_back(sax::Token((std::string) symbol, sax::Token::TokenType::CHARACTER)); - out.push_back(sax::Token("symbol", sax::Token::TokenType::END_ELEMENT)); + out.splice(out.end(), alib::ToXMLComposers::symbolComposer.compose(symbol)); } out.push_back(sax::Token("alphabet", sax::Token::TokenType::END_ELEMENT)); } @@ -65,9 +65,7 @@ void RegExpToXMLComposer::Visit(void* userData, const Iteration& iteration) cons void RegExpToXMLComposer::Visit(void* userData, const RegExpSymbol& symbol) const { std::list<sax::Token> &out = *((std::list<sax::Token>*) userData); - out.push_back(sax::Token("symbol", sax::Token::TokenType::START_ELEMENT)); - out.push_back(sax::Token((std::string) symbol.getSymbol(), sax::Token::TokenType::CHARACTER)); - out.push_back(sax::Token("symbol", sax::Token::TokenType::END_ELEMENT)); + out.splice(out.end(), alib::ToXMLComposers::symbolComposer.compose(symbol.getSymbol())); } void RegExpToXMLComposer::Visit(void* userData, const RegExpEpsilon&) const { diff --git a/alib2/src/string/String.cpp b/alib2/src/string/String.cpp index 2fd1cfc4f0..82a51d3dd5 100644 --- a/alib2/src/string/String.cpp +++ b/alib2/src/string/String.cpp @@ -12,29 +12,25 @@ namespace string { -String::String() { +String::String() : string(NULL) { setString(Epsilon()); } -String::String(const std::set<alphabet::Symbol>& alphabet, const StringBase& string) : alphabet(alphabet) { - this->string = NULL; +String::String(const std::set<alphabet::Symbol>& alphabet, const StringBase& string) : string(NULL), alphabet(alphabet) { setString(string); } -String::String(std::set<alphabet::Symbol>&& alphabet, StringBase&& string) : alphabet(alphabet) { - this->string = NULL; +String::String(std::set<alphabet::Symbol>&& alphabet, StringBase&& string) : string(NULL), alphabet(alphabet) { setString(std::move(string)); } -String::String(const StringBase& string) { +String::String(const StringBase& string) : string(NULL) { string.computeMinimalAlphabet(alphabet); - this->string = NULL; setString(string); } -String::String(StringBase&& string) { +String::String(StringBase&& string) : string(NULL) { string.computeMinimalAlphabet(alphabet); - this->string = NULL; setString(string); } diff --git a/alib2/src/string/StringFromStringParser.cpp b/alib2/src/string/StringFromStringParser.cpp index d93d79e0e8..84c127dffd 100644 --- a/alib2/src/string/StringFromStringParser.cpp +++ b/alib2/src/string/StringFromStringParser.cpp @@ -13,54 +13,63 @@ StringFromStringParser::StringFromStringParser(std::stringstream& input) : m_Str } -String* StringFromStringParser::parse() { - StringFromStringLexer::Token token = m_StringLexer.next().token(); +String StringFromStringParser::parse() { + StringFromStringLexer::Token token = m_StringLexer.token(); if(token.type == StringFromStringLexer::TokenType::EPSILON) { - return new String(Epsilon()); + return String(Epsilon()); } else if(token.type == StringFromStringLexer::TokenType::LESS) { std::vector<alphabet::Symbol> data = parseContent(); - StringFromStringLexer::Token token = m_StringLexer.next().token(); if(token.type == StringFromStringLexer::TokenType::GREATER) { - return new String(CyclicString(data)); + return String(CyclicString(data)); } else { - return NULL; + throw alib::AlibException(); } } else if(token.type == StringFromStringLexer::TokenType::QUOTE) { std::vector<alphabet::Symbol> data = parseContent(); - StringFromStringLexer::Token token = m_StringLexer.next().token(); if(token.type == StringFromStringLexer::TokenType::QUOTE) { - return new String(LinearString(data)); + return String(LinearString(data)); } else { - return NULL; + throw alib::AlibException(); } } else { - return NULL; + throw alib::AlibException(); } } -String StringFromStringParser::parseString() { - String* string = parse(); +String StringFromStringParser::parseValue() { + m_StringLexer.next(); + String res = parse(); StringFromStringLexer::Token token = m_StringLexer.next().token(); - if(token.type == StringFromStringLexer::TokenType::TEOF && string != NULL) { - String res = std::move(*string); - delete string; + if(token.type == StringFromStringLexer::TokenType::TEOF) { return std::move(res); } else { - delete string; throw alib::AlibException(); } } +String* StringFromStringParser::parsePointer() { + StringFromStringLexer::Token token = m_StringLexer.next().token(); + if(token.type == StringFromStringLexer::TokenType::EPSILON || token.type == StringFromStringLexer::TokenType::LESS || token.type == StringFromStringLexer::TokenType::QUOTE) { + return new String(parse()); + } else { + return NULL; + } +} + std::vector<alphabet::Symbol> StringFromStringParser::parseContent() { std::vector<alphabet::Symbol> data; - alphabet::Symbol* symbol; do { - symbol = m_SymbolParser.parse(); - if(symbol == NULL) + StringFromStringLexer::Token token = m_StringLexer.next().token(); + if(token.type == StringFromStringLexer::TokenType::ERROR) { + alphabet::SymbolFromStringLexer::Token token = m_SymbolParser.m_SymbolLexer.next().token(); + if(token.type == alphabet::SymbolFromStringLexer::TokenType::ERROR) { + m_SymbolParser.m_LabelParser.m_Lexer.next(); + } + } + if(token.type == StringFromStringLexer::TokenType::GREATER || token.type == StringFromStringLexer::TokenType::QUOTE) return data; - data.push_back(std::move(*symbol)); - delete symbol; + data.push_back(m_SymbolParser.parse()); } while(true); } diff --git a/alib2/src/string/StringFromStringParser.h b/alib2/src/string/StringFromStringParser.h index f9c06ee867..04935b2121 100644 --- a/alib2/src/string/StringFromStringParser.h +++ b/alib2/src/string/StringFromStringParser.h @@ -22,10 +22,12 @@ class StringFromStringParser { StringFromStringLexer m_StringLexer; alphabet::SymbolFromStringParser m_SymbolParser; + + String parse(); + String* parsePointer(); public: StringFromStringParser(std::stringstream&); - String* parse(); - String parseString(); + String parseValue(); }; diff --git a/alib2/src/string/StringFromXMLParser.cpp b/alib2/src/string/StringFromXMLParser.cpp index 5e82426754..3da9e1b566 100644 --- a/alib2/src/string/StringFromXMLParser.cpp +++ b/alib2/src/string/StringFromXMLParser.cpp @@ -10,51 +10,75 @@ #include "Epsilon.h" #include "LinearString.h" #include "CyclicString.h" -#include "../label/StringLabel.h" -#include "../label/Label.h" -#include "../alphabet/LabeledSymbol.h" + +#include "../FromXMLParsers.h" namespace string { String StringFromXMLParser::parse(std::list<sax::Token>& input) const { + popToken(input, sax::Token::TokenType::START_ELEMENT, "string"); + + String string; + parseAlphabet(input, string); + parseContent(input, string); + + popToken(input, sax::Token::TokenType::END_ELEMENT, "string"); + + return string; +} + +void StringFromXMLParser::parseContent(std::list<sax::Token>& input, String& string) const { if(isToken(input, sax::Token::TokenType::START_ELEMENT, "Epsilon")) { popToken(input, sax::Token::TokenType::START_ELEMENT, "Epsilon"); popToken(input, sax::Token::TokenType::END_ELEMENT, "Epsilon"); - return String(Epsilon()); + string.setString(Epsilon()); } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "LinearString")) { popToken(input, sax::Token::TokenType::START_ELEMENT, "LinearString"); - std::vector<alphabet::Symbol> data = parseContent(input); + std::vector<alphabet::Symbol> data = parseContentData(input); popToken(input, sax::Token::TokenType::END_ELEMENT, "LinearString"); - return String(LinearString(data)); + string.setString(LinearString(data)); } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "CyclicString")) { popToken(input, sax::Token::TokenType::START_ELEMENT, "CyclicString"); - std::vector<alphabet::Symbol> data = parseContent(input); + std::vector<alphabet::Symbol> data = parseContentData(input); popToken(input, sax::Token::TokenType::END_ELEMENT, "CyclicString"); - return String(LinearString(data)); + string.setString(CyclicString(data)); } else { - throw sax::ParserException(sax::Token("", sax::Token::TokenType::START_ELEMENT), input.front()); + throw sax::ParserException(sax::Token("Epsilon, LinearString, CyclicString", sax::Token::TokenType::START_ELEMENT), input.front()); } } -std::vector<alphabet::Symbol> StringFromXMLParser::parseContent(std::list<sax::Token>& input) const { - std::vector<alphabet::Symbol> data; - while (isToken(input, sax::Token::TokenType::START_ELEMENT, "Symbol")) { - data.push_back(parseSymbol(input)); +void StringFromXMLParser::parseAlphabet(std::list<sax::Token> &input, String& string) const { + popToken(input, sax::Token::TokenType::START_ELEMENT, "alphabet"); + while (isTokenType(input, sax::Token::TokenType::START_ELEMENT)) { + string.addSymbolToAlphabet(alib::FromXMLParsers::symbolParser.parse(input)); } - return data; + popToken(input, sax::Token::TokenType::END_ELEMENT, "alphabet"); } -alphabet::Symbol StringFromXMLParser::parseSymbol(std::list<sax::Token>& input) const { - popToken(input, sax::Token::TokenType::START_ELEMENT, "Symbol"); +String StringFromXMLParser::parseValue(std::list<sax::Token>& input) const { + String res = parse(input); - if (input.front().getType() == sax::Token::TokenType::CHARACTER) { - alphabet::Symbol symbol = alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel(input.front().getData())))); - input.pop_front(); - popToken(input, sax::Token::TokenType::END_ELEMENT, "Symbol"); - return symbol; + if(input.size() == 0) { + return res; } else { - throw sax::ParserException(sax::Token("", sax::Token::TokenType::CHARACTER), input.front()); + throw alib::AlibException(); } } +String* StringFromXMLParser::parsePointer(std::list<sax::Token>& input) const { + if(isToken(input, sax::Token::TokenType::START_ELEMENT, "Epsilon") || isToken(input, sax::Token::TokenType::START_ELEMENT, "LinearString") || isToken(input, sax::Token::TokenType::START_ELEMENT, "CyclicString")) { + return new String(parse(input)); + } else { + return NULL; + } +} + +std::vector<alphabet::Symbol> StringFromXMLParser::parseContentData(std::list<sax::Token>& input) const { + std::vector<alphabet::Symbol> data; + while (isTokenType(input, sax::Token::TokenType::START_ELEMENT)) { + data.push_back(alib::FromXMLParsers::symbolParser.parse(input)); + } + return data; +} + } /* namespace string */ diff --git a/alib2/src/string/StringFromXMLParser.h b/alib2/src/string/StringFromXMLParser.h index 6eccc37f4c..66301d2863 100644 --- a/alib2/src/string/StringFromXMLParser.h +++ b/alib2/src/string/StringFromXMLParser.h @@ -20,9 +20,12 @@ namespace string { * Parser used to get String from XML parsed into list of tokens. */ class StringFromXMLParser : public sax::FromXMLParser { - std::vector<alphabet::Symbol> parseContent(std::list<sax::Token>& input) const; - alphabet::Symbol parseSymbol(std::list<sax::Token>& input) const; + void parseContent(std::list<sax::Token>& input, String& string) const; + std::vector<alphabet::Symbol> parseContentData(std::list<sax::Token>& input) const; + void parseAlphabet(std::list<sax::Token> &input, String& string) const; + String parse(std::list<sax::Token>& input) const; + String* parsePointer(std::list<sax::Token>& input) const; public: /** * Parses the XML and returns regular expression. The input is destroyed in the process. @@ -30,7 +33,7 @@ public: * @return String * @throws ParserException when an error occurs */ - String parse(std::list<sax::Token>& input) const; + String parseValue(std::list<sax::Token>& input) const; }; diff --git a/alib2/src/string/StringToXMLComposer.cpp b/alib2/src/string/StringToXMLComposer.cpp index 87871557da..dd2dc52d71 100644 --- a/alib2/src/string/StringToXMLComposer.cpp +++ b/alib2/src/string/StringToXMLComposer.cpp @@ -10,15 +10,9 @@ #include "LinearString.h" #include "Epsilon.h" -namespace string { - -void StringToXMLComposer::Visit(void* userData, const alphabet::Symbol& symbol) const { - std::list<sax::Token> &out = *((std::list<sax::Token>*) userData); +#include "../ToXMLComposers.h" - out.push_back(sax::Token("symbol", sax::Token::TokenType::START_ELEMENT)); - out.push_back(sax::Token((std::string) symbol, sax::Token::TokenType::CHARACTER)); - out.push_back(sax::Token("symbol", sax::Token::TokenType::END_ELEMENT)); -} +namespace string { void StringToXMLComposer::Visit(void* userData, const Epsilon&) const { std::list<sax::Token> &out = *((std::list<sax::Token>*) userData); @@ -32,7 +26,7 @@ void StringToXMLComposer::Visit(void* userData, const CyclicString& string) cons out.push_back(sax::Token("CyclicString", sax::Token::TokenType::START_ELEMENT)); for(const auto& symbol : string.getContent()) { - Visit((void*) &out, symbol); + out.splice(out.end(), alib::ToXMLComposers::symbolComposer.compose(symbol)); } out.push_back(sax::Token("CyclicString", sax::Token::TokenType::END_ELEMENT)); } @@ -42,14 +36,24 @@ void StringToXMLComposer::Visit(void* userData, const LinearString& string) cons out.push_back(sax::Token("LinearString", sax::Token::TokenType::START_ELEMENT)); for(const auto& symbol : string.getContent()) { - Visit((void*) &out, symbol); + out.splice(out.end(), alib::ToXMLComposers::symbolComposer.compose(symbol)); } out.push_back(sax::Token("LinearString", sax::Token::TokenType::END_ELEMENT)); } void StringToXMLComposer::Visit(void* userData, const String& string) const { + std::list<sax::Token> &out = *((std::list<sax::Token>*) userData); + + out.push_back(sax::Token("string", sax::Token::TokenType::START_ELEMENT)); + { + out.push_back(sax::Token("alphabet", sax::Token::TokenType::START_ELEMENT)); + for (const auto& symbol: string.getAlphabet()) { + out.splice(out.end(), alib::ToXMLComposers::symbolComposer.compose(symbol)); + } + out.push_back(sax::Token("alphabet", sax::Token::TokenType::END_ELEMENT)); + } string.getString().Accept(userData, *this); - + out.push_back(sax::Token("string", sax::Token::TokenType::END_ELEMENT)); } std::list<sax::Token> StringToXMLComposer::compose(const String& string) const { diff --git a/alib2/src/string/StringToXMLComposer.h b/alib2/src/string/StringToXMLComposer.h index 548c3467e8..bf78531af4 100644 --- a/alib2/src/string/StringToXMLComposer.h +++ b/alib2/src/string/StringToXMLComposer.h @@ -19,7 +19,6 @@ namespace string { * This class contains methods to print XML representation of string to the output stream. */ class StringToXMLComposer : public StringBase::const_visitor_type { - void Visit(void*, const alphabet::Symbol& symbol) const; void Visit(void*, const String& string) const; void Visit(void*, const LinearString& string) const; void Visit(void*, const CyclicString& string) const; diff --git a/alib2/test-src/alphabet/SymbolTest.cpp b/alib2/test-src/alphabet/SymbolTest.cpp index 9b1a7b68c5..4ee0d318ee 100644 --- a/alib2/test-src/alphabet/SymbolTest.cpp +++ b/alib2/test-src/alphabet/SymbolTest.cpp @@ -6,6 +6,7 @@ #include "alphabet/Symbol.h" #include "alphabet/LabeledSymbol.h" +#include "alphabet/BlankSymbol.h" #include "alphabet/SymbolFromStringParser.h" #include "alphabet/SymbolToStringComposer.h" #include "alphabet/SymbolFromXMLParser.h" @@ -17,6 +18,7 @@ #include "label/Label.h" #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y)) +#define CPPUNIT_EXCLUSIVE_OR(x, y) CPPUNIT_ASSERT((!(x) && (y)) || ((x) && !(y))) CPPUNIT_TEST_SUITE_REGISTRATION( SymbolTest ); @@ -44,7 +46,7 @@ void SymbolTest::testEqual() { std::stringstream inputs(input); alphabet::SymbolFromStringParser parser(inputs); - alphabet::Symbol symbol = parser.parseSymbol(); + alphabet::Symbol symbol = parser.parseValue(); alphabet::SymbolToStringComposer composer; std::string output = composer.compose(symbol); @@ -53,7 +55,7 @@ void SymbolTest::testEqual() { CPPUNIT_ASSERT( input == output ); alphabet::SymbolFromStringParser parser2(outputs); - alphabet::Symbol symbol2 = parser2.parseSymbol(); + alphabet::Symbol symbol2 = parser2.parseValue(); CPPUNIT_ASSERT( symbol == symbol2 ); } @@ -62,7 +64,7 @@ void SymbolTest::testEqual() { std::stringstream inputs(input); alphabet::SymbolFromStringParser parser(inputs); - alphabet::Symbol symbol = parser.parseSymbol(); + alphabet::Symbol symbol = parser.parseValue(); alphabet::SymbolToStringComposer composer; std::string output = composer.compose(symbol); @@ -71,7 +73,7 @@ void SymbolTest::testEqual() { CPPUNIT_ASSERT( input == output ); alphabet::SymbolFromStringParser parser2(outputs); - alphabet::Symbol symbol2 = parser2.parseSymbol(); + alphabet::Symbol symbol2 = parser2.parseValue(); CPPUNIT_ASSERT( symbol == symbol2 ); } @@ -80,7 +82,7 @@ void SymbolTest::testEqual() { std::stringstream inputs(input); alphabet::SymbolFromStringParser parser(inputs); - alphabet::Symbol symbol = parser.parseSymbol(); + alphabet::Symbol symbol = parser.parseValue(); alphabet::SymbolToStringComposer composer; std::string output = composer.compose(symbol); @@ -89,7 +91,7 @@ void SymbolTest::testEqual() { CPPUNIT_ASSERT( input == output ); alphabet::SymbolFromStringParser parser2(outputs); - alphabet::Symbol symbol2 = parser2.parseSymbol(); + alphabet::Symbol symbol2 = parser2.parseValue(); CPPUNIT_ASSERT( symbol == symbol2 ); } @@ -108,7 +110,7 @@ void SymbolTest::testXMLParser() { std::list<sax::Token> tokens2; sax::SaxParseInterface::parseMemory(tmp, tokens2); alphabet::SymbolFromXMLParser parser; - alphabet::Symbol symbol2 = parser.parse(tokens2); + alphabet::Symbol symbol2 = parser.parseValue(tokens2); CPPUNIT_ASSERT( symbol == symbol2 ); } @@ -121,439 +123,9 @@ void SymbolTest::testXMLParser() { } void SymbolTest::testOrder() { -/* string::StringSymbol s1(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1"))))); - string::StringEmpty e1; - string::StringEpsilon e2; - string::Iteration i1(s1); - - string::String alt1(string::Alternation(s1, s1)); - string::String con1(string::Concatenation (s1, s1)); - string::String ite1(i1); - string::String emp1(e1); - string::String eps1(e2); - string::String sym1(s1); - - CPPUNIT_IMPLY( alt1 < con1 && con1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < con1 && con1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < con1 && con1 < eps1, alt1 < eps1 ); - CPPUNIT_IMPLY( alt1 < con1 && con1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < eps1, alt1 < eps1 ); - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < eps1, alt1 < eps1 ); - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < eps1, alt1 < eps1 ); - - - - CPPUNIT_IMPLY( con1 < alt1 && alt1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < alt1 && alt1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < alt1 && alt1 < eps1, con1 < eps1 ); - CPPUNIT_IMPLY( con1 < alt1 && alt1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < ite1 && ite1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < ite1 && ite1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < ite1 && ite1 < eps1, con1 < eps1 ); - CPPUNIT_IMPLY( con1 < ite1 && ite1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < emp1 && emp1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < emp1 && emp1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < emp1 && emp1 < eps1, con1 < eps1 ); - CPPUNIT_IMPLY( con1 < emp1 && emp1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < eps1 && eps1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < eps1 && eps1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < eps1 && eps1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < eps1 && eps1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < sym1 && sym1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < sym1 && sym1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < sym1 && sym1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < sym1 && sym1 < eps1, con1 < eps1 ); - - - - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < eps1, ite1 < eps1 ); - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < con1 && con1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < con1 && con1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < con1 && con1 < eps1, ite1 < eps1 ); - CPPUNIT_IMPLY( ite1 < con1 && con1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < eps1, ite1 < eps1 ); - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < eps1, ite1 < eps1 ); - - - - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < eps1, emp1 < eps1 ); - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < con1 && con1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < con1 && con1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < con1 && con1 < eps1, emp1 < eps1 ); - CPPUNIT_IMPLY( emp1 < con1 && con1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < eps1, emp1 < eps1 ); - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < eps1, emp1 < eps1 ); - - - - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < emp1, eps1 < emp1 ); - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < con1 && con1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < con1 && con1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < con1 && con1 < emp1, eps1 < emp1 ); - CPPUNIT_IMPLY( eps1 < con1 && con1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < emp1, eps1 < emp1 ); - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < emp1, eps1 < emp1 ); - - - - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < emp1, sym1 < emp1 ); - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < con1 && con1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < con1 && con1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < con1 && con1 < emp1, sym1 < emp1 ); - CPPUNIT_IMPLY( sym1 < con1 && con1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < emp1, sym1 < emp1 ); - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < emp1, sym1 < emp1 );*/ -} - -void SymbolTest::testOrder2() { -/* string::StringSymbol s1(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1"))))); - string::StringSymbol s2(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("2"))))); - string::StringSymbol s3(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("3"))))); - - string::StringEmpty e1; - string::StringEpsilon e2; - - string::Iteration i1(s1); - string::Iteration i2(s2); - string::Iteration i3(s3); - - string::String alt1(string::Alternation(s1, s1)); - string::String alt2(string::Alternation(s1, s2)); - string::String alt3(string::Alternation(s1, s3)); - string::String alt4(string::Alternation(s2, s1)); - string::String alt5(string::Alternation(s2, s2)); - string::String alt6(string::Alternation(s2, s3)); - string::String alt7(string::Alternation(s3, s1)); - string::String alt8(string::Alternation(s3, s2)); - string::String alt9(string::Alternation(s3, s3)); - - string::String con1(string::Concatenation (s1, s1)); - string::String con2(string::Concatenation (s1, s2)); - string::String con3(string::Concatenation (s1, s3)); - string::String con4(string::Concatenation (s2, s1)); - string::String con5(string::Concatenation (s2, s2)); - string::String con6(string::Concatenation (s2, s3)); - string::String con7(string::Concatenation (s3, s1)); - string::String con8(string::Concatenation (s3, s2)); - string::String con9(string::Concatenation (s3, s3)); - - string::String ite1(i1); - string::String ite2(i2); - string::String ite3(i3); - - string::String emp1(e1); - string::String eps1(e2); - - string::String sym1(s1); - string::String sym2(s2); - string::String sym3(s3); - - - - CPPUNIT_ASSERT(alt1 == alt1); - CPPUNIT_ASSERT(alt1 < alt2); - CPPUNIT_ASSERT(alt1 < alt3); - CPPUNIT_ASSERT(alt1 < alt4); - CPPUNIT_ASSERT(alt1 < alt5); - CPPUNIT_ASSERT(alt1 < alt6); - CPPUNIT_ASSERT(alt1 < alt7); - CPPUNIT_ASSERT(alt1 < alt8); - CPPUNIT_ASSERT(alt1 < alt9); - - CPPUNIT_ASSERT(alt2 > alt1); - CPPUNIT_ASSERT(alt2 == alt2); - CPPUNIT_ASSERT(alt2 < alt3); - CPPUNIT_ASSERT(alt2 < alt4); - CPPUNIT_ASSERT(alt2 < alt5); - CPPUNIT_ASSERT(alt2 < alt6); - CPPUNIT_ASSERT(alt2 < alt7); - CPPUNIT_ASSERT(alt2 < alt8); - CPPUNIT_ASSERT(alt2 < alt9); - - CPPUNIT_ASSERT(alt3 > alt1); - CPPUNIT_ASSERT(alt3 > alt2); - CPPUNIT_ASSERT(alt3 == alt3); - CPPUNIT_ASSERT(alt3 < alt4); - CPPUNIT_ASSERT(alt3 < alt5); - CPPUNIT_ASSERT(alt3 < alt6); - CPPUNIT_ASSERT(alt3 < alt7); - CPPUNIT_ASSERT(alt3 < alt8); - CPPUNIT_ASSERT(alt3 < alt9); - - CPPUNIT_ASSERT(alt4 > alt1); - CPPUNIT_ASSERT(alt4 > alt2); - CPPUNIT_ASSERT(alt4 > alt3); - CPPUNIT_ASSERT(alt4 == alt4); - CPPUNIT_ASSERT(alt4 < alt5); - CPPUNIT_ASSERT(alt4 < alt6); - CPPUNIT_ASSERT(alt4 < alt7); - CPPUNIT_ASSERT(alt4 < alt8); - CPPUNIT_ASSERT(alt4 < alt9); - - CPPUNIT_ASSERT(alt5 > alt1); - CPPUNIT_ASSERT(alt5 > alt2); - CPPUNIT_ASSERT(alt5 > alt3); - CPPUNIT_ASSERT(alt5 > alt4); - CPPUNIT_ASSERT(alt5 == alt5); - CPPUNIT_ASSERT(alt5 < alt6); - CPPUNIT_ASSERT(alt5 < alt7); - CPPUNIT_ASSERT(alt5 < alt8); - CPPUNIT_ASSERT(alt5 < alt9); - - CPPUNIT_ASSERT(alt6 > alt1); - CPPUNIT_ASSERT(alt6 > alt2); - CPPUNIT_ASSERT(alt6 > alt3); - CPPUNIT_ASSERT(alt6 > alt4); - CPPUNIT_ASSERT(alt6 > alt5); - CPPUNIT_ASSERT(alt6 == alt6); - CPPUNIT_ASSERT(alt6 < alt7); - CPPUNIT_ASSERT(alt6 < alt8); - CPPUNIT_ASSERT(alt6 < alt9); - - CPPUNIT_ASSERT(alt7 > alt1); - CPPUNIT_ASSERT(alt7 > alt2); - CPPUNIT_ASSERT(alt7 > alt3); - CPPUNIT_ASSERT(alt7 > alt4); - CPPUNIT_ASSERT(alt7 > alt5); - CPPUNIT_ASSERT(alt7 > alt6); - CPPUNIT_ASSERT(alt7 == alt7); - CPPUNIT_ASSERT(alt7 < alt8); - CPPUNIT_ASSERT(alt7 < alt9); - - CPPUNIT_ASSERT(alt8 > alt1); - CPPUNIT_ASSERT(alt8 > alt2); - CPPUNIT_ASSERT(alt8 > alt3); - CPPUNIT_ASSERT(alt8 > alt4); - CPPUNIT_ASSERT(alt8 > alt5); - CPPUNIT_ASSERT(alt8 > alt6); - CPPUNIT_ASSERT(alt8 > alt7); - CPPUNIT_ASSERT(alt8 == alt8); - CPPUNIT_ASSERT(alt8 < alt9); - - CPPUNIT_ASSERT(alt9 > alt1); - CPPUNIT_ASSERT(alt9 > alt2); - CPPUNIT_ASSERT(alt9 > alt3); - CPPUNIT_ASSERT(alt9 > alt4); - CPPUNIT_ASSERT(alt9 > alt5); - CPPUNIT_ASSERT(alt9 > alt6); - CPPUNIT_ASSERT(alt9 > alt7); - CPPUNIT_ASSERT(alt9 > alt8); - CPPUNIT_ASSERT(alt9 == alt9); - - - - CPPUNIT_ASSERT(con1 == con1); - CPPUNIT_ASSERT(con1 < con2); - CPPUNIT_ASSERT(con1 < con3); - CPPUNIT_ASSERT(con1 < con4); - CPPUNIT_ASSERT(con1 < con5); - CPPUNIT_ASSERT(con1 < con6); - CPPUNIT_ASSERT(con1 < con7); - CPPUNIT_ASSERT(con1 < con8); - CPPUNIT_ASSERT(con1 < con9); - - CPPUNIT_ASSERT(con2 > con1); - CPPUNIT_ASSERT(con2 == con2); - CPPUNIT_ASSERT(con2 < con3); - CPPUNIT_ASSERT(con2 < con4); - CPPUNIT_ASSERT(con2 < con5); - CPPUNIT_ASSERT(con2 < con6); - CPPUNIT_ASSERT(con2 < con7); - CPPUNIT_ASSERT(con2 < con8); - CPPUNIT_ASSERT(con2 < con9); - - CPPUNIT_ASSERT(con3 > con1); - CPPUNIT_ASSERT(con3 > con2); - CPPUNIT_ASSERT(con3 == con3); - CPPUNIT_ASSERT(con3 < con4); - CPPUNIT_ASSERT(con3 < con5); - CPPUNIT_ASSERT(con3 < con6); - CPPUNIT_ASSERT(con3 < con7); - CPPUNIT_ASSERT(con3 < con8); - CPPUNIT_ASSERT(con3 < con9); - - CPPUNIT_ASSERT(con4 > con1); - CPPUNIT_ASSERT(con4 > con2); - CPPUNIT_ASSERT(con4 > con3); - CPPUNIT_ASSERT(con4 == con4); - CPPUNIT_ASSERT(con4 < con5); - CPPUNIT_ASSERT(con4 < con6); - CPPUNIT_ASSERT(con4 < con7); - CPPUNIT_ASSERT(con4 < con8); - CPPUNIT_ASSERT(con4 < con9); - - CPPUNIT_ASSERT(con5 > con1); - CPPUNIT_ASSERT(con5 > con2); - CPPUNIT_ASSERT(con5 > con3); - CPPUNIT_ASSERT(con5 > con4); - CPPUNIT_ASSERT(con5 == con5); - CPPUNIT_ASSERT(con5 < con6); - CPPUNIT_ASSERT(con5 < con7); - CPPUNIT_ASSERT(con5 < con8); - CPPUNIT_ASSERT(con5 < con9); - - CPPUNIT_ASSERT(con6 > con1); - CPPUNIT_ASSERT(con6 > con2); - CPPUNIT_ASSERT(con6 > con3); - CPPUNIT_ASSERT(con6 > con4); - CPPUNIT_ASSERT(con6 > con5); - CPPUNIT_ASSERT(con6 == con6); - CPPUNIT_ASSERT(con6 < con7); - CPPUNIT_ASSERT(con6 < con8); - CPPUNIT_ASSERT(con6 < con9); - - CPPUNIT_ASSERT(con7 > con1); - CPPUNIT_ASSERT(con7 > con2); - CPPUNIT_ASSERT(con7 > con3); - CPPUNIT_ASSERT(con7 > con4); - CPPUNIT_ASSERT(con7 > con5); - CPPUNIT_ASSERT(con7 > con6); - CPPUNIT_ASSERT(con7 == con7); - CPPUNIT_ASSERT(con7 < con8); - CPPUNIT_ASSERT(con7 < con9); - - CPPUNIT_ASSERT(con8 > con1); - CPPUNIT_ASSERT(con8 > con2); - CPPUNIT_ASSERT(con8 > con3); - CPPUNIT_ASSERT(con8 > con4); - CPPUNIT_ASSERT(con8 > con5); - CPPUNIT_ASSERT(con8 > con6); - CPPUNIT_ASSERT(con8 > con7); - CPPUNIT_ASSERT(con8 == con8); - CPPUNIT_ASSERT(con8 < con9); - - CPPUNIT_ASSERT(con9 > con1); - CPPUNIT_ASSERT(con9 > con2); - CPPUNIT_ASSERT(con9 > con3); - CPPUNIT_ASSERT(con9 > con4); - CPPUNIT_ASSERT(con9 > con5); - CPPUNIT_ASSERT(con9 > con6); - CPPUNIT_ASSERT(con9 > con7); - CPPUNIT_ASSERT(con9 > con8); - CPPUNIT_ASSERT(con9 == con9); - - - CPPUNIT_ASSERT(ite1 == ite1); - CPPUNIT_ASSERT(ite1 < ite2); - CPPUNIT_ASSERT(ite1 < ite3); - - CPPUNIT_ASSERT(ite2 > ite1); - CPPUNIT_ASSERT(ite2 == ite2); - CPPUNIT_ASSERT(ite2 < ite3); - - CPPUNIT_ASSERT(ite3 > ite1); - CPPUNIT_ASSERT(ite3 > ite2); - CPPUNIT_ASSERT(ite3 == ite3); - - - - CPPUNIT_ASSERT(emp1 == emp1); - - - - CPPUNIT_ASSERT(eps1 == eps1); - - - - CPPUNIT_ASSERT(sym1 == sym1); - CPPUNIT_ASSERT(sym1 < sym2); - CPPUNIT_ASSERT(sym1 < sym3); - - CPPUNIT_ASSERT(sym2 > sym1); - CPPUNIT_ASSERT(sym2 == sym2); - CPPUNIT_ASSERT(sym2 < sym3); + alphabet::LabeledSymbol ls(alphabet::LabeledSymbol(label::Label(label::StringLabel("a")))); + alphabet::BlankSymbol bs; - CPPUNIT_ASSERT(sym3 > sym1); - CPPUNIT_ASSERT(sym3 > sym2); - CPPUNIT_ASSERT(sym3 == sym3);*/ + CPPUNIT_EXCLUSIVE_OR( bs < ls, ls < bs); } diff --git a/alib2/test-src/alphabet/SymbolTest.h b/alib2/test-src/alphabet/SymbolTest.h index b7c7ef5f73..ac84956d72 100644 --- a/alib2/test-src/alphabet/SymbolTest.h +++ b/alib2/test-src/alphabet/SymbolTest.h @@ -9,7 +9,6 @@ class SymbolTest : public CppUnit::TestFixture CPPUNIT_TEST( testEqual ); CPPUNIT_TEST( testXMLParser ); CPPUNIT_TEST( testOrder ); - CPPUNIT_TEST( testOrder2 ); CPPUNIT_TEST_SUITE_END(); public: @@ -20,7 +19,6 @@ public: void testEqual(); void testXMLParser(); void testOrder(); - void testOrder2(); }; #endif // SYMBOL_TEST_H_ diff --git a/alib2/test-src/label/LabelTest.cpp b/alib2/test-src/label/LabelTest.cpp index 911b80b3fe..87df63b5f6 100644 --- a/alib2/test-src/label/LabelTest.cpp +++ b/alib2/test-src/label/LabelTest.cpp @@ -7,6 +7,7 @@ #include "label/Label.h" #include "label/StringLabel.h" #include "label/IntegerLabel.h" +#include "label/CharacterLabel.h" #include "label/LabelFromStringParser.h" #include "label/LabelToStringComposer.h" #include "label/LabelFromXMLParser.h" @@ -42,7 +43,7 @@ void LabelTest::testEqual() { std::stringstream inputs(input); label::LabelFromStringParser parser(inputs); - label::Label label = parser.parseLabel(); + label::Label label = parser.parseValue(); label::LabelToStringComposer composer; std::string output = composer.compose(label); @@ -51,7 +52,7 @@ void LabelTest::testEqual() { CPPUNIT_ASSERT( input == output ); label::LabelFromStringParser parser2(outputs); - label::Label label2 = parser2.parseLabel(); + label::Label label2 = parser2.parseValue(); CPPUNIT_ASSERT( label == label2 ); } @@ -60,7 +61,7 @@ void LabelTest::testEqual() { std::stringstream inputs(input); label::LabelFromStringParser parser(inputs); - label::Label label = parser.parseLabel(); + label::Label label = parser.parseValue(); label::LabelToStringComposer composer; std::string output = composer.compose(label); @@ -69,7 +70,7 @@ void LabelTest::testEqual() { CPPUNIT_ASSERT( input == output ); label::LabelFromStringParser parser2(outputs); - label::Label label2 = parser2.parseLabel(); + label::Label label2 = parser2.parseValue(); CPPUNIT_ASSERT( label == label2 ); } @@ -88,7 +89,7 @@ void LabelTest::testXMLParser() { std::list<sax::Token> tokens2; sax::SaxParseInterface::parseMemory(tmp, tokens2); label::LabelFromXMLParser parser; - label::Label label2 = parser.parse(tokens2); + label::Label label2 = parser.parseValue(tokens2); CPPUNIT_ASSERT( label == label2 ); } @@ -102,8 +103,11 @@ void LabelTest::testXMLParser() { void LabelTest::testOrder() { label::StringLabel s1("1"); + label::CharacterLabel c1('1'); label::IntegerLabel i1(1); CPPUNIT_EXCLUSIVE_OR( s1 < i1, i1 < s1); + CPPUNIT_EXCLUSIVE_OR( c1 < i1, i1 < c1); + CPPUNIT_EXCLUSIVE_OR( s1 < c1, c1 < s1); } diff --git a/alib2/test-src/regexp/RegExpTest.cpp b/alib2/test-src/regexp/RegExpTest.cpp index 5743976036..ce104afd65 100644 --- a/alib2/test-src/regexp/RegExpTest.cpp +++ b/alib2/test-src/regexp/RegExpTest.cpp @@ -54,7 +54,7 @@ void RegExpTest::testEqual() { std::stringstream inputs(input); regexp::RegExpFromStringParser parser(inputs); - regexp::RegExp regexp = parser.parseRegexp(); + regexp::RegExp regexp = parser.parseValue(); regexp::RegExpToStringComposer composer; std::string output = composer.compose(regexp); @@ -63,7 +63,7 @@ void RegExpTest::testEqual() { CPPUNIT_ASSERT( input == output ); regexp::RegExpFromStringParser parser2(outputs); - regexp::RegExp regexp2 = parser2.parseRegexp(); + regexp::RegExp regexp2 = parser2.parseValue(); CPPUNIT_ASSERT( regexp == regexp2 ); } @@ -72,7 +72,7 @@ void RegExpTest::testEqual() { std::stringstream inputs(input); regexp::RegExpFromStringParser parser(inputs); - regexp::RegExp regexp = parser.parseRegexp(); + regexp::RegExp regexp = parser.parseValue(); regexp::RegExpToStringComposer composer; std::string output = composer.compose(regexp); @@ -81,7 +81,7 @@ void RegExpTest::testEqual() { CPPUNIT_ASSERT( input == output ); regexp::RegExpFromStringParser parser2(outputs); - regexp::RegExp regexp2 = parser2.parseRegexp(); + regexp::RegExp regexp2 = parser2.parseValue(); CPPUNIT_ASSERT( regexp == regexp2 ); } @@ -90,7 +90,7 @@ void RegExpTest::testEqual() { std::stringstream inputs(input); regexp::RegExpFromStringParser parser(inputs); - regexp::RegExp regexp = parser.parseRegexp(); + regexp::RegExp regexp = parser.parseValue(); regexp::RegExpToStringComposer composer; std::string output = composer.compose(regexp); @@ -99,7 +99,7 @@ void RegExpTest::testEqual() { CPPUNIT_ASSERT( input == output ); regexp::RegExpFromStringParser parser2(outputs); - regexp::RegExp regexp2 = parser2.parseRegexp(); + regexp::RegExp regexp2 = parser2.parseValue(); CPPUNIT_ASSERT( regexp == regexp2 ); } @@ -129,7 +129,7 @@ void RegExpTest::testXMLParser() { std::list<sax::Token> tokens2; sax::SaxParseInterface::parseMemory(tmp, tokens2); regexp::RegExpFromXMLParser parser; - regexp::RegExp regexp2 = parser.parse(tokens2); + regexp::RegExp regexp2 = parser.parseValue(tokens2); CPPUNIT_ASSERT( regexp == regexp2 ); } diff --git a/alib2/test-src/string/StringTest.cpp b/alib2/test-src/string/StringTest.cpp index 04258fcb9c..e328ce51e6 100644 --- a/alib2/test-src/string/StringTest.cpp +++ b/alib2/test-src/string/StringTest.cpp @@ -53,7 +53,7 @@ void StringTest::testEqual() { std::stringstream inputs(input); string::StringFromStringParser parser(inputs); - string::String string = parser.parseString(); + string::String string = parser.parseValue(); string::StringToStringComposer composer; std::string output = composer.compose(string); @@ -62,7 +62,7 @@ void StringTest::testEqual() { CPPUNIT_ASSERT( input == output ); string::StringFromStringParser parser2(outputs); - string::String string2 = parser2.parseString(); + string::String string2 = parser2.parseValue(); CPPUNIT_ASSERT( string == string2 ); } @@ -71,7 +71,7 @@ void StringTest::testEqual() { std::stringstream inputs(input); string::StringFromStringParser parser(inputs); - string::String string = parser.parseString(); + string::String string = parser.parseValue(); string::StringToStringComposer composer; std::string output = composer.compose(string); @@ -80,7 +80,7 @@ void StringTest::testEqual() { CPPUNIT_ASSERT( input == output ); string::StringFromStringParser parser2(outputs); - string::String string2 = parser2.parseString(); + string::String string2 = parser2.parseValue(); CPPUNIT_ASSERT( string == string2 ); } @@ -89,7 +89,7 @@ void StringTest::testEqual() { std::stringstream inputs(input); string::StringFromStringParser parser(inputs); - string::String string = parser.parseString(); + string::String string = parser.parseValue(); string::StringToStringComposer composer; std::string output = composer.compose(string); @@ -98,26 +98,21 @@ void StringTest::testEqual() { CPPUNIT_ASSERT( input == output ); string::StringFromStringParser parser2(outputs); - string::String string2 = parser2.parseString(); + string::String string2 = parser2.parseValue(); CPPUNIT_ASSERT( string == string2 ); } } void StringTest::testXMLParser() { -/* + string::String string; string.setAlphabet({alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1")))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("2")))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("3"))))}); - string.setString(string::Alternation( - string::Concatenation( - string::StringSymbol(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1"))))), - string::StringSymbol(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("2"))))) - ), - string::Iteration( - string::StringSymbol(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1"))))) - ) - ) - ); + string.setString(string::LinearString({alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1")))), + alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("2")))), + alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1"))))} + ) + ); { string::StringToXMLComposer composer; @@ -128,7 +123,7 @@ void StringTest::testXMLParser() { std::list<sax::Token> tokens2; sax::SaxParseInterface::parseMemory(tmp, tokens2); string::StringFromXMLParser parser; - string::String string2 = parser.parse(tokens2); + string::String string2 = parser.parseValue(tokens2); CPPUNIT_ASSERT( string == string2 ); } @@ -137,443 +132,6 @@ void StringTest::testXMLParser() { string::String string2 = string::StringFactory::fromString(tmp); CPPUNIT_ASSERT( string == string2 ); - }*/ -} - -void StringTest::testOrder() { -/* string::StringSymbol s1(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1"))))); - string::StringEmpty e1; - string::StringEpsilon e2; - string::Iteration i1(s1); - - string::String alt1(string::Alternation(s1, s1)); - string::String con1(string::Concatenation (s1, s1)); - string::String ite1(i1); - string::String emp1(e1); - string::String eps1(e2); - string::String sym1(s1); - - CPPUNIT_IMPLY( alt1 < con1 && con1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < con1 && con1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < con1 && con1 < eps1, alt1 < eps1 ); - CPPUNIT_IMPLY( alt1 < con1 && con1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < eps1, alt1 < eps1 ); - CPPUNIT_IMPLY( alt1 < ite1 && ite1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < eps1, alt1 < eps1 ); - CPPUNIT_IMPLY( alt1 < emp1 && emp1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < eps1 && eps1 < sym1, alt1 < sym1 ); - - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < con1, alt1 < con1 ); - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < ite1, alt1 < ite1 ); - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < emp1, alt1 < emp1 ); - CPPUNIT_IMPLY( alt1 < sym1 && sym1 < eps1, alt1 < eps1 ); - - - - CPPUNIT_IMPLY( con1 < alt1 && alt1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < alt1 && alt1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < alt1 && alt1 < eps1, con1 < eps1 ); - CPPUNIT_IMPLY( con1 < alt1 && alt1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < ite1 && ite1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < ite1 && ite1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < ite1 && ite1 < eps1, con1 < eps1 ); - CPPUNIT_IMPLY( con1 < ite1 && ite1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < emp1 && emp1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < emp1 && emp1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < emp1 && emp1 < eps1, con1 < eps1 ); - CPPUNIT_IMPLY( con1 < emp1 && emp1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < eps1 && eps1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < eps1 && eps1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < eps1 && eps1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < eps1 && eps1 < sym1, con1 < sym1 ); - - CPPUNIT_IMPLY( con1 < sym1 && sym1 < alt1, con1 < alt1 ); - CPPUNIT_IMPLY( con1 < sym1 && sym1 < ite1, con1 < ite1 ); - CPPUNIT_IMPLY( con1 < sym1 && sym1 < emp1, con1 < emp1 ); - CPPUNIT_IMPLY( con1 < sym1 && sym1 < eps1, con1 < eps1 ); - - - - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < eps1, ite1 < eps1 ); - CPPUNIT_IMPLY( ite1 < alt1 && alt1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < con1 && con1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < con1 && con1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < con1 && con1 < eps1, ite1 < eps1 ); - CPPUNIT_IMPLY( ite1 < con1 && con1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < eps1, ite1 < eps1 ); - CPPUNIT_IMPLY( ite1 < emp1 && emp1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < eps1 && eps1 < sym1, ite1 < sym1 ); - - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < alt1, ite1 < alt1 ); - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < con1, ite1 < con1 ); - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < emp1, ite1 < emp1 ); - CPPUNIT_IMPLY( ite1 < sym1 && sym1 < eps1, ite1 < eps1 ); - - - - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < eps1, emp1 < eps1 ); - CPPUNIT_IMPLY( emp1 < alt1 && alt1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < con1 && con1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < con1 && con1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < con1 && con1 < eps1, emp1 < eps1 ); - CPPUNIT_IMPLY( emp1 < con1 && con1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < eps1, emp1 < eps1 ); - CPPUNIT_IMPLY( emp1 < ite1 && ite1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < eps1 && eps1 < sym1, emp1 < sym1 ); - - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < alt1, emp1 < alt1 ); - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < con1, emp1 < con1 ); - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < ite1, emp1 < ite1 ); - CPPUNIT_IMPLY( emp1 < sym1 && sym1 < eps1, emp1 < eps1 ); - - - - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < emp1, eps1 < emp1 ); - CPPUNIT_IMPLY( eps1 < alt1 && alt1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < con1 && con1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < con1 && con1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < con1 && con1 < emp1, eps1 < emp1 ); - CPPUNIT_IMPLY( eps1 < con1 && con1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < emp1, eps1 < emp1 ); - CPPUNIT_IMPLY( eps1 < ite1 && ite1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < emp1 && emp1 < sym1, eps1 < sym1 ); - - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < alt1, eps1 < alt1 ); - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < con1, eps1 < con1 ); - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < ite1, eps1 < ite1 ); - CPPUNIT_IMPLY( eps1 < sym1 && sym1 < emp1, eps1 < emp1 ); - - - - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < emp1, sym1 < emp1 ); - CPPUNIT_IMPLY( sym1 < alt1 && alt1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < con1 && con1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < con1 && con1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < con1 && con1 < emp1, sym1 < emp1 ); - CPPUNIT_IMPLY( sym1 < con1 && con1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < emp1, sym1 < emp1 ); - CPPUNIT_IMPLY( sym1 < ite1 && ite1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < emp1 && emp1 < eps1, sym1 < eps1 ); - - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < alt1, sym1 < alt1 ); - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < con1, sym1 < con1 ); - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < ite1, sym1 < ite1 ); - CPPUNIT_IMPLY( sym1 < eps1 && eps1 < emp1, sym1 < emp1 );*/ -} - -void StringTest::testOrder2() { -/* string::StringSymbol s1(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("1"))))); - string::StringSymbol s2(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("2"))))); - string::StringSymbol s3(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("3"))))); - - string::StringEmpty e1; - string::StringEpsilon e2; - - string::Iteration i1(s1); - string::Iteration i2(s2); - string::Iteration i3(s3); - - string::String alt1(string::Alternation(s1, s1)); - string::String alt2(string::Alternation(s1, s2)); - string::String alt3(string::Alternation(s1, s3)); - string::String alt4(string::Alternation(s2, s1)); - string::String alt5(string::Alternation(s2, s2)); - string::String alt6(string::Alternation(s2, s3)); - string::String alt7(string::Alternation(s3, s1)); - string::String alt8(string::Alternation(s3, s2)); - string::String alt9(string::Alternation(s3, s3)); - - string::String con1(string::Concatenation (s1, s1)); - string::String con2(string::Concatenation (s1, s2)); - string::String con3(string::Concatenation (s1, s3)); - string::String con4(string::Concatenation (s2, s1)); - string::String con5(string::Concatenation (s2, s2)); - string::String con6(string::Concatenation (s2, s3)); - string::String con7(string::Concatenation (s3, s1)); - string::String con8(string::Concatenation (s3, s2)); - string::String con9(string::Concatenation (s3, s3)); - - string::String ite1(i1); - string::String ite2(i2); - string::String ite3(i3); - - string::String emp1(e1); - string::String eps1(e2); - - string::String sym1(s1); - string::String sym2(s2); - string::String sym3(s3); - - - - CPPUNIT_ASSERT(alt1 == alt1); - CPPUNIT_ASSERT(alt1 < alt2); - CPPUNIT_ASSERT(alt1 < alt3); - CPPUNIT_ASSERT(alt1 < alt4); - CPPUNIT_ASSERT(alt1 < alt5); - CPPUNIT_ASSERT(alt1 < alt6); - CPPUNIT_ASSERT(alt1 < alt7); - CPPUNIT_ASSERT(alt1 < alt8); - CPPUNIT_ASSERT(alt1 < alt9); - - CPPUNIT_ASSERT(alt2 > alt1); - CPPUNIT_ASSERT(alt2 == alt2); - CPPUNIT_ASSERT(alt2 < alt3); - CPPUNIT_ASSERT(alt2 < alt4); - CPPUNIT_ASSERT(alt2 < alt5); - CPPUNIT_ASSERT(alt2 < alt6); - CPPUNIT_ASSERT(alt2 < alt7); - CPPUNIT_ASSERT(alt2 < alt8); - CPPUNIT_ASSERT(alt2 < alt9); - - CPPUNIT_ASSERT(alt3 > alt1); - CPPUNIT_ASSERT(alt3 > alt2); - CPPUNIT_ASSERT(alt3 == alt3); - CPPUNIT_ASSERT(alt3 < alt4); - CPPUNIT_ASSERT(alt3 < alt5); - CPPUNIT_ASSERT(alt3 < alt6); - CPPUNIT_ASSERT(alt3 < alt7); - CPPUNIT_ASSERT(alt3 < alt8); - CPPUNIT_ASSERT(alt3 < alt9); - - CPPUNIT_ASSERT(alt4 > alt1); - CPPUNIT_ASSERT(alt4 > alt2); - CPPUNIT_ASSERT(alt4 > alt3); - CPPUNIT_ASSERT(alt4 == alt4); - CPPUNIT_ASSERT(alt4 < alt5); - CPPUNIT_ASSERT(alt4 < alt6); - CPPUNIT_ASSERT(alt4 < alt7); - CPPUNIT_ASSERT(alt4 < alt8); - CPPUNIT_ASSERT(alt4 < alt9); - - CPPUNIT_ASSERT(alt5 > alt1); - CPPUNIT_ASSERT(alt5 > alt2); - CPPUNIT_ASSERT(alt5 > alt3); - CPPUNIT_ASSERT(alt5 > alt4); - CPPUNIT_ASSERT(alt5 == alt5); - CPPUNIT_ASSERT(alt5 < alt6); - CPPUNIT_ASSERT(alt5 < alt7); - CPPUNIT_ASSERT(alt5 < alt8); - CPPUNIT_ASSERT(alt5 < alt9); - - CPPUNIT_ASSERT(alt6 > alt1); - CPPUNIT_ASSERT(alt6 > alt2); - CPPUNIT_ASSERT(alt6 > alt3); - CPPUNIT_ASSERT(alt6 > alt4); - CPPUNIT_ASSERT(alt6 > alt5); - CPPUNIT_ASSERT(alt6 == alt6); - CPPUNIT_ASSERT(alt6 < alt7); - CPPUNIT_ASSERT(alt6 < alt8); - CPPUNIT_ASSERT(alt6 < alt9); - - CPPUNIT_ASSERT(alt7 > alt1); - CPPUNIT_ASSERT(alt7 > alt2); - CPPUNIT_ASSERT(alt7 > alt3); - CPPUNIT_ASSERT(alt7 > alt4); - CPPUNIT_ASSERT(alt7 > alt5); - CPPUNIT_ASSERT(alt7 > alt6); - CPPUNIT_ASSERT(alt7 == alt7); - CPPUNIT_ASSERT(alt7 < alt8); - CPPUNIT_ASSERT(alt7 < alt9); - - CPPUNIT_ASSERT(alt8 > alt1); - CPPUNIT_ASSERT(alt8 > alt2); - CPPUNIT_ASSERT(alt8 > alt3); - CPPUNIT_ASSERT(alt8 > alt4); - CPPUNIT_ASSERT(alt8 > alt5); - CPPUNIT_ASSERT(alt8 > alt6); - CPPUNIT_ASSERT(alt8 > alt7); - CPPUNIT_ASSERT(alt8 == alt8); - CPPUNIT_ASSERT(alt8 < alt9); - - CPPUNIT_ASSERT(alt9 > alt1); - CPPUNIT_ASSERT(alt9 > alt2); - CPPUNIT_ASSERT(alt9 > alt3); - CPPUNIT_ASSERT(alt9 > alt4); - CPPUNIT_ASSERT(alt9 > alt5); - CPPUNIT_ASSERT(alt9 > alt6); - CPPUNIT_ASSERT(alt9 > alt7); - CPPUNIT_ASSERT(alt9 > alt8); - CPPUNIT_ASSERT(alt9 == alt9); - - - - CPPUNIT_ASSERT(con1 == con1); - CPPUNIT_ASSERT(con1 < con2); - CPPUNIT_ASSERT(con1 < con3); - CPPUNIT_ASSERT(con1 < con4); - CPPUNIT_ASSERT(con1 < con5); - CPPUNIT_ASSERT(con1 < con6); - CPPUNIT_ASSERT(con1 < con7); - CPPUNIT_ASSERT(con1 < con8); - CPPUNIT_ASSERT(con1 < con9); - - CPPUNIT_ASSERT(con2 > con1); - CPPUNIT_ASSERT(con2 == con2); - CPPUNIT_ASSERT(con2 < con3); - CPPUNIT_ASSERT(con2 < con4); - CPPUNIT_ASSERT(con2 < con5); - CPPUNIT_ASSERT(con2 < con6); - CPPUNIT_ASSERT(con2 < con7); - CPPUNIT_ASSERT(con2 < con8); - CPPUNIT_ASSERT(con2 < con9); - - CPPUNIT_ASSERT(con3 > con1); - CPPUNIT_ASSERT(con3 > con2); - CPPUNIT_ASSERT(con3 == con3); - CPPUNIT_ASSERT(con3 < con4); - CPPUNIT_ASSERT(con3 < con5); - CPPUNIT_ASSERT(con3 < con6); - CPPUNIT_ASSERT(con3 < con7); - CPPUNIT_ASSERT(con3 < con8); - CPPUNIT_ASSERT(con3 < con9); - - CPPUNIT_ASSERT(con4 > con1); - CPPUNIT_ASSERT(con4 > con2); - CPPUNIT_ASSERT(con4 > con3); - CPPUNIT_ASSERT(con4 == con4); - CPPUNIT_ASSERT(con4 < con5); - CPPUNIT_ASSERT(con4 < con6); - CPPUNIT_ASSERT(con4 < con7); - CPPUNIT_ASSERT(con4 < con8); - CPPUNIT_ASSERT(con4 < con9); - - CPPUNIT_ASSERT(con5 > con1); - CPPUNIT_ASSERT(con5 > con2); - CPPUNIT_ASSERT(con5 > con3); - CPPUNIT_ASSERT(con5 > con4); - CPPUNIT_ASSERT(con5 == con5); - CPPUNIT_ASSERT(con5 < con6); - CPPUNIT_ASSERT(con5 < con7); - CPPUNIT_ASSERT(con5 < con8); - CPPUNIT_ASSERT(con5 < con9); - - CPPUNIT_ASSERT(con6 > con1); - CPPUNIT_ASSERT(con6 > con2); - CPPUNIT_ASSERT(con6 > con3); - CPPUNIT_ASSERT(con6 > con4); - CPPUNIT_ASSERT(con6 > con5); - CPPUNIT_ASSERT(con6 == con6); - CPPUNIT_ASSERT(con6 < con7); - CPPUNIT_ASSERT(con6 < con8); - CPPUNIT_ASSERT(con6 < con9); - - CPPUNIT_ASSERT(con7 > con1); - CPPUNIT_ASSERT(con7 > con2); - CPPUNIT_ASSERT(con7 > con3); - CPPUNIT_ASSERT(con7 > con4); - CPPUNIT_ASSERT(con7 > con5); - CPPUNIT_ASSERT(con7 > con6); - CPPUNIT_ASSERT(con7 == con7); - CPPUNIT_ASSERT(con7 < con8); - CPPUNIT_ASSERT(con7 < con9); - - CPPUNIT_ASSERT(con8 > con1); - CPPUNIT_ASSERT(con8 > con2); - CPPUNIT_ASSERT(con8 > con3); - CPPUNIT_ASSERT(con8 > con4); - CPPUNIT_ASSERT(con8 > con5); - CPPUNIT_ASSERT(con8 > con6); - CPPUNIT_ASSERT(con8 > con7); - CPPUNIT_ASSERT(con8 == con8); - CPPUNIT_ASSERT(con8 < con9); - - CPPUNIT_ASSERT(con9 > con1); - CPPUNIT_ASSERT(con9 > con2); - CPPUNIT_ASSERT(con9 > con3); - CPPUNIT_ASSERT(con9 > con4); - CPPUNIT_ASSERT(con9 > con5); - CPPUNIT_ASSERT(con9 > con6); - CPPUNIT_ASSERT(con9 > con7); - CPPUNIT_ASSERT(con9 > con8); - CPPUNIT_ASSERT(con9 == con9); - - - CPPUNIT_ASSERT(ite1 == ite1); - CPPUNIT_ASSERT(ite1 < ite2); - CPPUNIT_ASSERT(ite1 < ite3); - - CPPUNIT_ASSERT(ite2 > ite1); - CPPUNIT_ASSERT(ite2 == ite2); - CPPUNIT_ASSERT(ite2 < ite3); - - CPPUNIT_ASSERT(ite3 > ite1); - CPPUNIT_ASSERT(ite3 > ite2); - CPPUNIT_ASSERT(ite3 == ite3); - - - - CPPUNIT_ASSERT(emp1 == emp1); - - - - CPPUNIT_ASSERT(eps1 == eps1); - - - - CPPUNIT_ASSERT(sym1 == sym1); - CPPUNIT_ASSERT(sym1 < sym2); - CPPUNIT_ASSERT(sym1 < sym3); - - CPPUNIT_ASSERT(sym2 > sym1); - CPPUNIT_ASSERT(sym2 == sym2); - CPPUNIT_ASSERT(sym2 < sym3); - - CPPUNIT_ASSERT(sym3 > sym1); - CPPUNIT_ASSERT(sym3 > sym2); - CPPUNIT_ASSERT(sym3 == sym3);*/ + } } diff --git a/alib2/test-src/string/StringTest.h b/alib2/test-src/string/StringTest.h index 5396b45b92..6f38709161 100644 --- a/alib2/test-src/string/StringTest.h +++ b/alib2/test-src/string/StringTest.h @@ -8,8 +8,6 @@ class StringTest : public CppUnit::TestFixture CPPUNIT_TEST_SUITE( StringTest ); CPPUNIT_TEST( testEqual ); CPPUNIT_TEST( testXMLParser ); - CPPUNIT_TEST( testOrder ); - CPPUNIT_TEST( testOrder2 ); CPPUNIT_TEST_SUITE_END(); public: @@ -19,8 +17,6 @@ public: void testCopyConstruct(); void testEqual(); void testXMLParser(); - void testOrder(); - void testOrder2(); }; #endif // STRING_TEST_H_ -- GitLab