User-defined literals for YGValue

Summary:
@public

Adds `_pt` and `_percent` user defined literals to create `YGValue` instances.

This allows to create `YGValue`s in the following form:

```
use namespace facebook::yoga::literals;

auto a = 123_pt; // == YGValue{123.0f, YGUnitPoint}
auto b = -12.5_percent; // == YGValue{-12.5f, YGUnitPercent}
```

Reviewed By: SidharthGuglani

Differential Revision: D13942100

fbshipit-source-id: ce1e2f9431c3e2a99c6e11896a712539cc535e0d
This commit is contained in:
David Aurelio
2019-02-04 10:21:37 -08:00
committed by Facebook Github Bot
parent d3e02b15fa
commit 9378a7a439
2 changed files with 74 additions and 0 deletions

48
tests/YGValueTest.cpp Normal file
View File

@@ -0,0 +1,48 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the LICENSE
* file in the root directory of this source tree.
*/
#include <gtest/gtest.h>
#include <yoga/YGValue.h>
TEST(YGValue, supports_equality) {
ASSERT_EQ((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitPercent}));
ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{56.7f, YGUnitPercent}));
ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitPoint}));
ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitAuto}));
ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitUndefined}));
ASSERT_EQ(
(YGValue{12.5f, YGUnitUndefined}),
(YGValue{YGUndefined, YGUnitUndefined}));
ASSERT_EQ((YGValue{0, YGUnitAuto}), (YGValue{-1, YGUnitAuto}));
}
using namespace facebook::yoga::literals;
TEST(YGValue, supports_double_point_literals) {
ASSERT_EQ(12.5_pt, (YGValue{12.5, YGUnitPoint}));
}
TEST(YGValue, supports_double_percent_literals) {
ASSERT_EQ(12.5_percent, (YGValue{12.5, YGUnitPercent}));
}
TEST(YGValue, supports_integral_point_literals) {
ASSERT_EQ(34_pt, (YGValue{34, YGUnitPoint}));
}
TEST(YGValue, supports_integral_percent_literals) {
ASSERT_EQ(125_percent, (YGValue{125, YGUnitPercent}));
}
TEST(YGValue, supports_negative_point_literals) {
ASSERT_EQ(-34.5_pt, (YGValue{-34.5, YGUnitPoint}));
}
TEST(YGValue, supports_negative_percent_literals) {
ASSERT_EQ(-34.5_percent, (YGValue{-34.5, YGUnitPercent}));
}

View File

@@ -54,4 +54,30 @@ inline bool operator!=(const YGValue& lhs, const YGValue& rhs) {
return !(lhs == rhs);
}
inline YGValue operator-(const YGValue& value) {
return {-value.value, value.unit};
}
namespace facebook {
namespace yoga {
namespace literals {
inline YGValue operator"" _pt(long double value) {
return YGValue{static_cast<float>(value), YGUnitPoint};
}
inline YGValue operator"" _pt(unsigned long long value) {
return operator"" _pt(static_cast<long double>(value));
}
inline YGValue operator"" _percent(long double value) {
return YGValue{static_cast<float>(value), YGUnitPercent};
}
inline YGValue operator"" _percent(unsigned long long value) {
return operator"" _percent(static_cast<long double>(value));
}
} // namespace literals
} // namespace yoga
} // namespace facebook
#endif