diff options
Diffstat (limited to 'tests/test_set.cpp')
-rw-r--r-- | tests/test_set.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/tests/test_set.cpp b/tests/test_set.cpp new file mode 100644 index 0000000..e58b921 --- /dev/null +++ b/tests/test_set.cpp @@ -0,0 +1,139 @@ +/* -*- 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; +} |