Path: blob/master/Utilities/cmcppdap/src/optional_test.cpp
3153 views
// Copyright 2019 Google LLC1//2// Licensed under the Apache License, Version 2.0 (the "License");3// you may not use this file except in compliance with the License.4// You may obtain a copy of the License at5//6// https://www.apache.org/licenses/LICENSE-2.07//8// Unless required by applicable law or agreed to in writing, software9// distributed under the License is distributed on an "AS IS" BASIS,10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.11// See the License for the specific language governing permissions and12// limitations under the License.1314#include "dap/optional.h"1516#include "gmock/gmock.h"17#include "gtest/gtest.h"1819#include <string>2021TEST(Optional, EmptyConstruct) {22dap::optional<std::string> opt;23ASSERT_FALSE(opt);24ASSERT_FALSE(opt.has_value());25}2627TEST(Optional, ValueConstruct) {28dap::optional<int> opt(10);29ASSERT_TRUE(opt);30ASSERT_TRUE(opt.has_value());31ASSERT_EQ(opt.value(), 10);32}3334TEST(Optional, CopyConstruct) {35dap::optional<std::string> a("meow");36dap::optional<std::string> b(a);37ASSERT_EQ(a, b);38ASSERT_EQ(a.value(), "meow");39ASSERT_EQ(b.value(), "meow");40}4142TEST(Optional, CopyCastConstruct) {43dap::optional<int> a(10);44dap::optional<uint16_t> b(a);45ASSERT_EQ(a, b);46ASSERT_EQ(b.value(), (uint16_t)10);47}4849TEST(Optional, MoveConstruct) {50dap::optional<std::string> a("meow");51dap::optional<std::string> b(std::move(a));52ASSERT_EQ(b.value(), "meow");53}5455TEST(Optional, MoveCastConstruct) {56dap::optional<int> a(10);57dap::optional<uint16_t> b(std::move(a));58ASSERT_EQ(b.value(), (uint16_t)10);59}6061TEST(Optional, AssignValue) {62dap::optional<std::string> a;63std::string b = "meow";64a = b;65ASSERT_EQ(a.value(), "meow");66ASSERT_EQ(b, "meow");67}6869TEST(Optional, AssignOptional) {70dap::optional<std::string> a;71dap::optional<std::string> b("meow");72a = b;73ASSERT_EQ(a.value(), "meow");74ASSERT_EQ(b.value(), "meow");75}7677TEST(Optional, MoveAssignOptional) {78dap::optional<std::string> a;79dap::optional<std::string> b("meow");80a = std::move(b);81ASSERT_EQ(a.value(), "meow");82}8384TEST(Optional, StarDeref) {85dap::optional<std::string> a("meow");86ASSERT_EQ(*a, "meow");87}8889TEST(Optional, StarDerefConst) {90const dap::optional<std::string> a("meow");91ASSERT_EQ(*a, "meow");92}9394TEST(Optional, ArrowDeref) {95struct S {96int i;97};98dap::optional<S> a(S{10});99ASSERT_EQ(a->i, 10);100}101102TEST(Optional, ArrowDerefConst) {103struct S {104int i;105};106const dap::optional<S> a(S{10});107ASSERT_EQ(a->i, 10);108}109110TEST(Optional, Value) {111const dap::optional<std::string> a("meow");112ASSERT_EQ(a.value(), "meow");113}114115TEST(Optional, ValueDefault) {116const dap::optional<std::string> a;117const dap::optional<std::string> b("woof");118ASSERT_EQ(a.value("meow"), "meow");119ASSERT_EQ(b.value("meow"), "woof");120}121122TEST(Optional, CompareLT) {123ASSERT_FALSE(dap::optional<int>(5) < dap::optional<int>(3));124ASSERT_FALSE(dap::optional<int>(5) < dap::optional<int>(5));125ASSERT_TRUE(dap::optional<int>(5) < dap::optional<int>(10));126ASSERT_TRUE(dap::optional<int>() < dap::optional<int>(10));127ASSERT_FALSE(dap::optional<int>() < dap::optional<int>());128}129130TEST(Optional, CompareLE) {131ASSERT_FALSE(dap::optional<int>(5) <= dap::optional<int>(3));132ASSERT_TRUE(dap::optional<int>(5) <= dap::optional<int>(5));133ASSERT_TRUE(dap::optional<int>(5) <= dap::optional<int>(10));134ASSERT_TRUE(dap::optional<int>() <= dap::optional<int>(10));135ASSERT_TRUE(dap::optional<int>() <= dap::optional<int>());136}137138TEST(Optional, CompareGT) {139ASSERT_TRUE(dap::optional<int>(5) > dap::optional<int>(3));140ASSERT_FALSE(dap::optional<int>(5) > dap::optional<int>(5));141ASSERT_FALSE(dap::optional<int>(5) > dap::optional<int>(10));142ASSERT_FALSE(dap::optional<int>() > dap::optional<int>(10));143ASSERT_FALSE(dap::optional<int>() > dap::optional<int>());144}145146TEST(Optional, CompareGE) {147ASSERT_TRUE(dap::optional<int>(5) >= dap::optional<int>(3));148ASSERT_TRUE(dap::optional<int>(5) >= dap::optional<int>(5));149ASSERT_FALSE(dap::optional<int>(5) >= dap::optional<int>(10));150ASSERT_FALSE(dap::optional<int>() >= dap::optional<int>(10));151ASSERT_TRUE(dap::optional<int>() >= dap::optional<int>());152}153154TEST(Optional, CompareEQ) {155ASSERT_FALSE(dap::optional<int>(5) == dap::optional<int>(3));156ASSERT_TRUE(dap::optional<int>(5) == dap::optional<int>(5));157ASSERT_FALSE(dap::optional<int>(5) == dap::optional<int>(10));158ASSERT_FALSE(dap::optional<int>() == dap::optional<int>(10));159ASSERT_TRUE(dap::optional<int>() == dap::optional<int>());160}161162TEST(Optional, CompareNEQ) {163ASSERT_TRUE(dap::optional<int>(5) != dap::optional<int>(3));164ASSERT_FALSE(dap::optional<int>(5) != dap::optional<int>(5));165ASSERT_TRUE(dap::optional<int>(5) != dap::optional<int>(10));166ASSERT_TRUE(dap::optional<int>() != dap::optional<int>(10));167ASSERT_FALSE(dap::optional<int>() != dap::optional<int>());168}169170171