/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "gtest/gtest.h"
#include "chre/util/optional.h"
using chre::Optional;
TEST(Optional, NoValueByDefault) {
Optional<int> myInt;
EXPECT_FALSE(myInt.has_value());
}
TEST(Optional, NonDefaultValueByDefault) {
Optional<int> myInt(0x1337);
EXPECT_TRUE(myInt.has_value());
EXPECT_EQ(*myInt, 0x1337);
}
TEST(Optional, NonDefaultMovedValueByDefault) {
Optional<int> myInt(std::move(0x1337));
EXPECT_TRUE(myInt.has_value());
EXPECT_EQ(*myInt, 0x1337);
}
TEST(Optional, CopyAssignAndRead) {
Optional<int> myInt;
EXPECT_FALSE(myInt.has_value());
myInt = 0x1337;
EXPECT_EQ(*myInt, 0x1337);
EXPECT_TRUE(myInt.has_value());
myInt.reset();
EXPECT_FALSE(myInt.has_value());
}
TEST(Optional, MoveAssignAndRead) {
Optional<int> myInt;
EXPECT_FALSE(myInt.has_value());
myInt = std::move(0xcafe);
EXPECT_TRUE(myInt.has_value());
EXPECT_EQ(*myInt, 0xcafe);
}
TEST(Optional, OptionalMoveAssignAndRead) {
Optional<int> myInt(0x1337);
Optional<int> myMovedInt;
EXPECT_FALSE(myMovedInt.has_value());
myMovedInt = std::move(myInt);
EXPECT_FALSE(myInt.has_value());
EXPECT_TRUE(myMovedInt.has_value());
EXPECT_EQ(*myMovedInt, 0x1337);
}
TEST(Optional, OptionalCopyAssignAndRead) {
Optional<int> myInt(0x1337);
Optional<int> myCopiedInt;
EXPECT_FALSE(myCopiedInt.has_value());
myCopiedInt = myInt;
EXPECT_TRUE(myInt.has_value());
EXPECT_TRUE(myCopiedInt.has_value());
EXPECT_EQ(*myInt, 0x1337);
EXPECT_EQ(*myCopiedInt, 0x1337);
}