118 lines
3.0 KiB
C++
118 lines
3.0 KiB
C++
// Copyright (2019-2022) Paul Scherrer Institute
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#include <catch2/catch.hpp>
|
|
#include "../common/Coord.h"
|
|
|
|
TEST_CASE("Coord_Comparison", "[LinearAlgebra][Coord]") {
|
|
Coord a{1, 2, 3};
|
|
Coord b{3, 4, 5};
|
|
|
|
CHECK(!(a == b));
|
|
}
|
|
|
|
TEST_CASE("Coord_Neg", "[LinearAlgebra][Coord]") {
|
|
Coord a{1, 2, 3};
|
|
|
|
auto neg = -a;
|
|
CHECK(neg.x == -a.x);
|
|
CHECK(neg.y == -a.y);
|
|
CHECK(neg.z == -a.z);
|
|
}
|
|
|
|
TEST_CASE("Coord_Sum", "[LinearAlgebra][Coord]") {
|
|
Coord a{1, 2, 3};
|
|
Coord b{3, 4, 5};
|
|
|
|
auto sum = a + b;
|
|
CHECK(sum.x == a.x + b.x);
|
|
CHECK(sum.y == a.y + b.y);
|
|
CHECK(sum.z == a.z + b.z);
|
|
|
|
CHECK(a + b == b + a);
|
|
}
|
|
|
|
TEST_CASE("Coord_diff", "[LinearAlgebra][Coord]") {
|
|
Coord a{1, 2, 3};
|
|
Coord b{3, 4, 5};
|
|
|
|
auto diff = a - b;
|
|
CHECK(diff.x == a.x - b.x);
|
|
CHECK(diff.y == a.y - b.y);
|
|
CHECK(diff.z == a.z - b.z);
|
|
|
|
CHECK(a - b == -(b - a));
|
|
}
|
|
|
|
TEST_CASE("Coord_Scalar_mult", "[LinearAlgebra][Coord]") {
|
|
Coord a{1, 2, 3};
|
|
|
|
auto scalar_mult = 5 * a;
|
|
CHECK(scalar_mult.x == 5 * a.x);
|
|
CHECK(scalar_mult.y == 5 * a.y);
|
|
CHECK(scalar_mult.z == 5 * a.z);
|
|
CHECK(5 * a == a * 5);
|
|
}
|
|
|
|
TEST_CASE("Coord_Scalar_div", "[LinearAlgebra][Coord]") {
|
|
Coord a{1, 2, 3};
|
|
|
|
auto scalar_div = a / 4;
|
|
CHECK(scalar_div.x == Approx(a.x * 0.25));
|
|
CHECK(scalar_div.y == Approx(a.y * 0.25));
|
|
CHECK(scalar_div.z == Approx(a.z * 0.25));
|
|
}
|
|
|
|
TEST_CASE("Coord_dot", "[LinearAlgebra][Coord]") {
|
|
|
|
Coord a{1, 2, 3};
|
|
Coord b{3, 4, 5};
|
|
|
|
auto dot_mult = a * b;
|
|
CHECK (dot_mult == a.x * b.x + a.y * b.y + a.z * b.z);
|
|
CHECK (a * b == b * a);
|
|
|
|
CHECK(Coord(1, 0, 0) % Coord(1, 0, 0) == Coord(0, 0, 0));
|
|
CHECK(Coord(1, 0, 0) % Coord(0, 1, 0) == Coord(0, 0, 1));
|
|
CHECK(Coord(0, 1, 0) % Coord(0, 0, 1) == Coord(1, 0, 0));
|
|
CHECK(Coord(0, 0, 1) % Coord(1, 0, 0) == Coord(0, 1, 0));
|
|
}
|
|
|
|
TEST_CASE("Coord_vec_mult", "[LinearAlgebra][Coord]") {
|
|
Coord a{1, 2, 3};
|
|
Coord b{3, 4, 5};
|
|
|
|
auto vec_mult = a % b;
|
|
REQUIRE (a % b == -(b % a));
|
|
|
|
CHECK(vec_mult.x == a.y * b.z - a.z * b.y);
|
|
CHECK(vec_mult.y == a.z * b.x - a.x * b.z);
|
|
CHECK(vec_mult.z == a.x * b.y - a.y * b.x);
|
|
}
|
|
|
|
TEST_CASE("Coord_operator_bracket","[LinearAlgebra][Coord]") {
|
|
Coord a{1,2,3};
|
|
REQUIRE(a[0] == 1);
|
|
REQUIRE(a[1] == 2);
|
|
REQUIRE(a[2] == 3);
|
|
REQUIRE_THROWS(a[4]);
|
|
REQUIRE_THROWS(a[-1]);
|
|
REQUIRE_THROWS(a[56667]);
|
|
}
|
|
|
|
TEST_CASE("Coord_normalize","[LinearAlgebra][Coord]") {
|
|
Coord a{4,0,0};
|
|
REQUIRE(a.Length() == 4.0);
|
|
REQUIRE(a.Normalize().Length() == 1.0);
|
|
REQUIRE(a.Normalize().x == 1.0);
|
|
REQUIRE(a.Normalize().y == 0.0);
|
|
REQUIRE(a.Normalize().z == 0.0);
|
|
|
|
Coord b{3, 4, 5};
|
|
REQUIRE(b.Length() == Approx(sqrt(3*3+4*4+5*5)));
|
|
REQUIRE(b.Normalize().Length() == Approx(1.0));
|
|
REQUIRE(b.Normalize().x == Approx(3 /sqrt(3*3+4*4+5*5)));
|
|
REQUIRE(b.Normalize().y == Approx(4 /sqrt(3*3+4*4+5*5)));
|
|
REQUIRE(b.Normalize().z == Approx(5 /sqrt(3*3+4*4+5*5)));
|
|
}
|