Arcane  v4.1.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestStaticMatrix.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/*---------------------------------------------------------------------------*/
9/*
10 * This file is based on the work on AMGCL library (version march 2026)
11 * which can be found at https://github.com/ddemidov/amgcl.
12 *
13 * Copyright (c) 2012-2022 Denis Demidov <dennis.demidov@gmail.com>
14 * SPDX-License-Identifier: MIT
15 */
16/*---------------------------------------------------------------------------*/
17/*---------------------------------------------------------------------------*/
18
19#include <gtest/gtest.h>
20
21#include "arccore/alina/StaticMatrix.h"
22
23using namespace Arcane;
24
25TEST(alina_test_static_matrix, sum)
26{
27 Alina::StaticMatrix<int, 2, 2> a = { { 1, 2, 3, 4 } };
28 Alina::StaticMatrix<int, 2, 2> b = { { 4, 3, 2, 1 } };
30
31 for (int i = 0; i < 2; ++i)
32 for (int j = 0; j < 2; ++j)
33 ASSERT_EQ(c(i, j), 5);
34}
35
36TEST(alina_test_static_matrix, minus)
37{
38 Alina::StaticMatrix<int, 2, 2> a = { { 5, 5, 5, 5 } };
39 Alina::StaticMatrix<int, 2, 2> b = { { 4, 3, 2, 1 } };
41
42 for (int i = 0; i < 4; ++i)
43 ASSERT_EQ(c(i), i + 1);
44}
45
46TEST(alina_test_static_matrix, product)
47{
48 Alina::StaticMatrix<int, 2, 2> a = { { 2, 1, 1, 2 } };
50
51 ASSERT_EQ(c(0, 0), 5);
52 ASSERT_EQ(c(0, 1), 4);
53 ASSERT_EQ(c(1, 0), 4);
54 ASSERT_EQ(c(1, 1), 5);
55}
56
57TEST(alina_test_static_matrix, scale)
58{
59 Alina::StaticMatrix<int, 2, 2> a = { { 1, 2, 3, 4 } };
61
62 for (int i = 0; i < 4; ++i)
63 ASSERT_EQ(c(i), 2 * (i + 1));
64}
65
66TEST(alina_test_static_matrix, inner_product)
67{
68 Alina::StaticMatrix<int, 2, 1> a = { { 1, 2 } };
69 int c = Alina::math::inner_product(a, a);
70
71 ASSERT_EQ(c, 5);
72}
73
74TEST(alina_test_static_matrix, inverse)
75{
76 Alina::StaticMatrix<double, 2, 2> a = { { 2.0, -1.0, -1.0, 2.0 } };
77 Alina::StaticMatrix<double, 2, 2> b = Alina::math::inverse(a);
79
80 for (int i = 0; i < 2; ++i)
81 for (int j = 0; j < 2; ++j)
82 ASSERT_NEAR(c(i, j) - (i == j), 0.0, 1e-8);
83}
84
85TEST(alina_test_static_matrix, inverse_pivoting)
86{
88 1,
89 -0.1,
90 -0.028644256,
91 0.25684664,
92 1,
93 -0.1,
94 -0.025972342,
95 0.25663863,
96 1,
97 -0.095699158,
98 -0.029327056,
99 0.25554974,
100 1,
101 -0.09543351,
102 -0.026189496,
103 0.25796741,
104 } };
105 Alina::StaticMatrix<double, 4, 4> b = Alina::math::inverse(a);
107
108 for (int i = 0; i < 4; ++i)
109 for (int j = 0; j < 4; ++j)
110 ASSERT_NEAR(c(i, j) - (i == j), 0.0, 1e-8);
111}
112
113TEST(alina_test_static_matrix, inverse_pivoting_2)
114{
116 {
117 0, 1, 0, 0,
118 0, 0, 1, 0,
119 1, 0, 0, 0,
120 0, 0, 0, 1,
121 }
122 };
123 Alina::StaticMatrix<double, 4, 4> b = Alina::math::inverse(a);
125
126 for (int i = 0; i < 4; ++i)
127 for (int j = 0; j < 4; ++j)
128 ASSERT_NEAR(c(i, j) - (i == j), 0.0, 1e-8);
129}
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-