| Index: content/browser/indexed_db/list_set_unittest.cc
|
| diff --git a/content/browser/indexed_db/list_set_unittest.cc b/content/browser/indexed_db/list_set_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..af5d8cf05810c5a9d0e6199c71f5af2d1838a309
|
| --- /dev/null
|
| +++ b/content/browser/indexed_db/list_set_unittest.cc
|
| @@ -0,0 +1,239 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "content/browser/indexed_db/list_set.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace content {
|
| +
|
| +TEST(ListSetTest, ListSetIterator) {
|
| + list_set<int> set;
|
| + for (int i = 3; i > 0; --i)
|
| + set.insert(i);
|
| +
|
| + list_set<int>::iterator it = set.begin();
|
| + EXPECT_EQ(3, *it);
|
| + ++it;
|
| + EXPECT_EQ(2, *it);
|
| + it++;
|
| + EXPECT_EQ(1, *it);
|
| + --it;
|
| + EXPECT_EQ(2, *it);
|
| + it--;
|
| + EXPECT_EQ(3, *it);
|
| + ++it;
|
| + EXPECT_EQ(2, *it);
|
| + it++;
|
| + EXPECT_EQ(1, *it);
|
| + ++it;
|
| + EXPECT_EQ(set.end(), it);
|
| +}
|
| +
|
| +TEST(ListSetTest, ListSetConstIterator) {
|
| + list_set<int> set;
|
| + for (int i = 5; i > 0; --i)
|
| + set.insert(i);
|
| +
|
| + const list_set<int>& ref = set;
|
| +
|
| + list_set<int>::const_iterator it = ref.begin();
|
| + for (int i = 5; i > 0; --i) {
|
| + EXPECT_EQ(i, *it);
|
| + ++it;
|
| + }
|
| + EXPECT_EQ(ref.end(), it);
|
| +}
|
| +
|
| +TEST(ListSetTest, ListSetPrimitive) {
|
| + list_set<int> set;
|
| + EXPECT_TRUE(set.empty());
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + {
|
| + list_set<int>::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + for (int i = 5; i > 0; --i)
|
| + set.insert(i);
|
| + EXPECT_EQ(static_cast<size_t>(5), set.size());
|
| + EXPECT_FALSE(set.empty());
|
| +
|
| + set.erase(3);
|
| + EXPECT_EQ(static_cast<size_t>(4), set.size());
|
| +
|
| + EXPECT_TRUE(set.has(2));
|
| + set.erase(2);
|
| + EXPECT_FALSE(set.has(2));
|
| + EXPECT_EQ(static_cast<size_t>(3), set.size());
|
| +
|
| + {
|
| + list_set<int>::iterator it = set.begin();
|
| + EXPECT_EQ(5, *it);
|
| + ++it;
|
| + EXPECT_EQ(4, *it);
|
| + ++it;
|
| + EXPECT_EQ(1, *it);
|
| + ++it;
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + set.erase(1);
|
| + set.erase(4);
|
| + set.erase(5);
|
| +
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + EXPECT_TRUE(set.empty());
|
| + {
|
| + list_set<int>::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +}
|
| +
|
| +template <typename T> class Wrapped {
|
| + public:
|
| + Wrapped(const T& value) : value_(value) {}
|
| + Wrapped(const Wrapped<T>& other) : value_(other.value_) {}
|
| + Wrapped& operator=(const Wrapped<T>& rhs) {
|
| + value_ = rhs.value_;
|
| + return *this;
|
| + }
|
| + int value() const { return value_; }
|
| + bool operator<(const Wrapped<T>& rhs) const { return value_ < rhs.value_; }
|
| + bool operator==(const Wrapped<T>& rhs) const { return value_ == rhs.value_; }
|
| +
|
| + private:
|
| + T value_;
|
| +};
|
| +
|
| +TEST(ListSetTest, ListSetObject) {
|
| + list_set<Wrapped<int> > set;
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + {
|
| + list_set<Wrapped<int> >::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + set.insert(Wrapped<int>(0));
|
| + set.insert(Wrapped<int>(1));
|
| + set.insert(Wrapped<int>(2));
|
| +
|
| + EXPECT_EQ(static_cast<size_t>(3), set.size());
|
| +
|
| + {
|
| + list_set<Wrapped<int> >::iterator it = set.begin();
|
| + EXPECT_EQ(0, it->value());
|
| + ++it;
|
| + EXPECT_EQ(1, it->value());
|
| + ++it;
|
| + EXPECT_EQ(2, it->value());
|
| + ++it;
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + set.erase(Wrapped<int>(0));
|
| + set.erase(Wrapped<int>(1));
|
| + set.erase(Wrapped<int>(2));
|
| +
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + {
|
| + list_set<Wrapped<int> >::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +}
|
| +
|
| +TEST(ListSetTest, ListSetPointer) {
|
| + scoped_ptr<Wrapped<int> > w0(new Wrapped<int>(0));
|
| + scoped_ptr<Wrapped<int> > w1(new Wrapped<int>(1));
|
| + scoped_ptr<Wrapped<int> > w2(new Wrapped<int>(2));
|
| +
|
| + list_set<Wrapped<int>*> set;
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + {
|
| + list_set<Wrapped<int>*>::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + set.insert(w0.get());
|
| + set.insert(w1.get());
|
| + set.insert(w2.get());
|
| +
|
| + EXPECT_EQ(static_cast<size_t>(3), set.size());
|
| +
|
| + {
|
| + list_set<Wrapped<int>*>::iterator it = set.begin();
|
| + EXPECT_EQ(0, (*it)->value());
|
| + ++it;
|
| + EXPECT_EQ(1, (*it)->value());
|
| + ++it;
|
| + EXPECT_EQ(2, (*it)->value());
|
| + ++it;
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + set.erase(w0.get());
|
| + set.erase(w1.get());
|
| + set.erase(w2.get());
|
| +
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + {
|
| + list_set<Wrapped<int>*>::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +}
|
| +
|
| +template <typename T>
|
| +class RefCounted : public base::RefCounted<RefCounted<T> > {
|
| + public:
|
| + RefCounted(const T& value) : value_(value) {}
|
| + T value() { return value_; }
|
| +
|
| + private:
|
| + virtual ~RefCounted() {}
|
| + friend class base::RefCounted<RefCounted<T> >;
|
| + T value_;
|
| +};
|
| +
|
| +TEST(ListSetTest, ListSetRefCounted) {
|
| + list_set<scoped_refptr<RefCounted<int> > > set;
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + {
|
| + list_set<scoped_refptr<RefCounted<int> > >::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + scoped_refptr<RefCounted<int> > r0(new RefCounted<int>(0));
|
| + scoped_refptr<RefCounted<int> > r1(new RefCounted<int>(1));
|
| + scoped_refptr<RefCounted<int> > r2(new RefCounted<int>(2));
|
| +
|
| + set.insert(r0);
|
| + set.insert(r1);
|
| + set.insert(r2);
|
| +
|
| + EXPECT_EQ(static_cast<size_t>(3), set.size());
|
| +
|
| + {
|
| + list_set<scoped_refptr<RefCounted<int> > >::iterator it = set.begin();
|
| + EXPECT_EQ(0, (*it)->value());
|
| + ++it;
|
| + EXPECT_EQ(1, (*it)->value());
|
| + ++it;
|
| + EXPECT_EQ(2, (*it)->value());
|
| + ++it;
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +
|
| + set.erase(r0);
|
| + set.erase(r1);
|
| + set.erase(r2);
|
| +
|
| + EXPECT_EQ(static_cast<size_t>(0), set.size());
|
| + {
|
| + list_set<scoped_refptr<RefCounted<int> > >::iterator it = set.begin();
|
| + EXPECT_EQ(set.end(), it);
|
| + }
|
| +}
|
| +
|
| +} // namespace content
|
|
|