blob: e9cf00832a0e4af5772204200a961660ef9ec754 [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 "lib/fidl/cpp/vector.h"
#include "gtest/gtest.h"
namespace fidl {
namespace {
TEST(VectorPtr, Control) {
VectorPtr<int> vector;
EXPECT_TRUE(vector.is_null());
EXPECT_FALSE(vector);
vector->push_back(1);
EXPECT_FALSE(vector.is_null());
EXPECT_TRUE(vector);
std::vector<int> reference = {1, 2, 3};
vector.reset(reference);
EXPECT_FALSE(vector.is_null());
EXPECT_TRUE(vector);
EXPECT_EQ(reference, vector.get());
EXPECT_EQ(reference, *vector);
EXPECT_EQ(3u, vector->size());
VectorPtr<int> other(std::move(vector));
EXPECT_EQ(reference, *other);
std::vector<int> taken = other.take();
EXPECT_TRUE(other.is_null());
EXPECT_EQ(3u, taken.size());
VectorPtr<int> sized(3);
EXPECT_FALSE(sized.is_null());
EXPECT_TRUE(sized);
EXPECT_EQ(3u, sized->size());
EXPECT_EQ(0, sized->at(0));
}
TEST(VectorPtr, ResetMoveOnlyType) {
std::vector<std::unique_ptr<int>> original;
// can't use initializer list on a move-only type...
original.push_back(std::make_unique<int>(1));
original.push_back(std::make_unique<int>(2));
original.push_back(std::make_unique<int>(3));
VectorPtr<std::unique_ptr<int>> vector;
vector.reset(std::move(original));
EXPECT_FALSE(vector.is_null());
EXPECT_TRUE(vector);
EXPECT_EQ(1, *vector->at(0));
EXPECT_EQ(2, *vector->at(1));
EXPECT_EQ(3, *vector->at(2));
EXPECT_EQ(3u, vector->size());
}
} // namespace
} // namespace fidl