#include "TreeBaseTest.h"

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION ( TreeBaseTest, "bits" );
CPPUNIT_TEST_SUITE_REGISTRATION ( TreeBaseTest );

void TreeBaseTest::setUp ( ) {
}

void TreeBaseTest::tearDown ( ) {
}

void TreeBaseTest::testRegexps ( ) {
	RegExpIteration iter = RegExpEmpty ( );

	CPPUNIT_ASSERT ( iter.getChild ( ).getParent ( ) == & iter );

	RegExpIteration iter2 = iter;
	RegExpIteration iter3 = iter2;

	CPPUNIT_ASSERT ( iter3.getChild ( ).getParent ( ) == & iter3 );

	iter3 = iter;
	RegExpIteration iter4 = RegExpEpsilon ( );
	iter3 = iter4;

	CPPUNIT_ASSERT ( iter3.getChild ( ).getParent ( ) == & iter3 );

	RegExpSymbol s ( 'x' );
	const RegExpSymbol & sr = s;
	sr.getChildren ( );

	RegExpAlternation alter ( std::move ( iter ), std::move ( iter2 ) );
	for ( const RegExpElement & element : alter.getChildren ( ) ) {
		CPPUNIT_ASSERT ( element.getParent ( ) == & alter );
	}
}

void TreeBaseTest::testRankedTree ( ) {
	RankedTreeNode node ( 'a', 1, { RankedTreeNode ( 'b', 1, { RankedTreeNode ( 'c', 0, { } ) } ) } );
	const RankedTreeNode & cnode = node;

	for ( const RankedTreeNode & child : cnode.getChildren ( ) )
		CPPUNIT_ASSERT ( child.getParent ( ) == & cnode );
}

void TreeBaseTest::testUnrankedTree ( ) {
}