//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
TEST(ArrayTest, SetSizeZero)
{
    FloatArray a;
    a.reserve(3);
    a.add(1.0f);
    a.add(3.3f);
    a.add(5.5f);

    float* before = a.ptr();
    a.setSizeZero();
    float* after = a.ptr();

    ASSERT_EQ(before, after);
    ASSERT_EQ(0u, a.size());
    ASSERT_TRUE(3 <= a.capacity());

    a.add(1.1f);
    a.add(3.4f);
    a.add(5.6f);

    ASSERT_EQ(3u, a.size());
    ASSERT_EQ(1.1f, a[0]);
    ASSERT_EQ(3.4f, a[1]);
    ASSERT_EQ(5.6f, a[2]);
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
TEST(ArrayTest, ReserveAndAdd)
{
    FloatArray a;
    a.reserve(5);
    a.add(1.0f);
    a.add(3.3f);
    a.add(5.5f);

    ASSERT_EQ(3u, a.size());
    ASSERT_TRUE(a.capacity() >= 5);
    ASSERT_EQ(1.0f, a[0]);
    ASSERT_EQ(3.3f, a[1]);
    ASSERT_EQ(5.5f, a[2]);

    // To test reuse of buffer
    float* before = a.ptr();

    a.reserve(3);
    ASSERT_TRUE(a.capacity() >= 5);

    float* after = a.ptr();

    // Check that no realloc has been done
    ASSERT_EQ(before, after);
    ASSERT_TRUE(a.capacity() >= 5);
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
TEST(ArrayTest, ReserveGrow)
{
    FloatArray a;
    a.resize(3);
    a.set(0, 1.0f);
    a.set(1, 3.3f);
    a.set(2, 5.5f);

    float* before = a.ptr();
    a.reserve(8);
    float* after = a.ptr();
    a.add(2.2f);
    a.add(2.5f);

    ASSERT_NE(before, after);

    ASSERT_EQ(5u, a.size());
    ASSERT_TRUE(a.capacity() >= 8);
    ASSERT_EQ(1.0f, a[0]);
    ASSERT_EQ(3.3f, a[1]);
    ASSERT_EQ(5.5f, a[2]);
    ASSERT_EQ(2.2f, a[3]);
    ASSERT_EQ(2.5f, a[4]);
}