Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
compareTest.cpp 2.70 KiB
#include <alib/list>
#include "compareTest.h"

#include "string/naive/ExactEqual.h"
#include "string/naive/ExactCompare.h"
#include "string/simplify/NormalizeRotation.h"
#include "string/LinearString.h"
#include "string/CyclicString.h"
#include "string/Epsilon.h"

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( compareTest, "string" );
CPPUNIT_TEST_SUITE_REGISTRATION( compareTest );

void compareTest::setUp() {
}

void compareTest::tearDown() {
}

void compareTest::testCyclicStringCompareBoolean() {
	string::CyclicString < > str1("alfa");
	string::CyclicString < > str2("aalf");
	str2.extendAlphabet(str1.getAlphabet());
	str1.extendAlphabet(str2.getAlphabet());

	CPPUNIT_ASSERT(string::naive::ExactEqual::equals(str1, str2));
}

void compareTest::testCyclicStringCompareInt() {
	string::CyclicString < > str1("alfa");
	string::CyclicString < > str2("aalf");
	str2.extendAlphabet(str1.getAlphabet());
	str1.extendAlphabet(str2.getAlphabet());

	CPPUNIT_ASSERT(string::naive::ExactCompare::compare(str1, str2) == 0);

	string::CyclicString < > str3("ccbcccb");
	string::CyclicString < > str4("cbcccbc");
	str2.extendAlphabet(str1.getAlphabet());
	str1.extendAlphabet(str2.getAlphabet());

	CPPUNIT_ASSERT(string::naive::ExactCompare::compare(str3, str4) == 0);
}

void compareTest::testCompareCyclic() {
	string::CyclicString < > cyclic1({DefaultSymbolType(0), DefaultSymbolType(1), DefaultSymbolType(2)});
	string::CyclicString < > cyclic2({DefaultSymbolType(1), DefaultSymbolType(2), DefaultSymbolType(0)});
	string::CyclicString < > cyclic3({DefaultSymbolType(2), DefaultSymbolType(0), DefaultSymbolType(1)});

	string::CyclicString < > cyclic4({DefaultSymbolType(2), DefaultSymbolType(1), DefaultSymbolType(0)});

	string::CyclicString < > cyclic1n = string::simplify::NormalizeRotation::normalize(cyclic1);
	string::CyclicString < > cyclic2n = string::simplify::NormalizeRotation::normalize(cyclic2);
	string::CyclicString < > cyclic3n = string::simplify::NormalizeRotation::normalize(cyclic3);
	string::CyclicString < > cyclic4n = string::simplify::NormalizeRotation::normalize(cyclic4);

	CPPUNIT_ASSERT(cyclic1  == cyclic1n);
	CPPUNIT_ASSERT(cyclic1n == cyclic2n);
	CPPUNIT_ASSERT(cyclic1n == cyclic3n);
	CPPUNIT_ASSERT(cyclic2n == cyclic3n);

	CPPUNIT_ASSERT(cyclic4n != cyclic1n);
	CPPUNIT_ASSERT(cyclic4n != cyclic2n);
	CPPUNIT_ASSERT(cyclic4n != cyclic3n);

	string::CyclicString < > cyclic5({DefaultSymbolType(62), DefaultSymbolType(62), DefaultSymbolType(100), DefaultSymbolType(62)});
	string::CyclicString < > cyclic5n = string::simplify::NormalizeRotation::normalize(cyclic5);
	string::CyclicString < > cyclic5r({DefaultSymbolType(62), DefaultSymbolType(62), DefaultSymbolType(62), DefaultSymbolType(100)});
	CPPUNIT_ASSERT(cyclic5n == cyclic5r);
}