blob: 6a6f06e3fbcacf0c07c7144001e7db7cab8b64b5 [file] [log] [blame]
// Copyright 2020 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 <fidl/test/misc/cpp/fidl.h>
#include <zxtest/zxtest.h>
namespace fidl {
namespace test {
namespace misc {
namespace {
TEST(Enum, Defaults) {
StrictEnum strict_enum_default = {};
FlexibleEnum flexible_enum_default = {};
EXPECT_EQ(0u, static_cast<uint32_t>(strict_enum_default));
EXPECT_EQ(0u, static_cast<uint32_t>(flexible_enum_default));
}
TEST(FlexibleEnum, IsUnknown) {
EXPECT_FALSE(FlexibleEnum::MEMBER_A.IsUnknown());
EXPECT_FALSE(FlexibleEnum::MEMBER_B.IsUnknown());
EXPECT_FALSE(FlexibleEnum::MEMBER_C.IsUnknown());
EXPECT_TRUE(FlexibleEnum::MEMBER_CUSTOM_UNKNOWN.IsUnknown());
EXPECT_TRUE(FlexibleEnum::Unknown().IsUnknown());
}
TEST(FlexibleEnum, Equality) {
EXPECT_TRUE(FlexibleEnum::MEMBER_A == FlexibleEnum(23));
EXPECT_TRUE(FlexibleEnum::MEMBER_B == FlexibleEnum(34));
EXPECT_TRUE(FlexibleEnum::MEMBER_C == FlexibleEnum(45));
EXPECT_TRUE(FlexibleEnum::Unknown() == FlexibleEnum::MEMBER_CUSTOM_UNKNOWN);
EXPECT_FALSE(FlexibleEnum::MEMBER_A != FlexibleEnum(23));
EXPECT_FALSE(FlexibleEnum::MEMBER_B != FlexibleEnum(34));
EXPECT_FALSE(FlexibleEnum::MEMBER_C != FlexibleEnum(45));
EXPECT_FALSE(FlexibleEnum::Unknown() != FlexibleEnum::MEMBER_CUSTOM_UNKNOWN);
}
TEST(EmptyFlexibleEnum, IsUnknown) { EXPECT_TRUE(EmptyFlexibleEnum::Unknown().IsUnknown()); }
TEST(Enum, Switch) {
// This is a compilation test ensuring that we can use strict and flexible
// enums in switch statements.
auto switch_on_strict = [](StrictEnum value) -> uint32_t {
switch (value) {
case StrictEnum::MEMBER_A:
return 4000u;
case StrictEnum::MEMBER_B:
return 5000u;
case StrictEnum::MEMBER_C:
return 6000u;
}
};
EXPECT_EQ(6000u, switch_on_strict(StrictEnum::MEMBER_C));
auto switch_on_flexible = [](FlexibleEnum value) -> uint32_t {
switch (value) {
case FlexibleEnum::MEMBER_A:
return 4000u;
case FlexibleEnum::MEMBER_B:
return 5000u;
default:
return 6000u;
}
};
EXPECT_EQ(6000u, switch_on_flexible(FlexibleEnum::MEMBER_C));
}
} // namespace
} // namespace misc
} // namespace test
} // namespace fidl