From 9650c1903da021a5c397b79658176c54f36f10ce Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 22 Nov 2019 04:28:49 -0800 Subject: [PATCH] converts BitfieldTests to BitUtilsTest Summary: Use BitUtils for testing bit operations Reviewed By: astreet Differential Revision: D18596312 fbshipit-source-id: 83f93cd7f1f056b3f64070debbc452877b44ac7a --- tests/BitUtilsTest.cpp | 206 ++++++++++++++++++++++++++++++++++ tests/BitfieldTest.cpp | 244 ----------------------------------------- 2 files changed, 206 insertions(+), 244 deletions(-) create mode 100644 tests/BitUtilsTest.cpp delete mode 100644 tests/BitfieldTest.cpp diff --git a/tests/BitUtilsTest.cpp b/tests/BitUtilsTest.cpp new file mode 100644 index 00000000..d20ee307 --- /dev/null +++ b/tests/BitUtilsTest.cpp @@ -0,0 +1,206 @@ +/* + * 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 +#include + +namespace facebook { +namespace yoga { + +TEST(BitUtils, one_boolean_defaults_to_false) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + static_assert( + detail::getBooleanData(flags, 0) == false, + "first boolean member must default to false"); +} + +TEST(BitUtils, one_boolean_can_be_initialized_to_true) { + constexpr uint8_t flags = 1; + + ASSERT_EQ(detail::getBooleanData(flags, 0), true); + static_assert( + detail::getBooleanData(flags, 0) == true, + "first boolean member must be initialized to true"); +} + +TEST(BitUtils, one_boolean_can_be_set_to_true) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 0, true); + ASSERT_EQ(detail::getBooleanData(flags, 0), true); +} + +TEST(BitUtils, second_boolean_defaults_to_false) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getBooleanData(flags, 1), false); + static_assert( + detail::getBooleanData(flags, 1) == false, + "second boolean member must default to false"); +} + +TEST(BitUtils, second_boolean_can_be_initialized_to_true) { + constexpr uint8_t flags = 2; + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), true); + static_assert( + detail::getBooleanData(flags, 0) == false, + "first boolean member must default to false"); + static_assert( + detail::getBooleanData(flags, 1) == true, + "second boolean member must be initialized to true"); +} + +TEST(BitUtils, second_boolean_can_be_set_to_true) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 1, true); + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), true); +} + +TEST(BitUtils, third_boolean_defaults_to_false) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getBooleanData(flags, 2), false); + static_assert( + detail::getBooleanData(flags, 2) == false, + "second boolean member must default to false"); +} + +TEST(BitUtils, third_boolean_can_be_initialized_to_true) { + constexpr uint8_t flags = 4; + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), false); + ASSERT_EQ(detail::getBooleanData(flags, 2), true); + static_assert( + detail::getBooleanData(flags, 0) == false, + "first boolean member must default to false"); + static_assert( + detail::getBooleanData(flags, 1) == false, + "second boolean member must default to false"); + static_assert( + detail::getBooleanData(flags, 2) == true, + "second boolean member must be initialized to true"); +} + +TEST(BitUtils, third_boolean_can_be_set_to_true) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 2, true); + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), false); + ASSERT_EQ(detail::getBooleanData(flags, 2), true); +} + +TEST(BitUtils, setting_boolean_values_does_not_spill_over) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 1, (bool) 7); + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), true); + ASSERT_EQ(detail::getBooleanData(flags, 2), false); +} + +TEST(BitUtils, first_enum_defaults_to_0) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getEnumData(flags, 0), YGAlignAuto); + static_assert( + detail::getEnumData(flags, 0) == YGAlignAuto, + "first enum member must default to 0"); +} + +TEST(BitUtils, first_enum_can_be_set) { + uint8_t flags = 0; + + detail::setEnumData(flags, 0, YGAlignSpaceBetween); + + ASSERT_EQ(detail::getEnumData(flags, 0), YGAlignSpaceBetween); +} + +TEST(BitUtils, second_enum_defaults_to_0) { + constexpr uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t edgeOffset = 3; + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getEnumData(flags, edgeOffset), YGEdgeLeft); + static_assert( + detail::getEnumData(flags, alignOffset) == YGAlignAuto, + "first enum member must default to 0"); + static_assert( + detail::getEnumData(flags, edgeOffset) == YGEdgeLeft, + "second enum member must default to 0"); +} + +TEST(BitUtils, second_enum_can_be_set) { + uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t edgeOffset = 3; + + detail::setEnumData(flags, edgeOffset, YGEdgeAll); + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getEnumData(flags, edgeOffset), YGEdgeAll); +} + +TEST(BitUtils, third_enum_defaults_to_0) { + constexpr uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t boolOffset = 3; + static constexpr size_t edgesOffset = 4; + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getBooleanData(flags, boolOffset), false); + ASSERT_EQ(detail::getEnumData(flags, edgesOffset), YGEdgeLeft); + static_assert( + detail::getEnumData(flags, alignOffset) == YGAlignAuto, + "first enum member must default to 0"); + static_assert( + detail::getBooleanData(flags, boolOffset) == false, + "middle boolean member must default to false"); + static_assert( + detail::getEnumData(flags, edgesOffset) == YGEdgeLeft, + "last enum member must default to 0"); +} + +TEST(BitUtils, third_enum_can_be_set) { + uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t boolOffset = 3; + static constexpr size_t edgesOffset = 4; + + detail::setEnumData(flags, edgesOffset, YGEdgeVertical); + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getBooleanData(flags, boolOffset), false); + ASSERT_EQ(detail::getEnumData(flags, edgesOffset), YGEdgeVertical); +} + +TEST(BitUtils, setting_values_does_not_spill_over) { + uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t edgesOffset = 3; + static constexpr size_t boolOffset = 7; + + detail::setEnumData(flags, edgesOffset, (YGEdge) 0xffffff); + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), 0); + ASSERT_EQ(detail::getBooleanData(flags, boolOffset), false); + ASSERT_EQ(detail::getEnumData(flags, edgesOffset), 0xf); +} + +} // namespace yoga +} // namespace facebook diff --git a/tests/BitfieldTest.cpp b/tests/BitfieldTest.cpp deleted file mode 100644 index bb999c64..00000000 --- a/tests/BitfieldTest.cpp +++ /dev/null @@ -1,244 +0,0 @@ -/* - * 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 -#include - -namespace facebook { -namespace yoga { - -TEST(Bitfield, one_boolean_defaults_to_false) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), false); - static_assert( - bf.at<0>() == false, "first boolean member must default to false"); -} - -TEST(Bitfield, one_boolean_can_be_initialized_to_true) { - constexpr auto bf = Bitfield{true}; - - ASSERT_EQ(bf.at<0>(), true); - static_assert( - bf.at<0>() == true, "first boolean member must be initialized to true"); -} - -TEST(Bitfield, one_boolean_can_be_set_to_true) { - auto bf = Bitfield{}; - - bf.at<0>() = true; - ASSERT_EQ(bf.at<0>(), true); -} - -TEST(Bitfield, second_boolean_defaults_to_false) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<1>(), false); - static_assert( - bf.at<1>() == false, "second boolean member must default to false"); -} - -TEST(Bitfield, second_boolean_can_be_initialized_to_true) { - constexpr auto bf = Bitfield{false, true}; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); - static_assert( - bf.at<0>() == false, "first boolean member must default to false"); - static_assert( - bf.at<1>() == true, "second boolean member must be initialized to true"); -} - -TEST(Bitfield, second_boolean_can_be_set_to_true) { - auto bf = Bitfield{}; - - bf.at<1>() = true; - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); -} - -TEST(Bitfield, third_boolean_defaults_to_false) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<2>(), false); - static_assert( - bf.at<2>() == false, "second boolean member must default to false"); -} - -TEST(Bitfield, third_boolean_can_be_initialized_to_true) { - constexpr auto bf = Bitfield{false, false, true}; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), true); - static_assert( - bf.at<0>() == false, "first boolean member must default to false"); - static_assert( - bf.at<1>() == false, "second boolean member must default to false"); - static_assert( - bf.at<2>() == true, "second boolean member must be initialized to true"); -} - -TEST(Bitfield, third_boolean_can_be_set_to_true) { - auto bf = Bitfield{}; - - bf.at<2>() = true; - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), true); -} - -TEST(Bitfield, initializing_boolean_values_does_not_spill_over) { - constexpr auto bf = - Bitfield{false, (bool) 7, false}; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); - ASSERT_EQ(bf.at<2>(), false); - static_assert( - bf.at<0>() == false, "first boolean member must be initialized to false"); - static_assert( - bf.at<1>() == true, "second boolean member must be initialized to true"); - static_assert( - bf.at<2>() == false, "third boolean member must be initialized to false"); -} - -TEST(Bitfield, setting_boolean_values_does_not_spill_over) { - auto bf = Bitfield{}; - - bf.at<1>() = (bool) 7; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); - ASSERT_EQ(bf.at<2>(), false); -} - -TEST(Bitfield, first_enum_defaults_to_0) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); -} - -TEST(Bitfield, first_enum_can_be_initialized) { - constexpr auto bf = Bitfield{YGAlignFlexEnd}; - - ASSERT_EQ(bf.at<0>(), YGAlignFlexEnd); - static_assert( - bf.at<0>() == YGAlignFlexEnd, - "first enum member must be initialized to YGAlignFlexEnd"); -} - -TEST(Bitfield, first_enum_can_be_set) { - auto bf = Bitfield{}; - - bf.at<0>() = YGAlignSpaceBetween; - - ASSERT_EQ(bf.at<0>(), YGAlignSpaceBetween); -} - -TEST(Bitfield, second_enum_defaults_to_0) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), YGEdgeLeft); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == YGEdgeLeft, "second enum member must default to 0"); -} - -TEST(Bitfield, second_enum_can_be_initialized) { - constexpr auto bf = - Bitfield{YGAlignAuto, YGEdgeAll}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), YGEdgeAll); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == YGEdgeAll, - "second enum member must be initialized to YGEdgeAll"); -} - -TEST(Bitfield, second_enum_can_be_set) { - auto bf = Bitfield{}; - - bf.at<1>() = YGEdgeAll; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), YGEdgeAll); -} - -TEST(Bitfield, third_enum_defaults_to_0) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), YGEdgeLeft); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == false, "middle boolean member must default to false"); - static_assert(bf.at<2>() == YGEdgeLeft, "last enum member must default to 0"); -} - -TEST(Bitfield, third_enum_can_be_initialized) { - constexpr auto bf = Bitfield{ - YGAlignAuto, false, YGEdgeVertical}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), YGEdgeVertical); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == false, "middle boolean member must default to false"); - static_assert( - bf.at<2>() == YGEdgeVertical, - "second enum member must be initialized to YGEdgeVertical"); -} - -TEST(Bitfield, third_enum_can_be_set) { - auto bf = Bitfield{}; - - bf.at<2>() = YGEdgeVertical; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), YGEdgeVertical); -} - -TEST(Bitfield, initializing_values_does_not_spill_over) { - constexpr auto bf = Bitfield{ - (YGAlign) 0, (YGEdge) 0xffffff, false}; - - ASSERT_EQ(bf.at<0>(), (YGAlign) 0); - ASSERT_EQ(bf.at<1>(), 0xf); - ASSERT_EQ(bf.at<2>(), false); - static_assert(bf.at<0>() == 0, "first enum member must be initialized to 0"); - static_assert( - bf.at<1>() == 0xf, "second member must be initialized to YGEdgeVertical"); - static_assert( - bf.at<2>() == false, "boolean member must be initialized to false"); -} - -TEST(Bitfield, setting_values_does_not_spill_over) { - auto bf = Bitfield{}; - - bf.at<1>() = (YGEdge) 0xffffff; - - ASSERT_EQ(bf.at<0>(), 0); - ASSERT_EQ(bf.at<1>(), 0xf); - ASSERT_EQ(bf.at<2>(), false); -} - -} // namespace yoga -} // namespace facebook