blob: 863995392501371a78b645f24ec5a6ab2c9e3404 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
* 2020 Johannes Kepler University Linz
* 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, Stanislav Meduna - initial API and implementation and/or initial documentation
* Ernst Blecha - add at-variable tests
*******************************************************************************/
#include <boost/test/unit_test.hpp>
#include "../../../src/core/datatypes/forte_array_at.h"
using namespace boost::unit_test;
BOOST_AUTO_TEST_SUITE(AT_VARIABLE)
BOOST_AUTO_TEST_SUITE(AT_VARIABLE_DWORD)
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_READ_BIT)
{
CIEC_DWORD nTestDWord;
nTestDWord = 0xFFFFFFFF;
ARRAY_AT<CIEC_BOOL, CIEC_DWORD, 0, 31> testArray(nTestDWord);
for(size_t i=0;i<32;i++) {
BOOST_CHECK_EQUAL(testArray[i], true);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), false);
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_READ_BIT_OUTOFBOUNDS)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_BOOL, CIEC_DWORD, 0, 31> testArray(nTestDWord);
BOOST_CHECK_EQUAL(testArray[32], testArray[32]);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), true);
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_WRITE_BIT)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_BOOL, CIEC_DWORD, 0, 31> testArray(nTestDWord);
for(size_t i=0;i<32;i++) {
nTestDWord = 0xFFFFFFFF;
testArray[i] = false;
for(size_t j=0;j<32;j++) {
BOOST_CHECK_EQUAL(testArray[j], i!=j);
}
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), false);
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_WRITE_BIT_OUTOFBOUNDS)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_BOOL, CIEC_DWORD, 0, 31> testArray(nTestDWord);
testArray[32] = true;
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), true);
BOOST_CHECK_EQUAL(testArray[32], testArray[32]);
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_READ_BYTE)
{
CIEC_DWORD nTestDWord;
nTestDWord = 0xFFFFFFFF;
ARRAY_AT<CIEC_BYTE, CIEC_DWORD, 0, 3> testArray(nTestDWord);
for(size_t i=0;i<4;i++) {
BOOST_CHECK_EQUAL((int)testArray[i], 0xFF);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), false);
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_READ_BYTE_OUTOFBOUNDS)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_BYTE, CIEC_DWORD, 0, 3> testArray(nTestDWord);
BOOST_CHECK_EQUAL((int)testArray[4], (int)testArray[4]);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), true);
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_WRITE_BYTE)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_BYTE, CIEC_DWORD, 0, 3> testArray(nTestDWord);
for(size_t i=0;i<4;i++) {
nTestDWord = 0xFFFFFFFF;
testArray[i] = false;
for(size_t j=0;j<4;j++) {
BOOST_CHECK_EQUAL(testArray[j], i!=j ? 0xFF : false);
}
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), false);
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_WRITE_BYTE_OUTOFBOUNDS)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_BYTE, CIEC_DWORD, 0, 3> testArray(nTestDWord);
testArray[4] = true;
BOOST_CHECK_EQUAL(testArray[4], testArray[4]);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), true);
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_READ_WORD)
{
CIEC_DWORD nTestDWord;
nTestDWord = 0xFFFFFFFF;
ARRAY_AT<CIEC_WORD, CIEC_DWORD, 0, 1> testArray(nTestDWord);
for(size_t i=0;i<2;i++) {
BOOST_CHECK_EQUAL((int)testArray[i], 0xFFFF);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), false);
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_READ_WORD_OUTOFBOUNDS)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_WORD, CIEC_DWORD, 0, 1> testArray(nTestDWord);
BOOST_CHECK_EQUAL((int)testArray[2], (int)testArray[2]);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), true);
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_WRITE_WORD)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_WORD, CIEC_DWORD, 0, 1> testArray(nTestDWord);
for(size_t i=0;i<2;i++) {
nTestDWord = 0xFFFFFFFF;
testArray[i] = false;
for(size_t j=0;j<2;j++) {
BOOST_CHECK_EQUAL(testArray[j], i!=j ? 0xFFFF : false);
}
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), false);
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_WRITE_WORD_OUTOFBOUNDS)
{
CIEC_DWORD nTestDWord;
ARRAY_AT<CIEC_WORD, CIEC_DWORD, 0, 1> testArray(nTestDWord);
testArray[2] = true;
BOOST_CHECK_EQUAL(testArray[2], testArray[2]);
BOOST_CHECK_EQUAL(testArray.getAccessedOutOfBounds(), true);
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_MOVING_BIT)
{
CIEC_DWORD nTestDWord;
nTestDWord = 0x0;
ARRAY_AT<CIEC_BOOL, CIEC_DWORD, 0, 31> testArray(nTestDWord);
for (size_t i=0; i < 32; i++) {
testArray[i] = true;
BOOST_CHECK_EQUAL(nTestDWord, (TForteDWord)1 << i);
testArray[i] = false;
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_MOVING_BYTE)
{
CIEC_DWORD nTestDWord;
nTestDWord = 0x0;
ARRAY_AT<CIEC_BYTE, CIEC_DWORD, 0, 3> testArray(nTestDWord);
for (size_t i=0; i < 4; i++) {
testArray[i] = 0xFF;
BOOST_CHECK_EQUAL(nTestDWord, (TForteDWord)0xFF << i*8);
testArray[i] = 0;
}
}
BOOST_AUTO_TEST_CASE(AT_VARIABLE_DWORD_MOVING_WORD)
{
CIEC_DWORD nTestDWord;
nTestDWord = 0x0;
ARRAY_AT<CIEC_WORD, CIEC_DWORD, 0, 1> testArray(nTestDWord);
for (size_t i=0; i < 2; i++) {
testArray[i] = 0xF00D;
BOOST_CHECK_EQUAL(nTestDWord, (TForteDWord)0xF00D << i*16);
testArray[i] = 0;
}
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()