Eliminate YGFloatOptional::getValue()
Summary: @public `YGFloatOptional::getValue()` has the unfortunate property of calling `std::exit` if the wrapped value is undefined. That forces `x.isUndefined() ? fallback : x.getValue()` as access pattern. Here, we replace that by introducing `YGFloatOptional::orElse(float)` which encapsulates that pattern. Other additions are `orElseGet([] { … })` and some extra operators. Reviewed By: SidharthGuglani Differential Revision: D13209152 fbshipit-source-id: 4e5deceaaaaf8eaed44846a8c152cc8b235e815c
This commit is contained in:
committed by
Facebook Github Bot
parent
ed3b54b603
commit
50ec35575f
@@ -6,7 +6,8 @@
|
||||
*/
|
||||
#include <yoga/YGFloatOptional.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <yoga/YGValue.h>
|
||||
#include <yoga/YGFloatOptional.h>
|
||||
#include <yoga/Yoga.h>
|
||||
|
||||
constexpr auto empty = YGFloatOptional{};
|
||||
constexpr auto zero = YGFloatOptional{0.0f};
|
||||
@@ -15,9 +16,10 @@ constexpr auto positive = YGFloatOptional{1234.5f};
|
||||
constexpr auto negative = YGFloatOptional{-9876.5f};
|
||||
|
||||
TEST(YGFloatOptional, value) {
|
||||
ASSERT_EQ(zero.getValue(), 0.0f);
|
||||
ASSERT_EQ(positive.getValue(), 1234.5f);
|
||||
ASSERT_EQ(negative.getValue(), -9876.5f);
|
||||
ASSERT_EQ(zero.unwrap(), 0.0f);
|
||||
ASSERT_EQ(positive.unwrap(), 1234.5f);
|
||||
ASSERT_EQ(negative.unwrap(), -9876.5f);
|
||||
ASSERT_TRUE(YGFloatIsUndefined(empty.unwrap()));
|
||||
|
||||
ASSERT_TRUE(empty.isUndefined());
|
||||
ASSERT_FALSE(zero.isUndefined());
|
||||
@@ -41,7 +43,7 @@ TEST(YGFloatOptional, equality) {
|
||||
ASSERT_FALSE(one == positive);
|
||||
|
||||
ASSERT_TRUE(negative == negative);
|
||||
ASSERT_TRUE(negative == negative.getValue());
|
||||
ASSERT_TRUE(negative == negative.unwrap());
|
||||
ASSERT_FALSE(negative == zero);
|
||||
}
|
||||
|
||||
@@ -62,7 +64,7 @@ TEST(YGFloatOptional, inequality) {
|
||||
ASSERT_TRUE(one != positive);
|
||||
|
||||
ASSERT_FALSE(negative != negative);
|
||||
ASSERT_FALSE(negative != negative.getValue());
|
||||
ASSERT_FALSE(negative != negative.unwrap());
|
||||
ASSERT_TRUE(negative != zero);
|
||||
}
|
||||
|
||||
@@ -72,6 +74,10 @@ TEST(YGFloatOptional, greater) {
|
||||
ASSERT_FALSE(empty > one);
|
||||
ASSERT_FALSE(empty > positive);
|
||||
ASSERT_FALSE(empty > negative);
|
||||
ASSERT_FALSE(zero > empty);
|
||||
ASSERT_FALSE(one > empty);
|
||||
ASSERT_FALSE(positive > empty);
|
||||
ASSERT_FALSE(negative > empty);
|
||||
|
||||
ASSERT_TRUE(zero > negative);
|
||||
ASSERT_FALSE(zero > zero);
|
||||
@@ -93,6 +99,10 @@ TEST(YGFloatOptional, lower) {
|
||||
ASSERT_FALSE(empty < one);
|
||||
ASSERT_FALSE(empty < positive);
|
||||
ASSERT_FALSE(empty < negative);
|
||||
ASSERT_FALSE(zero < empty);
|
||||
ASSERT_FALSE(one < empty);
|
||||
ASSERT_FALSE(positive < empty);
|
||||
ASSERT_FALSE(negative < empty);
|
||||
|
||||
ASSERT_TRUE(negative < zero);
|
||||
ASSERT_FALSE(zero < zero);
|
||||
@@ -156,8 +166,40 @@ TEST(YGFloatOptional, addition) {
|
||||
ASSERT_EQ(zero + one, one);
|
||||
ASSERT_EQ(
|
||||
negative + positive,
|
||||
YGFloatOptional{negative.getValue() + positive.getValue()});
|
||||
YGFloatOptional{negative.unwrap() + positive.unwrap()});
|
||||
ASSERT_EQ(empty + zero, empty);
|
||||
ASSERT_EQ(empty + empty, empty);
|
||||
ASSERT_EQ(negative + empty, empty);
|
||||
}
|
||||
|
||||
TEST(YGFloatOptional, subtraction) {
|
||||
ASSERT_EQ(zero - one, YGFloatOptional{-1.0f});
|
||||
ASSERT_EQ(
|
||||
negative - positive,
|
||||
YGFloatOptional{negative.unwrap() - positive.unwrap()});
|
||||
ASSERT_EQ(empty - zero, empty);
|
||||
ASSERT_EQ(empty - empty, empty);
|
||||
ASSERT_EQ(negative - empty, empty);
|
||||
}
|
||||
|
||||
TEST(YGFloatOptional, unary_minus) {
|
||||
ASSERT_EQ(-zero, zero);
|
||||
ASSERT_EQ(-negative, YGFloatOptional{-negative.unwrap()});
|
||||
ASSERT_EQ(-positive, YGFloatOptional{-positive.unwrap()});
|
||||
ASSERT_EQ(-empty, empty);
|
||||
}
|
||||
|
||||
TEST(YGFloatOptional, orElse) {
|
||||
ASSERT_EQ(empty.orElse(1.23f), 1.23f);
|
||||
ASSERT_TRUE(YGFloatIsUndefined(empty.orElse(YGUndefined)));
|
||||
ASSERT_EQ(one.orElse(1.23f), 1.0f);
|
||||
}
|
||||
|
||||
TEST(YGFloatOptional, orElseGet) {
|
||||
auto x = empty.orElseGet([] { return 1.23f; });
|
||||
ASSERT_EQ(x, 1.23f);
|
||||
ASSERT_TRUE(YGFloatIsUndefined(empty.orElseGet([] { return YGUndefined; })));
|
||||
|
||||
auto y = one.orElseGet([] { return 1.23f; });
|
||||
ASSERT_EQ(y, 1.0f);
|
||||
}
|
||||
|
Reference in New Issue
Block a user