blob: 39803a92697d4569cd8c8cc238308ece6931a139 [file] [log] [blame]
/*
* Copyright 2020 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/utils/SkRandom.h"
#include "src/core/SkGeometry.h"
#include "src/gpu/GrVx.h"
#include "tests/Test.h"
#include <limits>
#include <numeric>
using namespace grvx;
using skvx::bit_pun;
DEF_TEST(grvx_cross_dot, r) {
REPORTER_ASSERT(r, grvx::cross({0,1}, {0,1}) == 0);
REPORTER_ASSERT(r, grvx::cross({1,0}, {1,0}) == 0);
REPORTER_ASSERT(r, grvx::cross({1,1}, {1,1}) == 0);
REPORTER_ASSERT(r, grvx::cross({1,1}, {1,-1}) == -2);
REPORTER_ASSERT(r, grvx::cross({1,1}, {-1,1}) == 2);
REPORTER_ASSERT(r, grvx::dot({0,1}, {1,0}) == 0);
REPORTER_ASSERT(r, grvx::dot({1,0}, {0,1}) == 0);
REPORTER_ASSERT(r, grvx::dot({1,1}, {1,-1}) == 0);
REPORTER_ASSERT(r, grvx::dot({1,1}, {1,1}) == 2);
REPORTER_ASSERT(r, grvx::dot({1,1}, {-1,-1}) == -2);
SkRandom rand;
for (int i = 0; i < 100; ++i) {
float a=rand.nextRangeF(-1,1), b=rand.nextRangeF(-1,1), c=rand.nextRangeF(-1,1),
d=rand.nextRangeF(-1,1);
constexpr static float kTolerance = 1.f / (1 << 20);
REPORTER_ASSERT(r, SkScalarNearlyEqual(
grvx::cross({a,b}, {c,d}), SkPoint::CrossProduct({a,b}, {c,d}), kTolerance));
REPORTER_ASSERT(r, SkScalarNearlyEqual(
grvx::dot({a,b}, {c,d}), SkPoint::DotProduct({a,b}, {c,d}), kTolerance));
}
}