/
vuron
/
adept
Обзор
Документация
Войти
/
vuron
/
adept
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/broadcast_tests.cpp
192 строки
6 KB
kolkir
Update tests remove int8 type
28 фев 2025, 14:13
28 фев 2025, 14:13
4016935
Код
Авторство
О чём код?
#include <adept/tensor.hpp> #include <adept/tensor_print.hpp> #include <adept/types.hpp> #include "catch.hpp" #include "test_utils.hpp" using namespace adept; using namespace adept::test; // Scalar vector tests TEMPLATE_TEST_CASE("Tensor add scalar vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_scalar_test_data<TestType, std::plus>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x + y; equals(dz, z); x += y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor sub scalar vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_scalar_test_data<TestType, std::minus>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x - y; equals(dz, z); x -= y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor mul scalar vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_scalar_test_data<TestType, std::multiplies>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x * y; equals(dz, z); x *= y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor div scalar vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_scalar_test_data<TestType, std::divides>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x / y; equals(dz, z); x /= y; equals(dz, x); } // Row vector tests TEMPLATE_TEST_CASE("Tensor add row vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_row_broadcast_test_data<TestType, std::plus>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x + y; equals(dz, z); x += y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor sub row vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_row_broadcast_test_data<TestType, std::minus>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x - y; equals(dz, z); x -= y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor mul row vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_row_broadcast_test_data<TestType, std::multiplies>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x * y; equals(dz, z); x *= y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor div row vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_row_broadcast_test_data<TestType, std::divides>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {1, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x / y; equals(dz, z); x /= y; equals(dz, x); } // Column vector tests TEMPLATE_TEST_CASE("Tensor add col vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_col_broadcast_test_data<TestType, std::plus>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {3, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x + y; equals(dz, z); x += y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor sub col vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_col_broadcast_test_data<TestType, std::minus>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {3, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x - y; equals(dz, z); x -= y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor mul col vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_col_broadcast_test_data<TestType, std::multiplies>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {3, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x * y; equals(dz, z); x *= y; equals(dz, x); } TEMPLATE_TEST_CASE("Tensor div col vector", "[broadcast]", float32_t, float64_t, int32_t) { auto [dx, dy, dz] = make_col_broadcast_test_data<TestType, std::divides>(); auto x = Tensor::from_blob( dx.data(), {.shape = {3, 3}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto y = Tensor::from_blob( dy.data(), {.shape = {3, 1}, .device = device_t::CPU, .dtype = to_dtype<TestType>()}); auto z = x / y; equals(dz, z); x /= y; equals(dz, x); }