blob: 1a6259b39251822dde5d32226d9b49f5168791d0 [file] [log] [blame]
/* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <gtest/gtest.h>
#include "capu/container/Array.h"
#include "capu/Error.h"
#include "capu/Config.h"
TEST(Array, Constructor) {
capu::Array<capu::uint32_t> emptyArray;
EXPECT_EQ(0u, emptyArray.size());
capu::Array<capu::uint32_t> *myArray = NULL;
myArray = new capu::Array<capu::uint32_t>(10);
EXPECT_TRUE(myArray != NULL);
EXPECT_EQ(10u,myArray->size());
delete myArray;
}
TEST(Array, SetAndGetValues) {
capu::Array<capu::uint32_t> myArray(10);
myArray.set(5);
for (capu::int32_t i = 0; i< 10; i++) {
EXPECT_EQ(5u,myArray[i]);
}
EXPECT_EQ(capu::CAPU_OK, myArray.set(3,0,3));
EXPECT_EQ(3u,myArray[0]);
EXPECT_EQ(3u,myArray[1]);
EXPECT_EQ(3u,myArray[2]);
EXPECT_EQ(capu::CAPU_OK, myArray.set(7,7,3));
EXPECT_EQ(7u,myArray[7]);
EXPECT_EQ(7u,myArray[8]);
EXPECT_EQ(7u,myArray[9]);
EXPECT_EQ(capu::CAPU_OK, myArray.set(4,4,3));
EXPECT_EQ(4u,myArray[4]);
EXPECT_EQ(4u,myArray[5]);
EXPECT_EQ(4u,myArray[6]);
capu::Array<capu::uint32_t> myArray2(20);
myArray2.set(5);
for (capu::int32_t i = 0; i< 20; i++) {
EXPECT_EQ(5u,myArray2[i]);
}
EXPECT_EQ(capu::CAPU_OK,myArray2.set(3,0,3));
EXPECT_EQ(3u,myArray2[0]);
EXPECT_EQ(3u,myArray2[1]);
EXPECT_EQ(3u,myArray2[2]);
EXPECT_EQ(capu::CAPU_OK,myArray2.set(7,17,3));
EXPECT_EQ(7u,myArray2[17]);
EXPECT_EQ(7u,myArray2[18]);
EXPECT_EQ(7u,myArray2[19]);
EXPECT_EQ(capu::CAPU_OK,myArray2.set(4,5,12));
EXPECT_EQ(5u,myArray2[4]);
EXPECT_EQ(4u,myArray2[5]);
EXPECT_EQ(4u,myArray2[6]);
EXPECT_EQ(4u,myArray2[7]);
EXPECT_EQ(4u,myArray2[8]);
EXPECT_EQ(4u,myArray2[9]);
EXPECT_EQ(4u,myArray2[10]);
EXPECT_EQ(4u,myArray2[11]);
EXPECT_EQ(4u,myArray2[12]);
EXPECT_EQ(4u,myArray2[13]);
EXPECT_EQ(4u,myArray2[14]);
EXPECT_EQ(4u,myArray2[15]);
EXPECT_EQ(4u,myArray2[16]);
EXPECT_EQ(7u,myArray2[17]);
myArray2[0] = 1;
myArray2[1] = 2;
EXPECT_EQ(1u,myArray2[0]);
EXPECT_EQ(2u,myArray2[1]);
EXPECT_EQ(capu::CAPU_OK,myArray2.set(4,0,20));
EXPECT_EQ(capu::CAPU_ERANGE,myArray2.set(4,0,21));
EXPECT_EQ(capu::CAPU_ERANGE,myArray2.set(4,1,20));
}
TEST(Array, Swap) {
capu::Array<capu::uint32_t> myArray(10);
myArray.set(5);
myArray[3] = 10;
myArray[7] = 15;
EXPECT_EQ(10u,myArray[3]);
EXPECT_EQ(15u,myArray[7]);
EXPECT_EQ(capu::CAPU_OK,myArray.swap(3,7));
EXPECT_EQ(15u,myArray[3]);
EXPECT_EQ(10u,myArray[7]);
EXPECT_EQ(capu::CAPU_ERANGE,myArray.swap(13,17));
EXPECT_EQ(capu::CAPU_ERANGE,myArray.swap(3,17));
EXPECT_EQ(capu::CAPU_ERANGE,myArray.swap(13,7));
}
TEST(Array, Move) {
capu::Array<capu::uint32_t> myArray(10);
myArray.set(5);
myArray[0] = 10;
myArray[1] = 15;
myArray[2] = 20;
EXPECT_EQ(capu::CAPU_OK,myArray.move(0,3,7));
EXPECT_EQ(10u,myArray[7]);
EXPECT_EQ(15u,myArray[8]);
EXPECT_EQ(20u,myArray[9]);
EXPECT_EQ(capu::CAPU_ERANGE,myArray.move(13,3,7));
EXPECT_EQ(capu::CAPU_ERANGE,myArray.move(0,13,7));
EXPECT_EQ(capu::CAPU_ERANGE,myArray.move(0,3,13));
}
TEST(Array, CopyConstructor)
{
capu::Array<capu::uint32_t> myArray(10);
myArray.set(5);
capu::Array<capu::uint32_t> myArray2(myArray);
EXPECT_EQ(5u, myArray2[0]);
EXPECT_EQ(5u, myArray2[4]);
EXPECT_EQ(5u, myArray2[9]);
}
TEST(Array, Assignment)
{
capu::Array<capu::uint32_t> myEmptyArray;
capu::Array<capu::uint32_t> myArray(10);
myArray.set(5);
myEmptyArray = myArray;
EXPECT_EQ(5u, myEmptyArray[0]);
EXPECT_EQ(5u, myEmptyArray[4]);
EXPECT_EQ(5u, myEmptyArray[9]);
capu::Array<capu::uint32_t> myArray2(10);
myArray2 = myArray;
EXPECT_EQ(5u, myArray2[0]);
EXPECT_EQ(5u, myArray2[4]);
EXPECT_EQ(5u, myArray2[9]);
}
TEST(Array, CopyMethodNormal)
{
capu::Array<capu::uint32_t> original(5);
capu::uint32_t newVals[5];
// fill with default values
for(capu::uint32_t i=0;i<original.size();i++)
{
original[i] = i;
newVals[i] = i+1;
}
capu::status_t status = original.copy(newVals, original.size());
EXPECT_EQ(capu::CAPU_OK, status);
for(capu::uint32_t i=0;i<original.size();i++)
{
EXPECT_EQ(i+1, original[i]);
}
}
TEST(Array, CopyMethodNormalWithBiggerArray)
{
capu::Array<capu::uint32_t> original(5);
capu::uint32_t newVals[50]; // this one's bigger
// fill with default values
for(capu::uint32_t i=0;i<original.size();i++)
{
original[i] = i;
}
for(capu::uint32_t i=0;i<50;i++)
{
newVals[i] = i+1;
}
capu::status_t status = original.copy(newVals, original.size()); // only copy the first 5 values
EXPECT_EQ(capu::CAPU_OK, status);
for(capu::uint32_t i=0;i<original.size();i++)
{
EXPECT_EQ(i+1, original[i]);
}
}
TEST(Array, CopyMethodInvalidSize)
{
capu::Array<capu::uint32_t> original(5);
for(capu::uint32_t i=0;i<original.size();i++)
{
original[i] = i;
}
capu::uint32_t newVals[3];
capu::status_t status = original.copy(newVals, 3); // give invalid size
EXPECT_EQ(capu::CAPU_ERANGE, status);
// no changes in original array
for(capu::uint32_t i=0;i<original.size();i++)
{
EXPECT_EQ(i, original[i]);
}
}
TEST(Array, CopyMethodZeroSizeNormal)
{
capu::Array<capu::uint32_t> original(0);
capu::uint32_t newVals[1];
capu::status_t status = original.copy(newVals, original.size()); // copy with zero, no error expected
EXPECT_EQ(capu::CAPU_OK, status);
}
TEST(Array, CopyMethodZeroSizeInvalidSize)
{
capu::Array<capu::uint32_t> original(0);
capu::uint32_t newVals[1];
capu::status_t status = original.copy(newVals, 1);
EXPECT_EQ(capu::CAPU_ERANGE, status);
}
TEST(Array, SetRawData)
{
capu::Array<capu::uint32_t> array(3u);
array.setRawData(0);
EXPECT_EQ(0u, array[0]);
EXPECT_EQ(0u, array[1]);
EXPECT_EQ(0u, array[2]);
}