/*
 * 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 "SkTDArray.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);
}
