/*
- * Copyright 2015 Facebook, Inc.
+ * Copyright 2011-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
//
// Author: andrei.alexandrescu@fb.com
-#include <folly/Traits.h>
-#include <folly/Random.h>
-#include <folly/FBString.h>
#include <folly/FBVector.h>
-#include <gflags/gflags.h>
-
-#include <gtest/gtest.h>
#include <list>
#include <map>
#include <memory>
+
#include <boost/random.hpp>
+#include <folly/FBString.h>
+#include <folly/Random.h>
+#include <folly/Traits.h>
+#include <folly/container/Foreach.h>
+#include <folly/portability/GTest.h>
+
using namespace std;
using namespace folly;
+namespace {
+
auto static const seed = randomNumberSeed();
typedef boost::mt19937 RandomT;
static RandomT rng(seed);
-static const size_t maxString = 100;
-static const bool avoidAliasing = true;
template <class Integral1, class Integral2>
Integral2 random(Integral1 low, Integral2 up) {
}
template <class String, class Integral>
-void Num2String(String& str, Integral n) {
+void Num2String(String& str, Integral /* n */) {
str.resize(10, '\0');
sprintf(&str[0], "%ul", 10);
str.resize(strlen(str.c_str()));
}
-std::list<char> RandomList(unsigned int maxSize) {
- std::list<char> lst(random(0u, maxSize));
- std::list<char>::iterator i = lst.begin();
- for (; i != lst.end(); ++i) {
- *i = random('a', 'z');
- }
- return lst;
-}
+template <class T> T randomObject();
-template<class T> T randomObject();
-
-template<> int randomObject<int>() {
+template <> int randomObject<int>() {
return random(0, 1024);
}
-
-template<> folly::fbstring randomObject<folly::fbstring>() {
- folly::fbstring result;
- randomString(&result);
- return result;
-}
+} // namespace
////////////////////////////////////////////////////////////////////////////////
// Tests begin here
TEST(fbvector, clause_23_3_6_4_ambiguity) {
fbvector<int> v;
- fbvector<int>::const_iterator i = v.end();
- v.insert(i, 10, 20);
+ fbvector<int>::const_iterator it = v.end();
+ v.insert(it, 10, 20);
EXPECT_EQ(v.size(), 10);
- FOR_EACH (i, v) {
- EXPECT_EQ(*i, 20);
+ for (auto i : v) {
+ EXPECT_EQ(i, 20);
}
}
namespace {
class UserDefinedType { int whatevs_; };
-}
+} // namespace
FOLLY_ASSUME_FBVECTOR_COMPATIBLE(UserDefinedType);
v[0] = std::move(p);
EXPECT_FALSE(v[0].get());
- v[0].reset(new int(32));
+ v[0] = std::make_unique<int>(32);
std::unique_ptr<int> somePtr;
v.insert(v.begin(), std::move(somePtr));
EXPECT_EQ(*v[1], 32);
EXPECT_EQ(1, v[1].size());
}
-int main(int argc, char** argv) {
- testing::InitGoogleTest(&argc, argv);
- gflags::ParseCommandLineFlags(&argc, &argv, true);
- return RUN_ALL_TESTS();
+TEST(FBVector, shrink_to_fit_after_clear) {
+ fbvector<int> fb1;
+ fb1.push_back(42);
+ fb1.push_back(1337);
+ fb1.clear();
+ fb1.shrink_to_fit();
+ EXPECT_EQ(fb1.size(), 0);
+ EXPECT_EQ(fb1.capacity(), 0);
+}
+
+TEST(FBVector, zero_len) {
+ fbvector<int> fb1(0);
+ fbvector<int> fb2(0, 10);
+ fbvector<int> fb3(std::move(fb1));
+ fbvector<int> fb4;
+ fb4 = std::move(fb2);
+ fbvector<int> fb5 = fb3;
+ fbvector<int> fb6;
+ fb6 = fb4;
+ std::initializer_list<int> il = {};
+ fb6 = il;
+ fbvector<int> fb7(fb6.begin(), fb6.end());
}