/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "SkBitSet.h"
#include "Test.h"

DEF_TEST(BitSet, reporter) {
    SkBitSet set0(65536);
    REPORTER_ASSERT(reporter, set0.has(0) == false);
    REPORTER_ASSERT(reporter, set0.has(32767) == false);
    REPORTER_ASSERT(reporter, set0.has(65535) == false);

    set0.set(22);
    REPORTER_ASSERT(reporter, set0.has(22) == true);
    set0.set(24);
    REPORTER_ASSERT(reporter, set0.has(24) == true);
    set0.set(35);  // on a different DWORD
    REPORTER_ASSERT(reporter, set0.has(35) == true);
    REPORTER_ASSERT(reporter, set0.has(24) == true);
    REPORTER_ASSERT(reporter, set0.has(35) == true);

    SkTDArray<unsigned int> data;
    set0.exportTo(&data);
    REPORTER_ASSERT(reporter, data.count() == 3);
    REPORTER_ASSERT(reporter, data[0] == 22);
    REPORTER_ASSERT(reporter, data[1] == 24);
    REPORTER_ASSERT(reporter, data[2] == 35);

    SkBitSet set1(65536);
    set1.set(12345);
    REPORTER_ASSERT(reporter, set0.has(12345) == false);
    REPORTER_ASSERT(reporter, set1.has(12345) == true);
    REPORTER_ASSERT(reporter, set1.has(22) == false);
    REPORTER_ASSERT(reporter, set0.has(35) == true);
}
