test_aosf33.c (6698B)
1 /* Copyright (C) 2014-2019, 2021, 2023, 2025 Vincent Forest (vaplv@free.fr) 2 * 3 * The RSIMD library is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published 5 * by the Free Software Foundation, either version 3 of the License, or 6 * (at your option) any later version. 7 * 8 * The RSIMD library is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with the RSIMD library. If not, see <http://www.gnu.org/licenses/>. */ 15 16 #include "aosf33.h" 17 #include <rsys/float33.h> 18 19 #define AOSF33_EQ_EPS(M, A, B, C, D, E, F, G, H, I, Eps) \ 20 { \ 21 float a[9], b[9]; \ 22 b[0] = (A); b[1] = (B); b[2] = (C); \ 23 b[3] = (D); b[4] = (E); b[5] = (F); \ 24 b[6] = (G); b[7] = (H); b[8] = (I); \ 25 CHK(f33_eq_eps(aosf33_store(a, (M)), b, Eps) == 1); \ 26 } (void)0 27 #define AOSF33_EQ(M, A, B, C, D, E, F, G, H, I) \ 28 AOSF33_EQ_EPS(M, A, B, C, D, E, F, G, H, I, 0.f) 29 30 int 31 main(int argc, char** argv) 32 { 33 float tmp[9]; 34 v4f_T m[3], n[3], o[3], v; 35 (void)argc, (void)argv; 36 37 CHK(aosf33_set(m, 38 v4f_set(0.f, 1.f, 2.f, 0.f), 39 v4f_set(3.f, 4.f, 5.f, 0.f), 40 v4f_set(6.f, 7.f, 8.f, 0.f)) == m); 41 CHK(aosf33_store(tmp, m) == tmp); 42 CHK(tmp[0] == 0.f); 43 CHK(tmp[1] == 1.f); 44 CHK(tmp[2] == 2.f); 45 CHK(tmp[3] == 3.f); 46 CHK(tmp[4] == 4.f); 47 CHK(tmp[5] == 5.f); 48 CHK(tmp[6] == 6.f); 49 CHK(tmp[7] == 7.f); 50 CHK(tmp[8] == 8.f); 51 AOSF33_EQ(m, 0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f); 52 CHK(aosf33_identity(m) == m); 53 AOSF33_EQ(m, 1.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 1.f); 54 CHK(aosf33_zero(m) == m); 55 AOSF33_EQ(m, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f); 56 57 f3(tmp+0, -1.f, -2.f, -3.f); 58 f3(tmp+3, -4.f, -5.f, -6.f); 59 f3(tmp+6, -7.f, -8.f, -9.f); 60 CHK(aosf33_load(m, tmp) == m); 61 AOSF33_EQ(m, -1.f, -2.f, -3.f, -4.f, -5.f, -6.f, -7.f, -8.f, -9.f); 62 63 CHK(aosf33_zero(m) == m); 64 CHK(aosf33_set_row0(m, v4f_set(0.f, 1.f, 2.f, 9.f)) == m); 65 AOSF33_EQ(m, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 2.f, 0.f, 0.f); 66 CHK(aosf33_set_row1(m, v4f_set(3.f, 4.f, 5.f, 10.f)) == m); 67 AOSF33_EQ(m, 0.f, 3.f, 0.f, 1.f, 4.f, 0.f, 2.f, 5.f, 0.f); 68 CHK(aosf33_set_row2(m, v4f_set(6.f, 7.f, 8.f, 11.f)) == m); 69 AOSF33_EQ(m, 0.f, 3.f, 6.f, 1.f, 4.f, 7.f, 2.f, 5.f, 8.f); 70 71 CHK(aosf33_zero(m) == m); 72 CHK(aosf33_set_row(m, v4f_set(0.f, 1.f, 2.f, 9.f), 0) == m); 73 AOSF33_EQ(m, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 2.f, 0.f, 0.f); 74 CHK(aosf33_set_row(m, v4f_set(3.f, 4.f, 5.f, 10.f), 1) == m); 75 AOSF33_EQ(m, 0.f, 3.f, 0.f, 1.f, 4.f, 0.f, 2.f, 5.f, 0.f); 76 CHK(aosf33_set_row(m, v4f_set(6.f, 7.f, 8.f, 11.f), 2) == m); 77 AOSF33_EQ(m, 0.f, 3.f, 6.f, 1.f, 4.f, 7.f, 2.f, 5.f, 8.f); 78 79 CHK(aosf33_zero(m) == m); 80 CHK(aosf33_set_col(m, v4f_set(0.f, 1.f, 2.f, 9.f), 0) == m); 81 AOSF33_EQ(m, 0.f, 1.f, 2.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f); 82 CHK(aosf33_set_col(m, v4f_set(3.f, 4.f, 5.f, 10.f), 1) == m); 83 AOSF33_EQ(m, 0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 0.f, 0.f, 0.f); 84 CHK(aosf33_set_col(m, v4f_set(6.f, 7.f, 8.f, 11.f), 2) == m); 85 AOSF33_EQ(m, 0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f); 86 87 v = aosf33_row0(m); 88 CHK(v4f_x(v) == 0.f); 89 CHK(v4f_y(v) == 3.f); 90 CHK(v4f_z(v) == 6.f); 91 92 v = aosf33_row1(m); 93 CHK(v4f_x(v) == 1.f); 94 CHK(v4f_y(v) == 4.f); 95 CHK(v4f_z(v) == 7.f); 96 97 v = aosf33_row2(m); 98 CHK(v4f_x(v) == 2.f); 99 CHK(v4f_y(v) == 5.f); 100 CHK(v4f_z(v) == 8.f); 101 102 v = aosf33_row(m, 0); 103 CHK(v4f_x(v) == 0.f); 104 CHK(v4f_y(v) == 3.f); 105 CHK(v4f_z(v) == 6.f); 106 107 v = aosf33_row(m, 1); 108 CHK(v4f_x(v) == 1.f); 109 CHK(v4f_y(v) == 4.f); 110 CHK(v4f_z(v) == 7.f); 111 112 v = aosf33_row(m, 2); 113 CHK(v4f_x(v) == 2.f); 114 CHK(v4f_y(v) == 5.f); 115 CHK(v4f_z(v) == 8.f); 116 117 v = aosf33_col(m, 0); 118 CHK(v4f_x(v) == 0.f); 119 CHK(v4f_y(v) == 1.f); 120 CHK(v4f_z(v) == 2.f); 121 122 v = aosf33_col(m, 1); 123 CHK(v4f_x(v) == 3.f); 124 CHK(v4f_y(v) == 4.f); 125 CHK(v4f_z(v) == 5.f); 126 127 v = aosf33_col(m, 2); 128 CHK(v4f_x(v) == 6.f); 129 CHK(v4f_y(v) == 7.f); 130 CHK(v4f_z(v) == 8.f); 131 132 aosf33_set(m, 133 v4f_set(0.f, 1.f, 2.f, 0.f), 134 v4f_set(3.f, 4.f, 5.f, 0.f), 135 v4f_set(6.f, 7.f, 8.f, 0.f)); 136 aosf33_set(n, 137 v4f_set(1.f, 2.f, 3.f, 0.f), 138 v4f_set(4.f, 5.f, 6.f, 0.f), 139 v4f_set(7.f, 8.f, 9.f, 0.f)); 140 CHK(aosf33_add(o, m, n) == o); 141 AOSF33_EQ(o, 1.f, 3.f, 5.f, 7.f, 9.f, 11.f, 13.f, 15.f, 17.f); 142 CHK(aosf33_sub(o, o, n) == o); 143 AOSF33_EQ(o, 0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f); 144 145 aosf33_set(m, 146 v4f_set(1.f, 2.f, -3.f, 0.f), 147 v4f_set(-4.f, -5.f, 6.f, 0.f), 148 v4f_set(7.f, -8.f, 9.f, 0.f)); 149 CHK(aosf33_minus(m, m) == m); 150 AOSF33_EQ(m, -1.f, -2.f, 3.f, 4.f, 5.f, -6.f, -7.f, 8.f, -9.f); 151 152 CHK(aosf33_mul(o, m, v4f_set1(2.f)) == o); 153 AOSF33_EQ(o, -2.f, -4.f, 6.f, 8.f, 10.f, -12.f, -14.f, 16.f, -18.f); 154 155 aosf33_set(m, 156 v4f_set(1.f, 2.f, 3.f, 0.f), 157 v4f_set(4.f, 5.f, 6.f, 0.f), 158 v4f_set(7.f, 8.f, 9.f, 0.f)); 159 v = aosf33_mulf3(m, v4f_set(1.f, 2.f, 3.f, 0.f)); 160 CHK(v4f_x(v) == 30.f); 161 CHK(v4f_y(v) == 36.f); 162 CHK(v4f_z(v) == 42.f); 163 v = aosf3_mulf33(v4f_set(1.f, 2.f, 3.f, 0.f), m); 164 CHK(v4f_x(v) == 14.f); 165 CHK(v4f_y(v) == 32.f); 166 CHK(v4f_z(v) == 50.f); 167 aosf33_set(n, 168 v4f_set(2.f, 9.f, 8.f, 0.f), 169 v4f_set(1.f, -2.f, 2.f, 0.f), 170 v4f_set(1.f, -8.f, -4.f, 0.f)); 171 CHK(aosf33_mulf33(o, m, n) == o); 172 AOSF33_EQ(o, 94.f, 113.f, 132.f, 7.f, 8.f, 9.f, -59.f, -70.f, -81.f); 173 174 CHK(aosf33_transpose(o, m) == o); 175 AOSF33_EQ(o, 1.f, 4.f, 7.f, 2.f, 5.f, 8.f, 3.f, 6.f, 9.f); 176 177 aosf33_set(m, 178 v4f_set(1.f, 2.f, 3.f, 0.f), 179 v4f_set(4.f, 5.f, 6.f, 0.f), 180 v4f_set(3.f, -4.f, 9.f, 0.f)); 181 v = aosf33_det(m); 182 CHK(v4f_x(v) == -60.f); 183 CHK(v4f_y(v) == -60.f); 184 CHK(v4f_z(v) == -60.f); 185 CHK(v4f_w(v) == -60.f); 186 187 v = aosf33_inverse(n, m); 188 CHK(v4f_x(v) == -60.f); 189 CHK(v4f_y(v) == -60.f); 190 CHK(v4f_z(v) == -60.f); 191 CHK(v4f_w(v) == -60.f); 192 aosf33_mulf33(o, m, n); 193 AOSF33_EQ_EPS(o, 1.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 1.f, 1.e-6f); 194 195 v = aosf33_invtrans(o, m); 196 CHK(v4f_x(v) == -60.f); 197 CHK(v4f_y(v) == -60.f); 198 CHK(v4f_z(v) == -60.f); 199 CHK(v4f_w(v) == -60.f); 200 AOSF33_EQ(o, 201 v4f_x(n[0]), v4f_x(n[1]), v4f_x(n[2]), 202 v4f_y(n[0]), v4f_y(n[1]), v4f_y(n[2]), 203 v4f_z(n[0]), v4f_z(n[1]), v4f_z(n[2])); 204 return 0; 205 } 206