diff --git a/tests/YGValueTest.cpp b/tests/YGValueTest.cpp new file mode 100644 index 00000000..2f2385af --- /dev/null +++ b/tests/YGValueTest.cpp @@ -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 + +#include + +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})); +} diff --git a/yoga/YGValue.h b/yoga/YGValue.h index 2395e07c..170047ea 100644 --- a/yoga/YGValue.h +++ b/yoga/YGValue.h @@ -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(value), YGUnitPoint}; +} +inline YGValue operator"" _pt(unsigned long long value) { + return operator"" _pt(static_cast(value)); +} + +inline YGValue operator"" _percent(long double value) { + return YGValue{static_cast(value), YGUnitPercent}; +} +inline YGValue operator"" _percent(unsigned long long value) { + return operator"" _percent(static_cast(value)); +} + +} // namespace literals +} // namespace yoga +} // namespace facebook + #endif