skia2/tests/graphite/RectTest.cpp
Michael Ludwig 5c08e3c357 Standardize on skvx aliases, plus clean-up
This adds aliases like skvx::float2, float4, etc. to SkVx.h and goes
through existing usages of SkVx to standardize on those aliases, or
refer to the full name directly.

In particular, this lets us clean up the equivalent aliases in
src/gpu/tessellate, src/gpu/graphite/VectorTypes and src/gpu/ganesh/GrVx

Where possible, I switched to using skvx::Foo directly and leveraged
auto to make it less redundant. Headers always used the full type
except for PatchWriter.h and Rect.h because of the number of their
usages. In this case, the alias is scoped to private so it can't leak.

This is prep to migrate older code that is still using SkNx and its
aliases like Sk4f to SkVx as well.

Change-Id: I9dd104e83cf17c2b88995a047cfd2e2b0fe6fac2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/541058
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2022-05-17 18:04:55 +00:00

122 lines
4.4 KiB
C++

/*
* Copyright 2021 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "src/gpu/graphite/geom/Rect.h"
#include "tests/Test.h"
namespace skgpu::graphite {
#define CHECK(A) REPORTER_ASSERT(reporter, A)
DEF_GRAPHITE_TEST(skgpu_Rect, reporter) {
using float2 = skvx::float2;
using float4 = skvx::float4;
const SkRect skRect = SkRect::MakeLTRB(1,-3,4,0);
const Rect rect = skRect;
CHECK(rect == rect);
CHECK(rect == skRect); // promotes 'skRect' to a Rect for ==
CHECK(rect.asSkRect() == skRect); // converts 'rect' to SkRect for ==
for (const float l : {0,1,2}) {
for (const float t : {-4,-3,-2}) {
for (const float r : {3,4,5}) {
for (const float b : {-1,0,1}) {
const Rect rect2(l,t,r,b);
const SkRect skRect2{l,t,r,b};
CHECK(rect2 == rect2);
CHECK(rect2 == Rect(float2(l,t), float2(r,b)));
CHECK(rect2 == Rect(skRect2));
CHECK(rect2.asSkRect() == skRect2);
CHECK((rect2 == rect) == (rect == rect2));
CHECK((rect2 != rect) == (rect != rect2));
CHECK((rect != rect2) == !(rect == rect2));
CHECK(rect2 == Rect::XYWH(l, t, r - l, b - t));
CHECK(rect2 == Rect::XYWH(float2(l, t), float2(r - l, b - t)));
if (l == 0 && t == 0) {
CHECK(rect2 == Rect::WH(r - l, b - t));
CHECK(rect2 == Rect::WH(float2(r - l, b - t)));
}
CHECK(rect2 == Rect::FromVals(rect2.vals()));
CHECK(rect2.x() == l);
CHECK(rect2.y() == t);
CHECK(rect2.left() == l);
CHECK(rect2.top() == t);
CHECK(rect2.right() == r);
CHECK(rect2.bot() == b);
CHECK(all(rect2.topLeft() == float2(l,t)));
CHECK(all(rect2.botRight() == float2(r,b)));
CHECK(all(rect2.ltrb() == float4(l,t,r,b)));
CHECK(all(rect2.vals() == float4(l,t,-r,-b)));
Rect setTest(-99,-99,99,99);
CHECK(setTest != rect2);
setTest.setLeft(l);
setTest.setTop(t);
setTest.setRight(r);
setTest.setBot(b);
CHECK(setTest == rect2);
setTest = Rect(-99,-99,99,99);
CHECK(setTest != rect2);
setTest.setTopLeft({l,t});
setTest.setBotRight({r,b});
CHECK(setTest == rect2);
for (int i = 0; i < 4; ++i) {
Rect rnan = rect2;
CHECK(!rnan.isEmptyNegativeOrNaN());
rnan.vals()[i] = std::numeric_limits<float>::quiet_NaN();
CHECK(rnan.isEmptyNegativeOrNaN());
}
CHECK(all(rect2.size() == float2(skRect2.width(), skRect2.height())));
CHECK(all(rect2.center() == float2(skRect2.centerX(), skRect2.centerY())));
CHECK(rect2.area() == skRect2.height() * skRect2.width());
CHECK(rect.intersects(rect2) == rect2.intersects(rect));
CHECK(rect.intersects(rect2) == skRect.intersects(skRect2));
CHECK(rect.contains(rect2) == skRect.contains(skRect2));
CHECK(rect2.contains(rect) == skRect2.contains(skRect));
CHECK(rect2.makeRoundIn() == SkRect::Make(skRect2.roundIn()));
CHECK(rect2.makeRoundOut() == SkRect::Make(skRect2.roundOut()));
CHECK(rect2.makeInset(.5f) == skRect2.makeInset(.5f, .5f));
CHECK(rect2.makeInset({.5f, -.25f}) == skRect2.makeInset(.5f, -.25f));
CHECK(rect2.makeOutset(.5f) == skRect2.makeOutset(.5f, .5f));
CHECK(rect2.makeOutset({.5f, -.25f}) == skRect2.makeOutset(.5f, -.25f));
CHECK(rect2.makeOffset({.5f, -.25f}) == skRect2.makeOffset(.5f, -.25f));
SkRect skJoin = skRect;
skJoin.join(skRect2);
CHECK(rect.makeJoin(rect2) == skJoin);
CHECK(rect.makeJoin(rect2) == rect2.makeJoin(rect));
CHECK(rect.intersects(rect2) == !rect.makeIntersect(rect2).isEmptyNegativeOrNaN());
CHECK(rect.makeIntersect(rect2) == rect2.makeIntersect(rect));
if (rect.intersects(rect2)) {
CHECK(skRect.intersects(skRect2));
SkRect skIsect;
CHECK(skIsect.intersect(skRect, skRect2));
CHECK(rect.makeIntersect(rect2) == Rect(skIsect));
}
const Rect rect3{r,b,l,t}; // intentionally out of order
const SkRect skRect3{r,b,l,t};
CHECK(rect3.isEmptyNegativeOrNaN());
CHECK(skRect3.isEmpty());
CHECK(rect3.makeSorted() == skRect3.makeSorted());
CHECK(rect3.makeSorted() == rect2);
}}}}
}
} // namespace skgpu