diff --git a/alib2data/src/rte/common/RTEFromXMLParser.cpp b/alib2data/src/rte/common/RTEFromXMLParser.cpp
index b484f1979b166883840c53cc57a600a1bfb56fea..7f7c23fd5262d286050d00a6b3d06ca61f76eac9 100644
--- a/alib2data/src/rte/common/RTEFromXMLParser.cpp
+++ b/alib2data/src/rte/common/RTEFromXMLParser.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "RTEFromXMLParser.h"
-#include <sax/ParserException.h>
 
 #include "../RTE.h"
 #include "../RTEClasses.h"
diff --git a/alib2data/test-src/rte/RTETest.cpp b/alib2data/test-src/rte/RTETest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..90df05b07dcdae024e70ed69da556a5cc8b63fe2
--- /dev/null
+++ b/alib2data/test-src/rte/RTETest.cpp
@@ -0,0 +1,663 @@
+#include <list>
+#include "RTETest.h"
+
+#include "sax/SaxParseInterface.h"
+#include "sax/SaxComposeInterface.h"
+
+//#include "rte/unbounded/UnboundedRTE.h"
+//#include "rte/unbounded/UnboundedRTEElements.h"
+#include "rte/formal/FormalRTE.h"
+#include "rte/formal/FormalRTEElements.h"
+
+#include "rte/RTE.h"
+
+#include "factory/XmlDataFactory.hpp"
+
+#define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))
+#define CPPUNIT_EXCLUSIVE_OR(x, y) CPPUNIT_ASSERT((!(x) && (y)) || ((x) && !(y)))
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RTETest, "rte" );
+CPPUNIT_TEST_SUITE_REGISTRATION( RTETest );
+
+void RTETest::setUp() {
+}
+
+void RTETest::tearDown() {
+}
+
+void RTETest::testCopyConstruct() {
+	{
+		/*
+		rte::UnboundedRTE rte;
+		rte.setAlphabet({alphabet::symbolFrom("1"), alphabet::symbolFrom("2"), alphabet::symbolFrom("3")});
+		rte::UnboundedRTESymbol l1 = rte::UnboundedRTESymbol("1");
+		rte::UnboundedRTESymbol l2 = rte::UnboundedRTESymbol("2");
+
+		rte::UnboundedRTEConcatenation con = rte::UnboundedRTEConcatenation();
+		con.appendElement(l1);
+		con.appendElement(l2);
+
+		rte::UnboundedRTEIteration ite = rte::UnboundedRTEIteration(l1);
+
+		rte::UnboundedRTEAlternation alt = rte::UnboundedRTEAlternation();
+		alt.appendElement(con);
+		alt.appendElement(ite);
+
+		rte.setRTE(alt);
+
+		rte::UnboundedRTE rte2(rte);
+
+		CPPUNIT_ASSERT( rte == rte2 );
+
+		rte::UnboundedRTE rte3(std::move(rte));
+
+		CPPUNIT_ASSERT( rte2 == rte3 );
+		*/
+	}
+	{
+		const alphabet::RankedSymbol symb_a2('a', 2);
+		const alphabet::RankedSymbol symb_b0('b', 0);
+		const alphabet::RankedSymbol symb_c0('c', 0);
+		const alphabet::RankedSymbol symb_y0('y', 0);
+		const alphabet::RankedSymbol symb_z0('z', 0);
+
+		rte::FormalRTE frte;
+		frte.setAlphabet({symb_a2, symb_b0, symb_c0});
+		frte.setConstantAlphabet({symb_y0, symb_z0});
+
+		rte::FormalRTESymbol b = rte::FormalRTESymbol(symb_b0);
+		rte::FormalRTESymbol c = rte::FormalRTESymbol(symb_c0);
+		rte::FormalRTESymbol y = rte::FormalRTESymbol(symb_y0);
+		rte::FormalRTESymbol z = rte::FormalRTESymbol(symb_z0);
+
+		rte::FormalRTEAlternation alt = rte::FormalRTEAlternation(b, c);
+
+		rte::FormalRTESymbol a = rte::FormalRTESymbol(symb_a2);
+		a.appendElement(y);
+		a.appendElement(z);
+
+		rte::FormalRTEIteration iter = rte::FormalRTEIteration(a, symb_y0);
+		rte::FormalRTESubstitution subst = rte::FormalRTESubstitution(iter, alt, symb_z0);
+		frte.setRTE(subst);
+
+		rte::FormalRTE frte2(frte);
+		CPPUNIT_ASSERT( frte == frte2 );
+
+		rte::FormalRTE frte3(std::move(frte));
+		CPPUNIT_ASSERT( frte2 == frte3 );
+	}
+}
+
+void RTETest::testXMLParser() {
+		const alphabet::RankedSymbol symb_a2('a', 2);
+		const alphabet::RankedSymbol symb_b0('b', 0);
+		const alphabet::RankedSymbol symb_c0('c', 0);
+		const alphabet::RankedSymbol symb_d1('d', 1);
+		const alphabet::RankedSymbol symb_y0('y', 0);
+		const alphabet::RankedSymbol symb_z0('z', 0);
+
+		rte::FormalRTE frte;
+		frte.setAlphabet({symb_a2, symb_b0, symb_c0, symb_d1});
+		frte.setConstantAlphabet({symb_y0, symb_z0});
+
+		rte::FormalRTESymbol b = rte::FormalRTESymbol(symb_b0);
+		rte::FormalRTESymbol c = rte::FormalRTESymbol(symb_c0);
+		rte::FormalRTESymbol y = rte::FormalRTESymbol(symb_y0);
+		rte::FormalRTESymbol z = rte::FormalRTESymbol(symb_z0);
+
+		rte::FormalRTEAlternation alt = rte::FormalRTEAlternation(b, c);
+
+		rte::FormalRTESymbol a = rte::FormalRTESymbol(symb_a2);
+		a.appendElement(y);
+		a.appendElement(z);
+
+		rte::FormalRTESymbol d = rte::FormalRTESymbol(symb_d1);
+		d.appendElement(a);
+
+		rte::FormalRTEIteration iter = rte::FormalRTEIteration(d, symb_y0);
+		rte::FormalRTESubstitution subst = rte::FormalRTESubstitution(iter, alt, symb_z0);
+		frte.setRTE(subst);
+
+	rte::RTE rte(frte);
+	alib::XmlDataFactory::toStdout(rte);
+	{
+		std::deque<sax::Token> tokens = alib::XmlDataFactory::toTokens(rte);
+		std::string tmp;
+		sax::SaxComposeInterface::printMemory(tmp, tokens);
+
+		std::deque<sax::Token> tokens2;
+		sax::SaxParseInterface::parseMemory(tmp, tokens2);
+		rte::RTE rte2 = alib::XmlDataFactory::fromTokens<rte::RTE>(std::move(tokens2));
+
+		CPPUNIT_ASSERT( rte == rte2 );
+	}
+	{
+		std::string tmp = alib::XmlDataFactory::toString(rte);
+		rte::RTE rte2 = alib::XmlDataFactory::fromString<rte::RTE>(tmp);
+
+		CPPUNIT_ASSERT( rte == rte2 );
+	}
+}
+
+void RTETest::testOrder() {
+	/*
+	rte::UnboundedRTESymbol s1("1");
+	rte::UnboundedRTEEmpty e1;
+	rte::UnboundedRTEEpsilon e2;
+	rte::UnboundedRTEIteration i1(s1);
+	rte::UnboundedRTEConcatenation a1;
+	a1.appendElement(s1);
+	a1.appendElement(s1);
+	rte::UnboundedRTEAlternation c1;
+	c1.appendElement(s1);
+	c1.appendElement(s1);
+
+	rte::UnboundedRTE alt1(a1);
+	rte::UnboundedRTE con1(c1);
+	rte::UnboundedRTE ite1(i1);
+	rte::UnboundedRTE emp1(e1);
+	rte::UnboundedRTE eps1(e2);
+	rte::UnboundedRTE sym1(s1);
+
+	CPPUNIT_EXCLUSIVE_OR(alt1 < con1, con1 < alt1);
+	CPPUNIT_EXCLUSIVE_OR(alt1 < ite1, ite1 < alt1);
+	CPPUNIT_EXCLUSIVE_OR(alt1 < emp1, emp1 < alt1);
+	CPPUNIT_EXCLUSIVE_OR(alt1 < eps1, eps1 < alt1);
+	CPPUNIT_EXCLUSIVE_OR(alt1 < sym1, sym1 < alt1);
+
+	CPPUNIT_EXCLUSIVE_OR(con1 < ite1, ite1 < con1);
+	CPPUNIT_EXCLUSIVE_OR(con1 < emp1, emp1 < con1);
+	CPPUNIT_EXCLUSIVE_OR(con1 < eps1, eps1 < con1);
+	CPPUNIT_EXCLUSIVE_OR(con1 < sym1, sym1 < con1);
+
+	CPPUNIT_EXCLUSIVE_OR(ite1 < emp1, emp1 < ite1);
+	CPPUNIT_EXCLUSIVE_OR(ite1 < eps1, eps1 < ite1);
+	CPPUNIT_EXCLUSIVE_OR(ite1 < sym1, sym1 < ite1);
+
+	CPPUNIT_EXCLUSIVE_OR(emp1 < eps1, eps1 < emp1);
+	CPPUNIT_EXCLUSIVE_OR(emp1 < sym1, sym1 < emp1);
+
+	CPPUNIT_EXCLUSIVE_OR(eps1 < sym1, sym1 < eps1);
+
+	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 RTETest::testOrder2() {
+	/*
+	rte::UnboundedRTESymbol s1("1");
+	rte::UnboundedRTESymbol s2("2");
+	rte::UnboundedRTESymbol s3("3");
+
+	rte::UnboundedRTEEmpty e1;
+	rte::UnboundedRTEEpsilon e2;
+
+	rte::UnboundedRTEIteration i1(s1);
+	rte::UnboundedRTEIteration i2(s2);
+	rte::UnboundedRTEIteration i3(s3);
+
+	rte::UnboundedRTEAlternation a1;
+	a1.appendElement(s1);
+	a1.appendElement(s1);
+	rte::UnboundedRTEAlternation a2;
+	a2.appendElement(s1);
+	a2.appendElement(s2);
+	rte::UnboundedRTEAlternation a3;
+	a3.appendElement(s1);
+	a3.appendElement(s3);
+	rte::UnboundedRTEAlternation a4;
+	a4.appendElement(s2);
+	a4.appendElement(s1);
+	rte::UnboundedRTEAlternation a5;
+	a5.appendElement(s2);
+	a5.appendElement(s2);
+	rte::UnboundedRTEAlternation a6;
+	a6.appendElement(s2);
+	a6.appendElement(s3);
+	rte::UnboundedRTEAlternation a7;
+	a7.appendElement(s3);
+	a7.appendElement(s1);
+	rte::UnboundedRTEAlternation a8;
+	a8.appendElement(s3);
+	a8.appendElement(s2);
+	rte::UnboundedRTEAlternation a9;
+	a9.appendElement(s3);
+	a9.appendElement(s3);
+
+	rte::UnboundedRTEConcatenation c1;
+	c1.appendElement(s1);
+	c1.appendElement(s1);
+	rte::UnboundedRTEConcatenation c2;
+	c2.appendElement(s1);
+	c2.appendElement(s2);
+	rte::UnboundedRTEConcatenation c3;
+	c3.appendElement(s1);
+	c3.appendElement(s3);
+	rte::UnboundedRTEConcatenation c4;
+	c4.appendElement(s2);
+	c4.appendElement(s1);
+	rte::UnboundedRTEConcatenation c5;
+	c5.appendElement(s2);
+	c5.appendElement(s2);
+	rte::UnboundedRTEConcatenation c6;
+	c6.appendElement(s2);
+	c6.appendElement(s3);
+	rte::UnboundedRTEConcatenation c7;
+	c7.appendElement(s3);
+	c7.appendElement(s1);
+	rte::UnboundedRTEConcatenation c8;
+	c8.appendElement(s3);
+	c8.appendElement(s2);
+	rte::UnboundedRTEConcatenation c9;
+	c9.appendElement(s3);
+	c9.appendElement(s3);
+
+	rte::UnboundedRTE alt1(a1);
+	rte::UnboundedRTE alt2(a2);
+	rte::UnboundedRTE alt3(a3);
+	rte::UnboundedRTE alt4(a4);
+	rte::UnboundedRTE alt5(a5);
+	rte::UnboundedRTE alt6(a6);
+	rte::UnboundedRTE alt7(a7);
+	rte::UnboundedRTE alt8(a8);
+	rte::UnboundedRTE alt9(a9);
+
+	rte::UnboundedRTE con1(c1);
+	rte::UnboundedRTE con2(c2);
+	rte::UnboundedRTE con3(c3);
+	rte::UnboundedRTE con4(c4);
+	rte::UnboundedRTE con5(c5);
+	rte::UnboundedRTE con6(c6);
+	rte::UnboundedRTE con7(c7);
+	rte::UnboundedRTE con8(c8);
+	rte::UnboundedRTE con9(c9);
+
+	rte::UnboundedRTE ite1(i1);
+	rte::UnboundedRTE ite2(i2);
+	rte::UnboundedRTE ite3(i3);
+
+	rte::UnboundedRTE emp1(e1);
+	rte::UnboundedRTE eps1(e2);
+
+	rte::UnboundedRTE sym1(s1);
+	rte::UnboundedRTE sym2(s2);
+	rte::UnboundedRTE 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/alib2data/test-src/rte/RTETest.h b/alib2data/test-src/rte/RTETest.h
new file mode 100644
index 0000000000000000000000000000000000000000..a58704b6b7abb0f7c6c0bfdff2eabecc2467e931
--- /dev/null
+++ b/alib2data/test-src/rte/RTETest.h
@@ -0,0 +1,25 @@
+#ifndef RTE_TEST_H_
+#define RTE_TEST_H_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class RTETest : public CppUnit::TestFixture
+{
+	CPPUNIT_TEST_SUITE( RTETest );
+	CPPUNIT_TEST( testCopyConstruct );
+	CPPUNIT_TEST( testXMLParser );
+	CPPUNIT_TEST( testOrder );
+	CPPUNIT_TEST( testOrder2 );
+	CPPUNIT_TEST_SUITE_END();
+
+public:
+	void setUp();
+	void tearDown();
+
+	void testCopyConstruct();
+	void testXMLParser();
+	void testOrder();
+	void testOrder2();
+};
+
+#endif	// REG_EXP_TEST_H_