1function gbtest80 2%GBTEST80 test complex division and 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 ('gbtest80: test complex division and power') ; 11 12maxerr = 0 ; 13maxerr_single = 0 ; 14stol = 1e-5 ; 15dtol = 1e-14 ; 16 17for xr = list 18 fprintf ('\n%g ', xr) ; 19 % fprintf ('\n------------------------------------------\n') ; 20 for xi = list 21 fprintf ('.') 22 % fprintf ('\n') ; 23 X = complex (xr, xi) ; 24 GX = GrB (X) ; 25 Xs = single (X) ; 26 GXs = GrB (Xs) ; 27 28 for yr = list 29 for yi = list 30 31 Y = complex (yr, yi) ; 32 GY = GrB (Y) ; 33 Ys = single (Y) ; 34 GYs = GrB (Ys) ; 35 36 Z = X / Y ; 37 Z2 = GX / GY ; 38 [err, errnan] = gbtest_err (Z, Z2) ; 39 znorm = abs (Z) ; 40 if (znorm > 1) 41 err = err / znorm ; 42 end 43 if (~errnan) 44 maxerr = max (maxerr, err) ; 45 end 46 if (err > dtol) 47 fprintf ('(%g,%g) / (%g,%g) = (%g,%g) (%g,%g)', ... 48 xr, xi, yr, yi, real (Z), imag (Z), ... 49 real (Z2), imag (Z2)) ; 50 fprintf (' err: %g', err) ; 51 fprintf (' DOUBLE DIFFERS') ; 52 fprintf ('\n') ; 53 % pause 54 end 55 56 Z = Xs / Ys ; 57 Z2 = GXs / GYs ; 58 [err, errnan] = gbtest_err (Z, Z2) ; 59 znorm = abs (Z) ; 60 if (znorm > 1) 61 err = err / znorm ; 62 end 63 if (~errnan) 64 maxerr_single = max (maxerr_single, err) ; 65 end 66 if (err > stol) 67 fprintf ('(%g,%g) / (%g,%g) = (%g,%g) (%g,%g)', ... 68 xr, xi, yr, yi, real (Z), imag (Z), ... 69 real (Z2), imag (Z2)) ; 70 fprintf (' err: %g', err) ; 71 fprintf (' SINGLE DIFFERS') ; 72 fprintf ('\n') ; 73 % pause 74 end 75 76 Z = X .^ Y ; 77 Z2 = GX .^ GY ; 78 [err, errnan] = gbtest_err (Z, Z2) ; 79 znorm = abs (Z) ; 80 if (znorm > 1) 81 err = err / znorm ; 82 end 83 if (~errnan) 84 maxerr = max (maxerr, err) ; 85 end 86 if (err > dtol) 87 fprintf ('(%g,%g) .^ (%g,%g) = (%g,%g) (%g,%g)', ... 88 xr, xi, yr, yi, real (Z), imag (Z), ... 89 real (Z2), imag (Z2)) ; 90 fprintf (' err: %g', err) ; 91 fprintf (' DOUBLE DIFFERS') ; 92 fprintf ('\n') ; 93 % pause 94 end 95 96 Z = Xs .^ Ys ; 97 Z2 = GXs .^ GYs ; 98 [err, errnan] = gbtest_err (Z, Z2) ; 99 znorm = abs (Z) ; 100 if (znorm > 1) 101 err = err / znorm ; 102 end 103 if (~errnan) 104 maxerr_single = max (maxerr_single, err) ; 105 end 106 if (err > stol) 107 fprintf ('(%g,%g) .^ (%g,%g) = (%g,%g) (%g,%g)', ... 108 xr, xi, yr, yi, real (Z), imag (Z), ... 109 real (Z2), imag (Z2)) ; 110 fprintf (' err: %g', err) ; 111 fprintf (' SINGLE DIFFERS') ; 112 fprintf ('\n') ; 113 % pause 114 end 115 116 end 117 end 118 end 119end 120 121fprintf ('\nmaxerr: %g %g\n', maxerr, maxerr_single) ; 122assert (maxerr < dtol) 123assert (maxerr_single < stol) 124 125fprintf ('\ngbtest80: all tests passed\n') ; 126 127