aboutsummaryrefslogtreecommitdiff
path: root/test/object.cpp
blob: bbce0554ea342510818b202a8813aa2d144141b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <object.hpp>
#include <ray.hpp>
#include <common.hpp>
#include <vector.hpp>

#include <catch2/catch.hpp>
#include <math.h>

TEST_CASE("Sphere normal at", "[sphere]") {
    auto sph = Sphere(Vec3d(2, 3, 4), 2);

    auto norm = sph.norm_at(Vec3d(2, 3, 2), Vec3d());
    REQUIRE(norm.m_x == 0);
    REQUIRE(norm.m_y == 0);
    REQUIRE(norm.m_z == -1);
}

TEST_CASE("Sphere intersect", "[sphere]") {
    auto sph = Sphere(Vec3d(2, 3, 4), 2);
    auto ray = Ray(Vec3d(1, 0, 0), Vec3d(0, 1, 1.5), true);

    auto dist = sph.intersect(ray, false);
    REQUIRE(abs(dist - 3.28) < 0.01);
}

TEST_CASE("Plane intersect", "[plane]") {
    auto pln = Plane(Vec3d(3, 4, 2), Vec3d(-6, -3, -2));
    auto ray = Ray(Vec3d(0, 0, 0), Vec3d(-2, -1, 5));

    auto dist = pln.intersect(ray, false);
    REQUIRE(dist == -1);

    ray = Ray(Vec3d(-2, -2, 0), Vec3d(-2, -1, 5));
    dist = pln.intersect(ray, false);
    REQUIRE(abs(dist - 20.4) < 0.1);
}