/* -*- c++ -*- */ /* * Copyright (C) 2010 The Android Open Source Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "../include/set" #ifndef ANDROID_ASTL_SET__ #error "Wrong header included!!" #endif #include <climits> #include <cstring> #include <string> #include "common.h" namespace android { using std::pair; using std::set; using std::string; bool testConstructor() { set<int> s; EXPECT_TRUE(s.empty()); EXPECT_TRUE(s.size() == 0); EXPECT_TRUE(s.begin() == s.end()); EXPECT_TRUE(s.count(10) == 0); return true; } bool testInsertPOD() { set<int> s; pair<set<int>::iterator, bool> res; EXPECT_TRUE(s.count(10) == 0); res = s.insert(10); // begin should point to the element inserted. EXPECT_TRUE(res.first == s.begin()); EXPECT_TRUE(s.end() != s.begin()); EXPECT_TRUE(*(res.first) == 10); set<int>::iterator elt_in_set = res.first; EXPECT_TRUE(*(s.begin()) == 10); // insert was a success. EXPECT_TRUE(res.second); // element can be found EXPECT_TRUE(s.count(10) == 1); // Try to insert the same element again, this time it should fail. res = s.insert(10); // insert was a failure. EXPECT_TRUE(!res.second); // Insert should return an iterator pointing to the element // already in the set. EXPECT_TRUE(res.first == elt_in_set); // element can still be found EXPECT_TRUE(s.count(10) == 1); return true; } bool testInsertString() { set<string> s; pair<set<string>::iterator, bool> res; string str("a string"); string str_equiv("a string"); string str_missing("a string not in the set"); EXPECT_TRUE(s.count(str) == 0); res = s.insert(str); // begin should point to the element inserted. EXPECT_TRUE(res.first == s.begin()); set<string>::iterator marker = res.first; EXPECT_TRUE(s.end() != s.begin()); EXPECT_TRUE(*(res.first) == str); EXPECT_TRUE(*(s.begin()) == str); // insert was a success. EXPECT_TRUE(res.second); // element can be found EXPECT_TRUE(s.count(str) == 1); // Try to insert an element equivalent. res = s.insert(str_equiv); // insert did not happen since there is one string equivalent // already. EXPECT_TRUE(!res.second); // The iterator points to the copy already in the set. EXPECT_TRUE(res.first == marker); // element can still be found EXPECT_TRUE(s.count(str) == 1); EXPECT_TRUE(s.count(str_equiv) == 1); return true; } } // namespace android int main(int argc, char **argv) { FAIL_UNLESS(testConstructor); FAIL_UNLESS(testInsertPOD); FAIL_UNLESS(testInsertString); return kPassed; }