rsys

Basic data structures and low-level features
git clone git://git.meso-star.fr/rsys.git
Log | Files | Refs | README | LICENSE

test_real44.h (14201B)


      1 /* Copyright (C) 2013-2023, 2025 Vincent Forest (vaplv@free.fr)
      2  *
      3  * The RSys 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 RSys 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 RSys library. If not, see <http://www.gnu.org/licenses/>. */
     15 
     16 #include "rsys.h"
     17 #include <float.h>
     18 
     19 #define REALX_DIMENSION__ 4
     20 #define REALY_DIMENSION__ 4
     21 #include "realXY_begin.h"
     22 
     23 #define REAL REAL_TYPE__
     24 #define REAL_COMPATIBLE REAL_TYPE_COMPATIBLE__
     25 
     26 #define CHECK_REAL4(A, B)                                                      \
     27   {                                                                            \
     28     const REAL* a__ = (A);                                                     \
     29     const REAL* b__ = (B);                                                     \
     30     int i__;                                                                   \
     31     FOR_EACH(i__, 0, 4)                                                        \
     32       CHK(a__[i__] == b__[i__]);                                               \
     33   } (void)0
     34 #define CHECK_REAL44(A, B)                                                     \
     35   {                                                                            \
     36     const REAL* a__ = (A);                                                     \
     37     const REAL* b__ = (B);                                                     \
     38     int i__;                                                                   \
     39     FOR_EACH(i__, 0, 16)                                                       \
     40       CHK(a__[i__] == b__[i__]);                                               \
     41   } (void)0
     42 
     43 int
     44 main(int argc, char** argv)
     45 {
     46   REAL a[16], b[16], dst[16], c[16];
     47   REAL_COMPATIBLE d[16];
     48   int i;
     49   (void)argc, (void)argv;
     50 
     51   REALXY_FUNC__(set)(a, REALXY_FUNC__(splat)(c, -1.0));
     52   FOR_EACH(i, 0, 16) {
     53     CHK(a[i] == -1.0);
     54     CHK(c[i] == -1.0);
     55   }
     56   REALXY_CTOR__
     57     (a,
     58      0.0, 1.0, 2.0, 3.0,
     59      4.0, 5.0, 6.0, 7.0,
     60      8.0, 9.0, 10.0, 11.0,
     61      12.0, 13.0, 14.0, 15.0);
     62   FOR_EACH(i, 0, 16) {
     63     CHK(a[i] == (REAL)i);
     64   }
     65   CHECK_REAL44
     66     (REALXY_FUNC__(set_identity)(a),REALXY_CTOR__(c,
     67      1.0, 0.0, 0.0, 0.0,
     68      0.0, 1.0, 0.0, 0.0,
     69      0.0, 0.0, 1.0, 0.0,
     70      0.0, 0.0, 0.0, 1.0));
     71   CHECK_REAL44
     72     (a, REALXY_CTOR__(c,
     73      1.0, 0.0, 0.0, 0.0,
     74      0.0, 1.0, 0.0, 0.0,
     75      0.0, 0.0, 1.0, 0.0,
     76      0.0, 0.0, 0.0, 1.0));
     77   CHK(REALXY_FUNC__(is_identity)(a) == 1);
     78   REALXY_FUNC__(set)(c, a);
     79   FOR_EACH(i, 0, REALX_DIMENSION__*REALY_DIMENSION__) {
     80     REAL_TYPE__ r = c[i];
     81     c[i] = c[i] + REAL_EPSILON__;
     82     CHK(REALXY_FUNC__(is_identity)(c) == 0);
     83     c[i] = r;
     84   }
     85 
     86   d[0] = (REAL_COMPATIBLE)0.1;
     87   d[1] = (REAL_COMPATIBLE)(1.0/3.0);
     88   d[2] = (REAL_COMPATIBLE)0.3;
     89   d[3] = (REAL_COMPATIBLE)-0.7;
     90   d[4] = (REAL_COMPATIBLE)0.9;
     91   d[5] = (REAL_COMPATIBLE)-0.41;
     92   d[6] = (REAL_COMPATIBLE)0.22;
     93   d[7] = (REAL_COMPATIBLE)-0.01;
     94   d[8] = (REAL_COMPATIBLE)0.02;
     95   d[9] = (REAL_COMPATIBLE)1.1;
     96   d[10] = (REAL_COMPATIBLE)0.05;
     97   d[11] = (REAL_COMPATIBLE)-0.0125;
     98   d[12] = (REAL_COMPATIBLE)3.14;
     99   d[13] = (REAL_COMPATIBLE)1.23;
    100   d[14] = (REAL_COMPATIBLE)-4.56;
    101   d[15] = (REAL_COMPATIBLE)2.02;
    102 
    103   REALXY_CTOR__(c,
    104     (REAL)(REAL_COMPATIBLE)0.1,
    105     (REAL)(REAL_COMPATIBLE)(1.0/3.0),
    106     (REAL)(REAL_COMPATIBLE)0.3,
    107     (REAL)(REAL_COMPATIBLE)-0.7,
    108     (REAL)(REAL_COMPATIBLE)0.9,
    109     (REAL)(REAL_COMPATIBLE)-0.41,
    110     (REAL)(REAL_COMPATIBLE)0.22,
    111     (REAL)(REAL_COMPATIBLE)-0.01,
    112     (REAL)(REAL_COMPATIBLE)0.02,
    113     (REAL)(REAL_COMPATIBLE)1.1,
    114     (REAL)(REAL_COMPATIBLE)0.05,
    115     (REAL)(REAL_COMPATIBLE)-0.0125,
    116     (REAL)(REAL_COMPATIBLE)3.14,
    117     (REAL)(REAL_COMPATIBLE)1.23,
    118     (REAL)(REAL_COMPATIBLE)-4.56,
    119     (REAL)(REAL_COMPATIBLE)2.02);
    120   CHECK_REAL44(REALXY_CAST__(dst, d), c);
    121 
    122   REALXY_FUNC__(splat)(a, -1.0);
    123   CHECK_REAL44
    124     (REALXY_FUNC__(set_row)(a, REALX_CTOR__(c, 0.0, 1.0, 2.0, 3.0), 0),
    125      REALXY_CTOR__(c,
    126        0.0, -1.0, -1.0, -1.0,
    127        1.0, -1.0, -1.0, -1.0,
    128        2.0, -1.0, -1.0, -1.0,
    129        3.0, -1.0, -1.0, -1.0));
    130   CHECK_REAL44
    131     (a, REALXY_CTOR__(c,
    132        0.0, -1.0, -1.0, -1.0,
    133        1.0, -1.0, -1.0, -1.0,
    134        2.0, -1.0, -1.0, -1.0,
    135        3.0, -1.0, -1.0, -1.0));
    136   CHECK_REAL44
    137     (REALXY_FUNC__(set_row)(a, REALX_CTOR__(c, 4.0, 5.0, 6.0, 7.0), 1),
    138      REALXY_CTOR__(c,
    139        0.0, 4.0, -1.0, -1.0,
    140        1.0, 5.0, -1.0, -1.0,
    141        2.0, 6.0, -1.0, -1.0,
    142        3.0, 7.0, -1.0, -1.0));
    143   CHECK_REAL44
    144     (a, REALXY_CTOR__(c,
    145        0.0, 4.0, -1.0, -1.0,
    146        1.0, 5.0, -1.0, -1.0,
    147        2.0, 6.0, -1.0, -1.0,
    148        3.0, 7.0, -1.0, -1.0));
    149   CHECK_REAL44
    150     (REALXY_FUNC__(set_row)(a, REALX_CTOR__(c, 8.0, 9.0, 10.0, 11.0), 2),
    151      REALXY_CTOR__(c,
    152        0.0, 4.0, 8.0, -1.0,
    153        1.0, 5.0, 9.0, -1.0,
    154        2.0, 6.0, 10.0, -1.0,
    155        3.0, 7.0, 11.0, -1.0));
    156   CHECK_REAL44
    157     (a, REALXY_CTOR__(c,
    158        0.0, 4.0, 8.0, -1.0,
    159        1.0, 5.0, 9.0, -1.0,
    160        2.0, 6.0, 10.0, -1.0,
    161        3.0, 7.0, 11.0, -1.0));
    162   CHECK_REAL44
    163     (REALXY_FUNC__(set_row)(a, REALX_CTOR__(c, 12.0, 13.0, 14.0, 15.0), 3),
    164      REALXY_CTOR__(c,
    165        0.0, 4.0, 8.0, 12.0,
    166        1.0, 5.0, 9.0, 13.0,
    167        2.0, 6.0, 10.0, 14.0,
    168        3.0, 7.0, 11.0, 15.0));
    169   CHECK_REAL44
    170     (a, REALXY_CTOR__(c,
    171        0.0, 4.0, 8.0, 12.0,
    172        1.0, 5.0, 9.0, 13.0,
    173        2.0, 6.0, 10.0, 14.0,
    174        3.0, 7.0, 11.0, 15.0));
    175 
    176   CHECK_REAL44
    177     (REALXY_FUNC__(transpose)(a, a), REALXY_CTOR__(c,
    178        0.0, 1.0, 2.0, 3.0,
    179        4.0, 5.0, 6.0, 7.0,
    180        8.0, 9.0, 10.0, 11.0,
    181        12.0, 13.0, 14.0, 15.0));
    182   CHECK_REAL44
    183     (a, REALXY_CTOR__(c,
    184        0.0, 1.0, 2.0, 3.0,
    185        4.0, 5.0, 6.0, 7.0,
    186        8.0, 9.0, 10.0, 11.0,
    187        12.0, 13.0, 14.0, 15.0));
    188   CHECK_REAL44
    189     (REALXY_FUNC__(transpose)(b, a),REALXY_CTOR__(c,
    190        0.0, 4.0, 8.0, 12.0,
    191        1.0, 5.0, 9.0, 13.0,
    192        2.0, 6.0, 10.0, 14.0,
    193        3.0, 7.0, 11.0, 15.0));
    194   CHECK_REAL44
    195     (b, REALXY_CTOR__(c,
    196        0.0, 4.0, 8.0, 12.0,
    197        1.0, 5.0, 9.0, 13.0,
    198        2.0, 6.0, 10.0, 14.0,
    199        3.0, 7.0, 11.0, 15.0));
    200 
    201   REALXY_FUNC__(splat)(a, -1.0);
    202   CHECK_REAL44
    203     (REALXY_FUNC__(set_col)(a, REALX_CTOR__(c, 0.0, 1.0, 2.0, 3.0), 0),
    204      REALXY_CTOR__(c,
    205        0.0, 1.0, 2.0, 3.0,
    206        -1.0, -1.0, -1.0, -1.0,
    207        -1.0, -1.0, -1.0, -1.0,
    208        -1.0, -1.0, -1.0, -1.0));
    209   CHECK_REAL44
    210     (a, REALXY_CTOR__(c,
    211        0.0, 1.0, 2.0, 3.0,
    212        -1.0, -1.0, -1.0, -1.0,
    213        -1.0, -1.0, -1.0, -1.0,
    214        -1.0, -1.0, -1.0, -1.0));
    215   CHECK_REAL44
    216     (REALXY_FUNC__(set_col)(a, REALX_CTOR__(c, 4.0, 5.0, 6.0, 7.0), 1),
    217      REALXY_CTOR__(c,
    218        0.0, 1.0, 2.0, 3.0,
    219        4.0, 5.0, 6.0, 7.0,
    220        -1.0, -1.0, -1.0, -1.0,
    221        -1.0, -1.0, -1.0, -1.0));
    222   CHECK_REAL44
    223     (a, REALXY_CTOR__(c,
    224        0.0, 1.0, 2.0, 3.0,
    225        4.0, 5.0, 6.0, 7.0,
    226        -1.0, -1.0, -1.0, -1.0,
    227        -1.0, -1.0, -1.0, -1.0));
    228   CHECK_REAL44
    229     (REALXY_FUNC__(set_col)(a, REALX_CTOR__(c, 8.0, 9.0, 10.0, 11.0), 2),
    230      REALXY_CTOR__(c,
    231        0.0, 1.0, 2.0, 3.0,
    232        4.0, 5.0, 6.0, 7.0,
    233        8.0, 9.0, 10.0, 11.0,
    234        -1.0, -1.0, -1.0, -1.0));
    235   CHECK_REAL44
    236     (a, REALXY_CTOR__(c,
    237        0.0, 1.0, 2.0, 3.0,
    238        4.0, 5.0, 6.0, 7.0,
    239        8.0, 9.0, 10.0, 11.0,
    240        -1.0, -1.0, -1.0, -1.0));
    241   CHECK_REAL44
    242     (REALXY_FUNC__(set_col)(a, REALX_CTOR__(c, 12.0, 13.0, 14.0, 15.0), 3),
    243      REALXY_CTOR__(c,
    244        0.0, 1.0, 2.0, 3.0,
    245        4.0, 5.0, 6.0, 7.0,
    246        8.0, 9.0, 10.0, 11.0,
    247        12.0, 13.0, 14.0, 15.0));
    248   CHECK_REAL44
    249     (a, REALXY_CTOR__(c,
    250        0.0, 1.0, 2.0, 3.0,
    251        4.0, 5.0, 6.0, 7.0,
    252        8.0, 9.0, 10.0, 11.0,
    253        12.0, 13.0, 14.0, 15.0));
    254 
    255   CHECK_REAL4(REALXY_FUNC__(row)(b + 1, a, 0), REALX_CTOR__(c, 0.0, 4.0, 8.0, 12.0));
    256   CHECK_REAL4(b + 1, REALX_CTOR__(c, 0.0, 4.0, 8.0, 12.0));
    257   CHECK_REAL4(REALXY_FUNC__(row)(b + 2, a, 1), REALX_CTOR__(c, 1.0, 5.0, 9.0, 13.0));
    258   CHECK_REAL4(b + 2, REALX_CTOR__(c, 1.0, 5.0, 9.0, 13.0));
    259   CHECK_REAL4(REALXY_FUNC__(row)(b + 8, a, 2), REALX_CTOR__(c, 2.0, 6.0, 10.0, 14.0));
    260   CHECK_REAL4(b + 8, REALX_CTOR__(c, 2.0, 6.0, 10.0, 14.0));
    261   CHECK_REAL4(REALXY_FUNC__(row)(b + 5, a, 2), REALX_CTOR__(c, 2.0, 6.0, 10.0, 14.0));
    262   CHECK_REAL4(b + 5, REALX_CTOR__(c, 2.0, 6.0, 10.0, 14.0));
    263 
    264   CHECK_REAL4(REALXY_FUNC__(col)(b + 2, a, 0), REALX_CTOR__(c, 0.0, 1.0, 2.0, 3.0));
    265   CHECK_REAL4(b + 2, REALX_CTOR__(c, 0.0, 1.0, 2.0, 3.0));
    266   CHECK_REAL4(REALXY_FUNC__(col)(b + 1, a, 1), REALX_CTOR__(c, 4.0, 5.0, 6.0, 7.0));
    267   CHECK_REAL4(b + 1, REALX_CTOR__(c, 4.0, 5.0, 6.0, 7.0));
    268   CHECK_REAL4(REALXY_FUNC__(col)(b + 5, a, 2), REALX_CTOR__(c, 8.0, 9.0, 10.0, 11.0));
    269   CHECK_REAL4(b + 5, REALX_CTOR__(c, 8.0, 9.0, 10.0, 11.0));
    270   CHECK_REAL4(REALXY_FUNC__(col)(b + 5, a, 3), REALX_CTOR__(c, 12.0, 13.0, 14.0, 15.0));
    271   CHECK_REAL4(b + 5, REALX_CTOR__(c, 12.0, 13.0, 14.0, 15.0));
    272   CHECK_REAL4(REALXY_FUNC__(col_ptr)(a, 0), REALX_CTOR__(c, 0.0, 1.0, 2.0, 3.0));
    273   CHECK_REAL4(REALXY_FUNC__(col_ptr)(a, 1), REALX_CTOR__(c, 4.0, 5.0, 6.0, 7.0));
    274   CHECK_REAL4(REALXY_FUNC__(col_ptr)(a, 2), REALX_CTOR__(c, 8.0, 9.0, 10.0, 11.0));
    275   CHECK_REAL4(REALXY_FUNC__(col_ptr)(a, 3), REALX_CTOR__(c, 12.0, 13.0, 14.0, 15.0));
    276   CHECK_REAL4(REALXY_FUNC__(col_cptr)(a, 0), REALX_CTOR__(c, 0.0, 1.0, 2.0, 3.0));
    277   CHECK_REAL4(REALXY_FUNC__(col_cptr)(a, 1), REALX_CTOR__(c, 4.0, 5.0, 6.0, 7.0));
    278   CHECK_REAL4(REALXY_FUNC__(col_cptr)(a, 2), REALX_CTOR__(c, 8.0, 9.0, 10.0, 11.0));
    279   CHECK_REAL4(REALXY_FUNC__(col_cptr)(a, 3), REALX_CTOR__(c, 12.0, 13.0, 14.0, 15.0));
    280 
    281   CHECK_REAL4
    282     (REALXY_REALX_FUNC__(mul)(dst, a, REALX_CTOR__(c, 1.0, 2.0, 3.0, 1.0)),
    283      REALX_CTOR__(c, 44.0, 51.0, 58.0, 65.0));
    284   CHECK_REAL4(dst, REALX_CTOR__(c, 44.0, 51.0, 58.0, 65.0));
    285   CHECK_REAL4
    286     (REALX_REALXY_FUNC__(mul)(dst, REALX_CTOR__(c, 1.0, 2.0, 3.0, 1.0), a),
    287      REALX_CTOR__(c, 11.0, 39.0, 67.0, 95.0));
    288   CHECK_REAL4(dst, REALX_CTOR__(c, 11.0, 39.0, 67.0, 95.0));
    289   CHECK_REAL44
    290     (REALXY_FUNC__(mul)(dst, a, -1.0), REALXY_CTOR__(c,
    291      0.0, -1.0, -2.0, -3.0,
    292      -4.0, -5.0, -6.0, -7.0,
    293      -8.0, -9.0, -10.0, -11.0,
    294      -12.0, -13.0, -14.0, -15.0));
    295   CHECK_REAL44
    296     (dst, REALXY_CTOR__(c,
    297      0.0, -1.0, -2.0, -3.0,
    298      -4.0, -5.0, -6.0, -7.0,
    299      -8.0, -9.0, -10.0, -11.0,
    300      -12.0, -13.0, -14.0, -15.0));
    301 
    302   REALXY_CTOR__
    303     (a,
    304      1.0, 2.0, 3.0, 4.0,
    305      4.0, 5.0, 6.0, 7.0,
    306      7.0, 8.0, 9.0, 10.0,
    307      10.0, 11.0, 12.0, 13.0);
    308   REALXY_CTOR__
    309     (b,
    310      2.0, 9.0, 8.0, 1.0,
    311      1.0, -2.0, 2.0, 1.0,
    312      1.0, -8.0, -4.0, 2.0,
    313      1.0, 3.0, 4.0, 2.0);
    314   CHECK_REAL44
    315     (REALXY_REALXY_FUNC__(mul)(dst, a, b), REALXY_CTOR__(c,
    316      104.0, 124.0, 144.0, 164.0,
    317      17.0, 19.0, 21.0, 23.0,
    318      -39.0, -48.0, -57.0, -66.0,
    319      61.0, 71.0, 81.0, 91.0));
    320   CHECK_REAL44
    321     (dst, REALXY_CTOR__(c,
    322      104.0, 124.0, 144.0, 164.0,
    323      17.0, 19.0, 21.0, 23.0,
    324      -39.0, -48.0, -57.0, -66.0,
    325      61.0, 71.0, 81.0, 91.0));
    326   CHECK_REAL44
    327     (REALXY_REALXY_FUNC__(mul)(a, a, b), REALXY_CTOR__(c,
    328      104.0, 124.0, 144.0, 164.0,
    329      17.0, 19.0, 21.0, 23.0,
    330      -39.0, -48.0, -57.0, -66.0,
    331      61.0, 71.0, 81.0, 91.0));
    332   CHECK_REAL44
    333     (a, REALXY_CTOR__(c,
    334      104.0, 124.0, 144.0, 164.0,
    335      17.0, 19.0, 21.0, 23.0,
    336      -39.0, -48.0, -57.0, -66.0,
    337      61.0, 71.0, 81.0, 91.0));
    338   REALXY_CTOR__
    339     (a,
    340      1.0, 2.0, 3.0, 4.0,
    341      4.0, 5.0, 6.0, 7.0,
    342      7.0, 8.0, 9.0, 10.0,
    343      10.0, 11.0, 12.0, 13.0);
    344   CHECK_REAL44
    345     (REALXY_REALXY_FUNC__(mul)(b, a, b), REALXY_CTOR__(c,
    346      104.0, 124.0, 144.0, 164.0,
    347      17.0, 19.0, 21.0, 23.0,
    348      -39.0, -48.0, -57.0, -66.0,
    349      61.0, 71.0, 81.0, 91.0));
    350   CHECK_REAL44
    351     (b, REALXY_CTOR__(c,
    352      104.0, 124.0, 144.0, 164.0,
    353      17.0, 19.0, 21.0, 23.0,
    354      -39.0, -48.0, -57.0, -66.0,
    355      61.0, 71.0, 81.0, 91.0));
    356 
    357   REALXY_CTOR__
    358     (a,
    359      0.0, 1.0, 2.0, 3.0,
    360      4.0, 5.0, 6.0, 7.0,
    361      8.0, 9.0, 10.0, 11.0,
    362      12.0, 13.0, 14.0, 15.0);
    363   REALXY_CTOR__
    364     (b,
    365      0.0, 2.0, 1.0, 3.0,
    366      1.0, -2.0, -1.0, -3.0,
    367      1.0, 0.0, 0.0, 2.0,
    368      3.0, 2.0, 1.0, 0.0);
    369   CHECK_REAL44
    370     (REALXY_FUNC__(add)(dst, a, b), REALXY_CTOR__(c,
    371      0.0, 3.0, 3.0, 6.0,
    372      5.0, 3.0, 5.0, 4.0,
    373      9.0, 9.0, 10.0, 13.0,
    374      15.0, 15.0, 15.0, 15.0));
    375   CHECK_REAL44
    376     (dst, REALXY_CTOR__(c,
    377      0.0, 3.0, 3.0, 6.0,
    378      5.0, 3.0, 5.0, 4.0,
    379      9.0, 9.0, 10.0, 13.0,
    380      15.0, 15.0, 15.0, 15.0));
    381   CHECK_REAL44
    382     (REALXY_FUNC__(sub)(dst, a, b), REALXY_CTOR__(c,
    383      0.0, -1.0, 1.0, 0.0,
    384      3.0, 7.0, 7.0, 10.0,
    385      7.0, 9.0, 10.0, 9.0,
    386      9.0, 11.0, 13.0, 15.0));
    387   CHECK_REAL44
    388     (dst, REALXY_CTOR__(c,
    389      0.0, -1.0, 1.0, 0.0,
    390      3.0, 7.0, 7.0, 10.0,
    391      7.0, 9.0, 10.0, 9.0,
    392      9.0, 11.0, 13.0, 15.0));
    393   CHECK_REAL44
    394     (REALXY_FUNC__(minus)(a, b), REALXY_CTOR__(c,
    395      0.0, -2.0, -1.0, -3.0,
    396      -1.0, 2.0, 1.0, 3.0,
    397      -1.0, 0.0, 0.0, -2.0,
    398      -3.0, -2.0, -1.0, 0.0));
    399   CHECK_REAL44
    400     (a, REALXY_CTOR__(c,
    401      0.0, -2.0, -1.0, -3.0,
    402      -1.0, 2.0, 1.0, 3.0,
    403      -1.0, 0.0, 0.0, -2.0,
    404      -3.0, -2.0, -1.0, 0.0));
    405 
    406   REALXY_FUNC__(set)(a, b);
    407   CHK(REALXY_FUNC__(eq)(a, b) == 1);
    408   REALXY_FUNC__(add)(a, a, REALXY_FUNC__(splat)(c, FLT_EPSILON));
    409   CHK(REALXY_FUNC__(eq_eps)(a, b, FLT_EPSILON) == 1);
    410   CHK(REALXY_FUNC__(eq_eps)(a, b, FLT_EPSILON * (REAL)0.9) == 0);
    411 
    412   REALXY_FUNC__(set)
    413     (a, REALXY_CTOR__(c,
    414      2.0, 9.0, 8.0, 1.0,
    415      1.0, -2.0, 2.0, 1.0,
    416      1.0, -8.0, -4.0, 2.0,
    417      1.0, 3.0, 4.0, 2.0));
    418   CHK(REALXY_FUNC__(det)(a) == 78.0);
    419   CHK(REALXY_FUNC__(inverse)(b, a) == 78.0);
    420   REALXY_REALXY_FUNC__(mul)(dst, a, b);
    421   CHK(REALXY_FUNC__(eq_eps)
    422     (dst, REALXY_CTOR__(c,
    423      1.0, 0.0, 0.0, 0.0,
    424      0.0, 1.0, 0.0, 0.0,
    425      0.0, 0.0, 1.0, 0.0,
    426      0.0, 0.0, 0.0, 1.0),
    427      1.e-6f));
    428   CHK(REALXY_FUNC__(invtrans)(a, a) == 78.0);
    429   REALXY_FUNC__(transpose)(a, a);
    430   CHECK_REAL44(a, b);
    431 
    432   return 0;
    433 }