195ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com/*
295ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com * Copyright 2014 Google Inc.
395ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com *
495ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com * Use of this source code is governed by a BSD-style license that can be
595ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com * found in the LICENSE file.
695ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com */
795ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
895ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com#include "SkTArray.h"
995ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com#include "Test.h"
1095ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
1195ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com// Tests the SkTArray<T> class template.
1295ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
1395ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.comtemplate <bool MEM_COPY>
1495ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.comstatic void TestTSet_basic(skiatest::Reporter* reporter) {
1595ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    SkTArray<int, MEM_COPY> a;
1695ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
1795ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // Starts empty.
1895ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.empty());
1995ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.count() == 0);
2095ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
2195ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // { }, add a default constructed element
2234ce63ca6b853724c152a116e1467c0eead87003bungeman@google.com    a.push_back() = 0;
2395ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, !a.empty());
2495ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.count() == 1);
2595ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
2695ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // { 0 }, removeShuffle the only element.
2795ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    a.removeShuffle(0);
2895ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.empty());
2995ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.count() == 0);
3095ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
3195ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // { }, add a default, add a 1, remove first
3234ce63ca6b853724c152a116e1467c0eead87003bungeman@google.com    a.push_back() = 0;
3395ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.push_back() = 1);
3495ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    a.removeShuffle(0);
3595ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, !a.empty());
3695ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.count() == 1);
3795ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a[0] == 1);
3895ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
3995ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // { 1 }, replace with new array
4095ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    int b[5] = { 0, 1, 2, 3, 4 };
4195ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    a.reset(b, SK_ARRAY_COUNT(b));
4295ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.count() == SK_ARRAY_COUNT(b));
4395ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a[2] == 2);
4495ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a[4] == 4);
4595ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
4695ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // { 0, 1, 2, 3, 4 }, removeShuffle the last
4795ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    a.removeShuffle(4);
4895ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.count() == SK_ARRAY_COUNT(b) - 1);
4995ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a[3] == 3);
5095ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
5195ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // { 0, 1, 2, 3 }, remove a middle, note shuffle
5295ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    a.removeShuffle(1);
5395ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a.count() == SK_ARRAY_COUNT(b) - 2);
5495ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a[0] == 0);
5595ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a[1] == 3);
5695ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    REPORTER_ASSERT(reporter, a[2] == 2);
5795ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
5895ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    // {0, 3, 2 }
5995ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com}
6095ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com
6195ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.comDEF_TEST(TArray, reporter) {
6295ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    TestTSet_basic<true>(reporter);
6395ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com    TestTSet_basic<false>(reporter);
6495ebd17cf4f66952862289882ee5ac00da31cb8abungeman@google.com}
65