Summary: X-link: https://github.com/facebook/litho/pull/976 Pull Request resolved: https://github.com/facebook/yoga/pull/1586 X-link: https://github.com/facebook/react-native/pull/43299 Add the React Clang Tidy config to Yoga, run the auto fixes, and make some manual mechanical tweaks. Notably, the automatic changes to the infra for generating a Yoga tree from JSON capture make it 70% faster. Before: {F1463947076} After: {F1463946802} This also cleans up all the no-op shallow const parameters in headers. {F1463943386} Not all checks are available in all environments, but that is okay, as Clang Tidy will gracefully skip them. Changelog: [Internal] Reviewed By: sammy-SC Differential Revision: D54461054 fbshipit-source-id: dbd2d9ce51afd3174d1f2c6d439fa7d08baff46f
162 lines
4.5 KiB
C++
162 lines
4.5 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and 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/style/SmallValueBuffer.h>
|
|
|
|
namespace facebook::yoga {
|
|
|
|
constexpr size_t kBufferSize = 4;
|
|
|
|
TEST(SmallValueBuffer, copy_assignment_with_overflow) {
|
|
std::array<uint16_t, kBufferSize + 1> handles{};
|
|
|
|
SmallValueBuffer<kBufferSize> buffer1;
|
|
for (size_t i = 0; i < kBufferSize + 1; ++i) {
|
|
handles[i] = buffer1.push(static_cast<uint32_t>(i));
|
|
}
|
|
|
|
SmallValueBuffer<kBufferSize> buffer2 = buffer1;
|
|
for (size_t i = 0; i < kBufferSize + 1; ++i) {
|
|
EXPECT_EQ(buffer2.get32(handles[i]), i);
|
|
}
|
|
|
|
auto handle = buffer1.push(42u);
|
|
EXPECT_EQ(buffer1.get32(handle), 42);
|
|
|
|
EXPECT_THROW({ buffer2.get32(handle); }, std::logic_error);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, push_32) {
|
|
uint32_t magic = 88567114u;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle = buffer.push(magic);
|
|
EXPECT_EQ(buffer.get32(handle), magic);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, push_overflow) {
|
|
uint32_t magic1 = 88567114u;
|
|
uint32_t magic2 = 351012214u;
|
|
uint32_t magic3 = 146122128u;
|
|
uint32_t magic4 = 2171092154u;
|
|
uint32_t magic5 = 2269016953u;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
EXPECT_EQ(buffer.get32(buffer.push(magic1)), magic1);
|
|
EXPECT_EQ(buffer.get32(buffer.push(magic2)), magic2);
|
|
EXPECT_EQ(buffer.get32(buffer.push(magic3)), magic3);
|
|
EXPECT_EQ(buffer.get32(buffer.push(magic4)), magic4);
|
|
EXPECT_EQ(buffer.get32(buffer.push(magic5)), magic5);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, push_64) {
|
|
uint64_t magic = 118138934255546108ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle = buffer.push(magic);
|
|
EXPECT_EQ(buffer.get64(handle), magic);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, push_64_overflow) {
|
|
uint64_t magic1 = 1401612388342512ull;
|
|
uint64_t magic2 = 118712305386210ull;
|
|
uint64_t magic3 = 752431801563359011ull;
|
|
uint64_t magic4 = 118138934255546108ull;
|
|
uint64_t magic5 = 237115443124116111ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
EXPECT_EQ(buffer.get64(buffer.push(magic1)), magic1);
|
|
EXPECT_EQ(buffer.get64(buffer.push(magic2)), magic2);
|
|
EXPECT_EQ(buffer.get64(buffer.push(magic3)), magic3);
|
|
EXPECT_EQ(buffer.get64(buffer.push(magic4)), magic4);
|
|
EXPECT_EQ(buffer.get64(buffer.push(magic5)), magic5);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, push_64_after_32) {
|
|
uint32_t magic32 = 88567114u;
|
|
uint64_t magic64 = 118712305386210ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle32 = buffer.push(magic32);
|
|
EXPECT_EQ(buffer.get32(handle32), magic32);
|
|
|
|
auto handle64 = buffer.push(magic64);
|
|
EXPECT_EQ(buffer.get64(handle64), magic64);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, push_32_after_64) {
|
|
uint32_t magic32 = 88567114u;
|
|
uint64_t magic64 = 118712305386210ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle64 = buffer.push(magic64);
|
|
EXPECT_EQ(buffer.get64(handle64), magic64);
|
|
|
|
auto handle32 = buffer.push(magic32);
|
|
EXPECT_EQ(buffer.get32(handle32), magic32);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, replace_32_with_32) {
|
|
uint32_t magic1 = 88567114u;
|
|
uint32_t magic2 = 351012214u;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle = buffer.push(magic1);
|
|
|
|
EXPECT_EQ(buffer.get32(buffer.replace(handle, magic2)), magic2);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, replace_32_with_64) {
|
|
uint32_t magic32 = 88567114u;
|
|
uint64_t magic64 = 118712305386210ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle = buffer.push(magic32);
|
|
|
|
EXPECT_EQ(buffer.get64(buffer.replace(handle, magic64)), magic64);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, replace_32_with_64_causes_overflow) {
|
|
uint32_t magic1 = 88567114u;
|
|
uint32_t magic2 = 351012214u;
|
|
uint32_t magic3 = 146122128u;
|
|
uint32_t magic4 = 2171092154u;
|
|
|
|
uint64_t magic64 = 118712305386210ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle1 = buffer.push(magic1);
|
|
buffer.push(magic2);
|
|
buffer.push(magic3);
|
|
buffer.push(magic4);
|
|
|
|
EXPECT_EQ(buffer.get64(buffer.replace(handle1, magic64)), magic64);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, replace_64_with_32) {
|
|
uint32_t magic32 = 88567114u;
|
|
uint64_t magic64 = 118712305386210ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle = buffer.push(magic64);
|
|
|
|
EXPECT_EQ(buffer.get32(buffer.replace(handle, magic32)), magic32);
|
|
}
|
|
|
|
TEST(SmallValueBuffer, replace_64_with_64) {
|
|
uint64_t magic1 = 1401612388342512ull;
|
|
uint64_t magic2 = 118712305386210ull;
|
|
|
|
SmallValueBuffer<kBufferSize> buffer;
|
|
auto handle = buffer.push(magic1);
|
|
|
|
EXPECT_EQ(buffer.get64(buffer.replace(handle, magic2)), magic2);
|
|
}
|
|
|
|
} // namespace facebook::yoga
|