1function gbtest79
2%GBTEST79 test real power
3% Tests all real, inf, and nan cases.
4
5% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
6% SPDX-License-Identifier: GPL-3.0-or-later
7
8list = [-2:0.5:2 inf -inf nan] ;
9
10fprintf ('gbtest79: test power') ;
11
12maxerr = 0 ;
13maxerr_single = 0 ;
14
15for xr = list
16    fprintf ('.') ;
17
18    X = xr ;
19    GX = GrB (X) ;
20    Xs = single (X) ;
21    GXs = GrB (Xs) ;
22
23    for yr = list
24        Y = yr ;
25        GY = GrB (Y) ;
26        Ys = single (Y) ;
27        GYs = GrB (Ys) ;
28
29        Z = X .^ Y ;
30        Z2 = GX .^ GY ;
31        [err, errnan] = gbtest_err (Z, Z2) ;
32        znorm = abs (Z) ;
33        if (znorm > 0)
34            err = err / znorm ;
35        end
36
37        if (err > 1e-14)
38            fprintf ('(%g) .^ (%g) = (%g,%g) (%g,%g)', ...
39                xr, yr, real (Z), imag (Z), ...
40                real (Z2), imag (Z2)) ;
41            fprintf (' err: %g', err) ;
42            fprintf (' DOUBLE DIFFERS') ;
43            fprintf ('\n') ;
44            % pause
45        end
46        if (~errnan)
47            maxerr = max (maxerr, err) ;
48        end
49        % assert (err < 1e-14)
50
51        Z = Xs .^ Ys ;
52        Z2 = GXs .^ GYs ;
53        [err, errnan] = gbtest_err (Z, Z2) ;
54        znorm = abs (Z) ;
55        if (znorm > 0)
56            err = err / znorm ;
57        end
58        if (~errnan)
59            maxerr_single = max (maxerr_single, err) ;
60        end
61
62        if (err > 1e-6)
63            fprintf ('(%g) .^ (%g) = (%g,%g) (%g,%g)', ...
64                xr, yr, real (Z), imag (Z), ...
65                real (Z2), imag (Z2)) ;
66            fprintf (' err: %g', err) ;
67            fprintf (' SINGLE DIFFERS') ;
68            fprintf ('\n') ;
69            % pause
70        end
71
72        % assert (maxerr_single < 1e-6) ;
73    end
74end
75
76A = int32 (magic (4)) ;
77B = int32 (2 * rand (4)) ;
78GA = GrB (A) ;
79GB = GrB (B) ;
80C1 = A.^B ;
81C2 = GA.^GB ;
82assert (isequal (C1, C2)) ;
83
84fprintf ('\nmaxerr: %g %g\n', maxerr, maxerr_single) ;
85assert (maxerr < 1e-14)
86assert (maxerr_single < 1e-6)
87
88fprintf ('\ngbtest79: all tests passed\n') ;
89
90