#include "HexavigesimalTest.h"
#include <alib/hexavigesimal>

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

void HexavigesimalTest::setUp() {
}

void HexavigesimalTest::tearDown() {
}

void HexavigesimalTest::test1() {
	CPPUNIT_ASSERT_EQUAL(std::string("A")  , ext::toBase26(0));
	CPPUNIT_ASSERT_EQUAL(std::string("B")  , ext::toBase26(1));
	CPPUNIT_ASSERT_EQUAL(std::string("Z")  , ext::toBase26(25));
	CPPUNIT_ASSERT_EQUAL(std::string("BA") , ext::toBase26(26));
	CPPUNIT_ASSERT_EQUAL(std::string("BB") , ext::toBase26(27));
	CPPUNIT_ASSERT_EQUAL(std::string("ZZ") , ext::toBase26(675));
	CPPUNIT_ASSERT_EQUAL(std::string("BAA"), ext::toBase26(676));

	CPPUNIT_ASSERT_EQUAL(0u  , ext::fromBase26("A"));
	CPPUNIT_ASSERT_EQUAL(1u  , ext::fromBase26("B"));
	CPPUNIT_ASSERT_EQUAL(25u , ext::fromBase26("Z"));
	CPPUNIT_ASSERT_EQUAL(26u , ext::fromBase26("BA"));
	CPPUNIT_ASSERT_EQUAL(27u , ext::fromBase26("BB"));
	CPPUNIT_ASSERT_EQUAL(675u, ext::fromBase26("ZZ"));
	CPPUNIT_ASSERT_EQUAL(676u, ext::fromBase26("BAA"));

	CPPUNIT_ASSERT_EQUAL(std::string("")   , ext::bijectiveToBase26(0));
	CPPUNIT_ASSERT_EQUAL(std::string("A")  , ext::bijectiveToBase26(1));
	CPPUNIT_ASSERT_EQUAL(std::string("Z")  , ext::bijectiveToBase26(26));
	CPPUNIT_ASSERT_EQUAL(std::string("AA") , ext::bijectiveToBase26(27));
	CPPUNIT_ASSERT_EQUAL(std::string("AB") , ext::bijectiveToBase26(28));
	CPPUNIT_ASSERT_EQUAL(std::string("ZZ") , ext::bijectiveToBase26(702));
	CPPUNIT_ASSERT_EQUAL(std::string("AAA"), ext::bijectiveToBase26(703));

	CPPUNIT_ASSERT_EQUAL(0u  , ext::bijectiveFromBase26(""));
	CPPUNIT_ASSERT_EQUAL(1u  , ext::bijectiveFromBase26("A"));
	CPPUNIT_ASSERT_EQUAL(26u , ext::bijectiveFromBase26("Z"));
	CPPUNIT_ASSERT_EQUAL(27u , ext::bijectiveFromBase26("AA"));
	CPPUNIT_ASSERT_EQUAL(28u , ext::bijectiveFromBase26("AB"));
	CPPUNIT_ASSERT_EQUAL(702u, ext::bijectiveFromBase26("ZZ"));
	CPPUNIT_ASSERT_EQUAL(703u, ext::bijectiveFromBase26("AAA"));
}