зеркало из https://github.com/microsoft/scenepic.git
82 строки
2.6 KiB
C++
82 строки
2.6 KiB
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
|
|
#include "matrix.h"
|
|
|
|
#include "scenepic_tests.h"
|
|
|
|
namespace sp = scenepic;
|
|
|
|
int test_matrix()
|
|
{
|
|
int result = EXIT_SUCCESS;
|
|
|
|
Eigen::MatrixXf actual(3, 4);
|
|
|
|
actual << 0, -1, 3, -0.03, 0, 2, 0, 3, 0.51, -0.22, 1, 2;
|
|
|
|
sp::Color4 vec(-0.87, 1, 0, -1);
|
|
|
|
Eigen::MatrixXf expected(4, 4);
|
|
expected << 0, -1, 3, -0.03, 0, 2, 0, 3, 0.51, -0.22, 1, 2, -0.87, 1, 0, -1;
|
|
|
|
sp::append_row(actual, vec);
|
|
test::assert_allclose(actual, expected, result, "append_row");
|
|
|
|
Eigen::MatrixXf top(2, 4);
|
|
Eigen::MatrixXf bottom(2, 4);
|
|
top << 0, -1, 3, -0.03, 0, 2, 0, 3;
|
|
bottom << 0.51, -0.22, 1, 2, -0.87, 1, 0, -1;
|
|
|
|
sp::append_matrix(top, bottom);
|
|
test::assert_allclose(top, expected, result, "append_matrix");
|
|
|
|
Eigen::Array<std::uint32_t, Eigen::Dynamic, 1> expectedArray(8);
|
|
expectedArray << 0, 2, 4, 6, 8, 10, 12, 14;
|
|
test::assert_allclose(sp::arange(0, 17, 2), expectedArray, result, "arange");
|
|
|
|
expected << 0, -1, 3, -0.03, 0, 1, 3, 2.97, 0.51, 0.78, 4, 4.97, -0.36, 1.78,
|
|
4, 3.97;
|
|
test::assert_allclose(
|
|
sp::rowwise_cumsum(actual), expected, result, "rowwise_cumsum");
|
|
|
|
Eigen::Array<std::uint32_t, Eigen::Dynamic, 1> actualArray(8);
|
|
|
|
actualArray << 10, 12, 14, 0, 2, 4, 6, 8;
|
|
|
|
test::assert_allclose(
|
|
sp::roll(actualArray, 5), expectedArray, result, "roll");
|
|
|
|
Eigen::Index i = 5;
|
|
Eigen::MatrixXf actualMatrix(i, 3);
|
|
|
|
Eigen::MatrixXf expectedMatrix(i, 3);
|
|
expectedMatrix << 1, 5, 0, 2.5, 6, 1.25, 4, 7, 2.5, 5.5, 8, 3.75, 7, 9, 5;
|
|
|
|
sp::linspace(actualMatrix, sp::Vector(1, 5, 0), sp::Vector(7, 9, 5));
|
|
test::assert_allclose(actualMatrix, expectedMatrix, result, "linspace");
|
|
|
|
actualMatrix =
|
|
sp::linspace<sp::VectorBuffer>(i, sp::Vector(1, 5, 0), sp::Vector(7, 9, 5));
|
|
test::assert_allclose(actualMatrix, expectedMatrix, result, "linspace");
|
|
|
|
sp::VectorBuffer actualRandom = sp::random<sp::VectorBuffer>(3, 3, -1, 7);
|
|
test::assert_range(actualRandom, -1, 7, result, "range");
|
|
|
|
actualRandom = sp::random<sp::VectorBuffer>(
|
|
3, 3, sp::Vector(0, 1, 2), sp::Vector(3, 4, 5));
|
|
test::assert_range(
|
|
actualRandom, sp::Vector(0, 1, 2), sp::Vector(3, 4, 5), result, "range");
|
|
|
|
actualRandom = sp::random<sp::Vector>(0.5, 4.6);
|
|
test::assert_range(actualRandom, 0.5, 4.6, result, "range");
|
|
|
|
std::string actualJson = sp::matrix_to_json(expected);
|
|
std::string expectedJson =
|
|
"eAEBQAC//wAAAAAAAAAAXI8CP+xRuL4AAIC/AACAPxSuRz8K1+M/"
|
|
"AABAQAAAQEAAAIBAAACAQI/C9bx7FD5APQqfQHsUfkARKhIrBAAAAAQ=";
|
|
test::assert_equal(actualJson, expectedJson, result, "json");
|
|
|
|
return result;
|
|
}
|