blob: 50a0e74086a4e1b0ede47d0666b8955b971eb170 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lib/escher/geometry/clip_planes.h"
#include "lib/escher/geometry/bounding_box.h"
#include "gtest/gtest.h"
namespace {
using namespace escher;
TEST(ClipPlanes, Validity) {
ClipPlanes planes;
auto& p = planes.planes;
p[0] = p[1] = p[2] = p[3] = p[4] = p[5] = vec4(1, 0, 0, 0);
EXPECT_TRUE(planes.IsValid());
p[0] = vec4(1, 0, 0, 100);
EXPECT_TRUE(planes.IsValid());
p[0] = vec4(0, 1, 0, 100);
EXPECT_TRUE(planes.IsValid());
p[0] = vec4(0, 0, 1, 100);
EXPECT_TRUE(planes.IsValid());
p[0] = vec4(1, 0, 0, 100);
EXPECT_TRUE(planes.IsValid());
constexpr float kSqrt2 = 0.70710678118;
p[0] = vec4(kSqrt2, kSqrt2, 0, 100);
EXPECT_TRUE(planes.IsValid());
p[0] = vec4(1, 1, 0, 100);
EXPECT_FALSE(planes.IsValid());
}
TEST(ClipPlanes, ClipIfSmallerThanX) {
ClipPlanes planes;
constexpr float X = 40;
auto& p = planes.planes;
p[0] = p[1] = p[2] = p[3] = p[4] = p[5] = vec4(1, 0, 0, -X);
EXPECT_TRUE(planes.ClipsPoint(vec3(X - 1, 0, 0)));
EXPECT_TRUE(planes.ClipsPoint(vec3(X - 1, 100, 0)));
EXPECT_TRUE(planes.ClipsPoint(vec3(X - 1, 0, 100)));
EXPECT_TRUE(planes.ClipsPoint(vec3(X - 1, 100, 100)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X, 0, 0)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X, 100, 0)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X, 0, 100)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X, 100, 100)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X + 1, 0, 0)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X + 1, 100, 0)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X + 1, 0, 100)));
EXPECT_FALSE(planes.ClipsPoint(vec3(X + 1, 100, 100)));
}
TEST(ClipPlanes, FromBox) {
BoundingBox box({10, 100, 1000}, vec3{20, 200, 2000});
auto planes = ClipPlanes::FromBox(box);
EXPECT_FALSE(planes.ClipsPoint({10, 100, 1000}));
EXPECT_FALSE(planes.ClipsPoint({15, 150, 1500}));
EXPECT_FALSE(planes.ClipsPoint({20, 200, 2000}));
EXPECT_TRUE(planes.ClipsPoint({9, 100, 1000}));
EXPECT_TRUE(planes.ClipsPoint({10, 99, 1000}));
EXPECT_TRUE(planes.ClipsPoint({10, 100, 999}));
EXPECT_TRUE(planes.ClipsPoint({21, 200, 2000}));
EXPECT_TRUE(planes.ClipsPoint({20, 201, 2000}));
EXPECT_TRUE(planes.ClipsPoint({20, 200, 2001}));
}
} // namespace