Bug 266950
| Summary: | Add more `LayoutUnit::fromFloat*` API tests from Blink / Chromium | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Ahmad Saleem <ahmad.saleem792> |
| Component: | Layout and Rendering | Assignee: | Nobody <webkit-unassigned> |
| Status: | RESOLVED FIXED | ||
| Severity: | Normal | CC: | bfulgham, simon.fraser, webkit-bug-importer, zalan |
| Priority: | P2 | Keywords: | InRadar |
| Version: | WebKit Nightly Build | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
Ahmad Saleem
Hi Team,
Just came across following commit, which has more API test, which we should import to get better coverage:
Blink Commit: https://chromium-review.googlesource.com/c/chromium/src/+/4652129
___
API Tests:
TEST(WebCoreLayoutUnit, LayoutUnitFloat)
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit(1.25f + tolerance / 2));
ASSERT_EQ(LayoutUnit(-2.0f), LayoutUnit(-2.0f - tolerance / 2));
TEST(WebCoreLayoutUnit, FromFloatCeil)
{
const float tolerance = 1.0f / kFixedPointDenominator;
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatCeil(1.25f));
ASSERT_EQ(LayoutUnit(1.25f + tolerance), LayoutUnit::fromFloatCeil(1.25f + tolerance / 2));
ASSERT_EQ(LayoutUnit(), LayoutUnit::fromFloatCeil(-tolerance / 2));
using Limits = std::numeric_limits<float>;
// Larger than max()
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::FromFloatCeil(Limits::max()));
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::FromFloatCeil(Limits::infinity()));
// Smaller than Min()
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::FromFloatCeil(Limits::lowest()));
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::FromFloatCeil(-Limits::infinity()));
ASSERT_EQ(LayoutUnit(), LayoutUnit::FromFloatCeil(Limits::quiet_NaN()));
}
TEST(WebCoreLayoutUnit, FromFloatFloor)
{
const float tolerance = 1.0f / kFixedPointDenominator;
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatFloor(1.25f));
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatFloor(1.25f + tolerance / 2));
ASSERT_EQ(LayoutUnit(-tolerance), LayoutUnit::fromFloatFloor(-tolerance / 2));
using Limits = std::numeric_limits<float>;
// Larger than max()
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatFloor(Limits::max()));
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatFloor(Limits::infinity()));
// Smaller than min()
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatFloor(Limits::lowest()));
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatFloor(-Limits::infinity()));
ASSERT_EQ(LayoutUnit(), LayoutUnit::fromFloatFloor(Limits::quiet_NaN()));
}
TEST(WebCoreLayoutUnit, FromFloatRound)
{
const float tolerance = 1.0f / kFixedPointDenominator;
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatRound(1.25f));
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatRound(1.25f + tolerance / 4));
ASSERT_EQ(LayoutUnit(1.25f + tolerance), LayoutUnit::fromFloatRound(1.25f + tolerance * 3 / 4));
ASSERT_EQ(LayoutUnit(-tolerance), LayoutUnit::fromFloatRound(-tolerance * 3 / 4));
using Limits = std::numeric_limits<float>;
// Larger than max()
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatRound(Limits::max()));
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatRound(Limits::infinity()));
// Smaller than Min()
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatRound(Limits::lowest()));
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatRound(-Limits::infinity()));
ASSERT_EQ(LayoutUnit(), LayoutUnit::fromFloatRound(Limits::quiet_NaN()));
}
___
Just wanted to raise so we can import these as well. Will run locally to confirm that we don't fail them etc.
Thanks!
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Ahmad Saleem
It fails:
Ran 4 tests of 4 with 1 successful
------------------------------
Test suite failed
Failed
TestWebKitAPI.WebCoreLayoutUnit.FromFloatCeil
/Users/ahmadsaleem/Documents/GitHub-Webkit-Ahmad-Fork/Untitled/Tools/TestWebKitAPI/Tests/WebCore/LayoutUnitTests.cpp:287Expected equality of these values: LayoutUnit() Which is: 4-byte object <00-00 00-00> LayoutUnit::fromFloatCeil(Limits::quiet_NaN()) Which is: 4-byte object <00-00 00-80>
TestWebKitAPI.WebCoreLayoutUnit.FromFloatFloor
/Users/ahmadsaleem/Documents/GitHub-Webkit-Ahmad-Fork/Untitled/Tools/TestWebKitAPI/Tests/WebCore/LayoutUnitTests.cpp:305Expected equality of these values: LayoutUnit() Which is: 4-byte object <00-00 00-00> LayoutUnit::fromFloatFloor(Limits::quiet_NaN()) Which is: 4-byte object <00-00 00-80>
TestWebKitAPI.WebCoreLayoutUnit.FromFloatRound
/Users/ahmadsaleem/Documents/GitHub-Webkit-Ahmad-Fork/Untitled/Tools/TestWebKitAPI/Tests/WebCore/LayoutUnitTests.cpp:324Expected equality of these values: LayoutUnit() Which is: 4-byte object <00-00 00-00> LayoutUnit::fromFloatRound(Limits::quiet_NaN()) Which is: 4-byte object <00-00 00-80>
Ahmad Saleem
One which compiles (previous had some errors):
TEST(WebCoreLayoutUnit, FromFloatCeil)
{
const float tolerance = 1.0f / kFixedPointDenominator;
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatCeil(1.25f));
ASSERT_EQ(LayoutUnit(1.25f + tolerance), LayoutUnit::fromFloatCeil(1.25f + tolerance / 2));
ASSERT_EQ(LayoutUnit(), LayoutUnit::fromFloatCeil(-tolerance / 2));
using Limits = std::numeric_limits<float>;
// Larger than max()
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatCeil(Limits::max()));
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatCeil(Limits::infinity()));
// Smaller than Min()
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatCeil(Limits::lowest()));
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatCeil(-Limits::infinity()));
ASSERT_EQ(LayoutUnit(), LayoutUnit::fromFloatCeil(Limits::quiet_NaN()));
}
TEST(WebCoreLayoutUnit, FromFloatFloor)
{
const float tolerance = 1.0f / kFixedPointDenominator;
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatFloor(1.25f));
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatFloor(1.25f + tolerance / 2));
ASSERT_EQ(LayoutUnit(-tolerance), LayoutUnit::fromFloatFloor(-tolerance / 2));
using Limits = std::numeric_limits<float>;
// Larger than max()
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatFloor(Limits::max()));
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatFloor(Limits::infinity()));
// Smaller than min()
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatFloor(Limits::lowest()));
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatFloor(-Limits::infinity()));
ASSERT_EQ(LayoutUnit(), LayoutUnit::fromFloatFloor(Limits::quiet_NaN()));
}
TEST(WebCoreLayoutUnit, FromFloatRound)
{
const float tolerance = 1.0f / kFixedPointDenominator;
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatRound(1.25f));
ASSERT_EQ(LayoutUnit(1.25f), LayoutUnit::fromFloatRound(1.25f + tolerance / 4));
ASSERT_EQ(LayoutUnit(1.25f + tolerance), LayoutUnit::fromFloatRound(1.25f + tolerance * 3 / 4));
ASSERT_EQ(LayoutUnit(-tolerance), LayoutUnit::fromFloatRound(-tolerance * 3 / 4));
using Limits = std::numeric_limits<float>;
// Larger than max()
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatRound(Limits::max()));
ASSERT_EQ(LayoutUnit::max(), LayoutUnit::fromFloatRound(Limits::infinity()));
// Smaller than Min()
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatRound(Limits::lowest()));
ASSERT_EQ(LayoutUnit::min(), LayoutUnit::fromFloatRound(-Limits::infinity()));
ASSERT_EQ(LayoutUnit(), LayoutUnit::fromFloatRound(Limits::quiet_NaN()));
}
___
I think I would remove 'quiet_Nan()' and land this to just have good coverage.
EWS
Committed 272707@main (0058f6b04bfb): <https://commits.webkit.org/272707@main>
Reviewed commits have been landed. Closing PR #22418 and removing active labels.
Radar WebKit Bug Importer
<rdar://problem/120561655>