blob: 89cb8db42bf32aec6fa1623d655144bfe67ec7fb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 ACIN
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
*******************************************************************************/
#include <boost/test/unit_test.hpp>
#include "../../../src/core/datatypes/forte_ulint.h"
BOOST_AUTO_TEST_SUITE(CIEC_ULINT_function_test)
BOOST_AUTO_TEST_CASE(Type_test)
{
CIEC_ULINT nTest;
//check type information
BOOST_CHECK_EQUAL(nTest.getDataTypeID(), CIEC_ANY::e_ULINT);
//check operator bool data type size
BOOST_CHECK_EQUAL(sizeof(nTest.operator TForteUInt64()), sizeof(TForteUInt64));
}
BOOST_AUTO_TEST_CASE(Assignment_test)
{
CIEC_ULINT nTest1;
CIEC_ULINT nTest2;
//initial value must be 0
BOOST_CHECK_EQUAL(nTest1, 0ULL);
nTest1 = 0ULL;
nTest2 = nTest1;
BOOST_CHECK_EQUAL(nTest1, 0ULL);
BOOST_CHECK_EQUAL(nTest2, 0ULL);
nTest1 = 13546842ULL;
nTest2 = nTest1;
BOOST_CHECK_EQUAL(nTest1, 13546842ULL);
BOOST_CHECK_EQUAL(nTest2, 13546842ULL);
nTest1 = 18446744073709551615ULL;
nTest2 = nTest1;
BOOST_CHECK_EQUAL(nTest1, 18446744073709551615ULL);
BOOST_CHECK_EQUAL(nTest2, 18446744073709551615ULL);
//check that assignment operator does not intertwine objects
nTest2 = 3652584218745ULL;
BOOST_CHECK_EQUAL(nTest1, 18446744073709551615ULL);
BOOST_CHECK_EQUAL(nTest2, 3652584218745ULL);
}
BOOST_AUTO_TEST_CASE(Conversion_test)
{
CIEC_ULINT nTest;
char cBuffer[21];
char cBufferFail[2];
//check cast operator
nTest = 0;
strcpy(cBuffer, "");
BOOST_CHECK_EQUAL(nTest.operator TForteUInt64(), 0ULL);
nTest = 5874125369851ULL;
BOOST_CHECK_EQUAL(nTest.operator TForteUInt64(), 5874125369851ULL);
nTest = 18446744073709551615ULL;
BOOST_CHECK_EQUAL(nTest.operator TForteUInt64(), 18446744073709551615ULL);
//check toString and fromString
BOOST_CHECK_EQUAL(nTest.fromString("0"), 1);
BOOST_CHECK_EQUAL(nTest, 0ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 1);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "0"), 0);
strcpy(cBuffer, "");
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 0), -1);
BOOST_CHECK_EQUAL(nTest.fromString("2#0"), 3);
BOOST_CHECK_EQUAL(nTest, 0ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 1);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "0"), 0);
strcpy(cBuffer, "");
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 0), -1);
BOOST_CHECK_EQUAL(nTest.fromString("8#0"), 3);
BOOST_CHECK_EQUAL(nTest, 0ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 1);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "0"), 0);
strcpy(cBuffer, "");
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 0), -1);
BOOST_CHECK_EQUAL(nTest.fromString("16#0"), 4);
BOOST_CHECK_EQUAL(nTest, 0ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 1);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "0"), 0);
strcpy(cBuffer, "");
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 0), -1);
BOOST_CHECK_EQUAL(nTest.fromString("62584325147"), 11);
BOOST_CHECK_EQUAL(nTest, 62584325147ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 11);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "62584325147"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("2#111010010010010100010000010000011011"), 38);
BOOST_CHECK_EQUAL(nTest, 62584325147ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 11);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "62584325147"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("8#722224202033"), 14);
BOOST_CHECK_EQUAL(nTest, 62584325147ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 11);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "62584325147"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("16#E9251041B"), 12);
BOOST_CHECK_EQUAL(nTest, 62584325147ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 11);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "62584325147"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("18446744073709551615"), 20);
BOOST_CHECK_EQUAL(nTest, 18446744073709551615ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 20);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "18446744073709551615"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("2#1111111111111111111111111111111111111111111111111111111111111111"), 66);
BOOST_CHECK_EQUAL(nTest, 18446744073709551615ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 20);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "18446744073709551615"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("8#1777777777777777777777"), 24);
BOOST_CHECK_EQUAL(nTest, 18446744073709551615ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 20);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "18446744073709551615"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("16#FFFFFFFFFFFFFFFF"), 19);
BOOST_CHECK_EQUAL(nTest, 18446744073709551615ULL);
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 21), 20);
BOOST_CHECK_EQUAL(strcmp(cBuffer, "18446744073709551615"), 0);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
strcpy(cBuffer, "");
nTest = 0;
//testing values outside of allowed range
BOOST_CHECK_EQUAL(nTest.fromString("184467440737095516159"), -1);
BOOST_CHECK_EQUAL(nTest.fromString("2#11111111111111111111111111111111111111111111111111111111111111110"), -1);
BOOST_CHECK_EQUAL(nTest.fromString("8#17777777777777777777770"), -1);
BOOST_CHECK_EQUAL(nTest.fromString("10#92233720368547758076"), -1);
BOOST_CHECK_EQUAL(nTest.fromString("16#FFFFFFFFFFFFFFFF0"), -1);
BOOST_CHECK_EQUAL(nTest.fromString("-130"), -1);
//check invalid fromString string
BOOST_CHECK_EQUAL(nTest.fromString("NOT A VALID STRING"), -1);
}
BOOST_AUTO_TEST_SUITE_END()