1function gbtest18 2%GBTEST18 test comparators (and, or, >, ...) 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: GPL-3.0-or-later 6 7tol = 1e-14 ; 8rng ('default') ; 9for trial = 1:21 10 11 fprintf ('.') ; 12 13 if (mod (trial, 10) == 1) 14 m = 1 ; 15 n = 1 ; 16 else 17 m = 4 ; 18 n = 5 ; 19 end 20 21 MA = sprand (m,n, 0.5) ; A (2,2) = 2 ; %#ok<*NASGU> 22 MB = sprand (m,n, 0.5) ; B (2,2) = 2 ; 23 24 if (rand < 0.1) 25 MA = logical (MA) ; 26 MB = logical (MB) ; 27 end 28 29 GA = GrB (MA) ; 30 GB = GrB (MB) ; 31 32 C1 = (MA < MB) ; 33 C2 = (GA < GB) ; 34 C3 = (MA < GB) ; 35 C4 = (GA < MB) ; 36 assert (gbtest_eq (C1, C2)) ; 37 assert (gbtest_eq (C1, C3)) ; 38 assert (gbtest_eq (C1, C4)) ; 39 40 C1 = (MA <= MB) ; 41 C2 = (GA <= GB) ; 42 C3 = (MA <= GB) ; 43 C4 = (GA <= MB) ; 44 assert (gbtest_eq (C1, C2)) ; 45 assert (gbtest_eq (C1, C3)) ; 46 assert (gbtest_eq (C1, C4)) ; 47 48 C1 = (MA > MB) ; 49 C2 = (GA > GB) ; 50 C3 = (MA > GB) ; 51 C4 = (GA > MB) ; 52 assert (gbtest_eq (C1, C2)) ; 53 assert (gbtest_eq (C1, C3)) ; 54 assert (gbtest_eq (C1, C4)) ; 55 56 C1 = (MA >= MB) ; 57 C2 = (GA >= GB) ; 58 C3 = (MA >= GB) ; 59 C4 = (GA >= MB) ; 60 assert (gbtest_eq (C1, C2)) ; 61 assert (gbtest_eq (C1, C3)) ; 62 assert (gbtest_eq (C1, C4)) ; 63 64 C1 = (MA == MB) ; 65 C2 = (GA == GB) ; 66 C3 = (MA == GB) ; 67 C4 = (GA == MB) ; 68 assert (gbtest_eq (C1, C2)) ; 69 assert (gbtest_eq (C1, C3)) ; 70 assert (gbtest_eq (C1, C4)) ; 71 72 C1 = (MA ~= MB) ; 73 C2 = (GA ~= GB) ; 74 C3 = (MA ~= GB) ; 75 C4 = (GA ~= MB) ; 76 assert (gbtest_eq (C1, C2)) ; 77 assert (gbtest_eq (C1, C3)) ; 78 assert (gbtest_eq (C1, C4)) ; 79 80 if (~islogical (MA)) 81 C1 = (MA .^ MB) ; 82 C2 = (GA .^ GB) ; 83 C3 = (MA .^ GB) ; 84 C4 = (GA .^ MB) ; 85 assert (gbtest_err (C1, C2) < tol) ; 86 assert (gbtest_err (C1, C3) < tol) ; 87 assert (gbtest_err (C1, C4) < tol) ; 88 end 89 90 C1 = (MA & MB) ; 91 C2 = (GA & GB) ; 92 C3 = (MA & GB) ; 93 C4 = (GA & MB) ; 94 assert (gbtest_eq (C1, C2)) ; 95 assert (gbtest_eq (C1, C3)) ; 96 assert (gbtest_eq (C1, C4)) ; 97 if (islogical (MA)) 98 % C1 = min (MA , MB) ; 99 C2 = min (GA , GB) ; 100 C3 = min (MA , GB) ; 101 C4 = min (GA , MB) ; 102 assert (gbtest_eq (C1, C2)) ; 103 assert (gbtest_eq (C1, C3)) ; 104 assert (gbtest_eq (C1, C4)) ; 105 end 106 107 C1 = (MA | MB) ; 108 C2 = (GA | GB) ; 109 C3 = (MA | GB) ; 110 C4 = (GA | MB) ; 111 assert (gbtest_eq (C1, C2)) ; 112 assert (gbtest_eq (C1, C3)) ; 113 assert (gbtest_eq (C1, C4)) ; 114 if (islogical (MA)) 115 % C1 = max (MA , MB) ; 116 C2 = max (GA , GB) ; 117 C3 = max (MA , GB) ; 118 C4 = max (GA , MB) ; 119 assert (gbtest_eq (C1, C2)) ; 120 assert (gbtest_eq (C1, C3)) ; 121 assert (gbtest_eq (C1, C4)) ; 122 end 123 124 C1 = xor (MA , MB) ; 125 C2 = xor (GA , GB) ; 126 C3 = xor (MA , GB) ; 127 C4 = xor (GA , MB) ; 128 assert (gbtest_eq (C1, C2)) ; 129 assert (gbtest_eq (C1, C3)) ; 130 assert (gbtest_eq (C1, C4)) ; 131 132 C1 = ~MA ; 133 C2 = ~GA ; 134 assert (gbtest_eq (C1, C2)) ; 135 136 b = (trial - 5) / 10 ; 137 if (islogical (MA)) 138 b = logical (b) ; 139 end 140 g = GrB (b) ; 141 142 assert (gbtest_eq (MA < b, GA < b)) ; 143 assert (gbtest_eq (MA <= b, GA <= b)) ; 144 % MA > b 145 % GA > b 146 assert (gbtest_eq (MA > b, GA > b)) ; 147 assert (gbtest_eq (MA >= b, GA >= b)) ; 148 assert (gbtest_eq (MA == b, GA == b)) ; 149 assert (gbtest_eq (MA ~= b, GA ~= b)) ; 150 if (~islogical (MA)) 151 MC = MA .^ b ; 152 GC = GA .^ b ; 153 assert (gbtest_err (MC, GC) < tol) ; 154 end 155 156 assert (gbtest_eq (MA < b, GA < g)) ; 157 assert (gbtest_eq (MA <= b, GA <= g)) ; 158 assert (gbtest_eq (MA > b, GA > g)) ; 159 assert (gbtest_eq (MA >= b, GA >= g)) ; 160 assert (gbtest_eq (MA == b, GA == g)) ; 161 assert (gbtest_eq (MA ~= b, GA ~= g)) ; 162 if (~islogical (MA)) 163 assert (gbtest_err (MA .^ b, GA .^ g) < tol) ; 164 end 165 166 assert (gbtest_eq (MA < b, MA < g)) ; 167 assert (gbtest_eq (MA <= b, MA <= g)) ; 168 assert (gbtest_eq (MA > b, MA > g)) ; 169 assert (gbtest_eq (MA >= b, MA >= g)) ; 170 assert (gbtest_eq (MA == b, MA == g)) ; 171 assert (gbtest_eq (MA ~= b, MA ~= g)) ; 172 if (~islogical (MA)) 173 assert (gbtest_err (MA .^ b, MA .^ g) < tol) ; 174 end 175 176 assert (gbtest_eq (b < MA, b < GA)) ; 177 assert (gbtest_eq (b <= MA, b <= GA)) ; 178 assert (gbtest_eq (b > MA, b > GA)) ; 179 assert (gbtest_eq (b >= MA, b >= GA)) ; 180 assert (gbtest_eq (b == MA, b == GA)) ; 181 assert (gbtest_eq (b ~= MA, b ~= GA)) ; 182 if (~islogical (MA)) 183 assert (gbtest_err (b .^ MA, b .^ GA) < tol) ; 184 end 185 186 assert (gbtest_eq (b < MA, g < GA)) ; 187 assert (gbtest_eq (b <= MA, g <= GA)) ; 188 assert (gbtest_eq (b > MA, g > GA)) ; 189 assert (gbtest_eq (b >= MA, g >= GA)) ; 190 assert (gbtest_eq (b == MA, g == GA)) ; 191 assert (gbtest_eq (b ~= MA, g ~= GA)) ; 192 if (~islogical (MA)) 193 assert (gbtest_err (b .^ MA, g .^ GA) < tol) ; 194 end 195 196 assert (gbtest_eq (b < MA, g < MA)) ; 197 assert (gbtest_eq (b <= MA, g <= MA)) ; 198 assert (gbtest_eq (b > MA, g > MA)) ; 199 assert (gbtest_eq (b >= MA, g >= MA)) ; 200 assert (gbtest_eq (b == MA, g == MA)) ; 201 assert (gbtest_eq (b ~= MA, g ~= MA)) ; 202 if (~islogical (MA)) 203 assert (gbtest_err (b .^ MA, g .^ MA) < tol) ; 204 end 205 206 k = (mod (trial,2) == 0) ; 207 gbk = GrB (k) ; 208 209 C1 = (MA & k) ; 210 C2 = (GA & gbk) ; 211 C3 = (MA & gbk) ; 212 C4 = (GA & k) ; 213 assert (gbtest_eq (C1, C2)) ; 214 assert (gbtest_eq (C1, C3)) ; 215 assert (gbtest_eq (C1, C4)) ; 216 if (islogical (MA)) 217 % C1 = min (MA , k) ; 218 C2 = min (GA , gbk) ; 219 C3 = min (MA , gbk) ; 220 C4 = min (GA , k) ; 221 assert (gbtest_eq (C1, C2)) ; 222 assert (gbtest_eq (C1, C3)) ; 223 assert (gbtest_eq (C1, C4)) ; 224 end 225 226 C1 = (k & MA) ; 227 C2 = (gbk & GA) ; 228 C3 = (gbk & MA) ; 229 C4 = (k & GA) ; 230 assert (gbtest_eq (C1, C2)) ; 231 assert (gbtest_eq (C1, C3)) ; 232 assert (gbtest_eq (C1, C4)) ; 233 234 C1 = (MA | k) ; 235 C2 = (GA | gbk) ; 236 C3 = (MA | gbk) ; 237 C4 = (GA | k) ; 238 assert (gbtest_eq (C1, C2)) ; 239 assert (gbtest_eq (C1, C3)) ; 240 assert (gbtest_eq (C1, C4)) ; 241 242 C1 = xor (MA, k) ; 243 C2 = xor (GA, gbk) ; 244 C3 = xor (MA, gbk) ; 245 C4 = xor (GA, k) ; 246 assert (gbtest_eq (C1, C2)) ; 247 assert (gbtest_eq (C1, C3)) ; 248 assert (gbtest_eq (C1, C4)) ; 249 250 C1 = (k | MA) ; 251 C2 = (gbk | GA) ; 252 C3 = (gbk | MA) ; 253 C4 = (k | GA) ; 254 assert (gbtest_eq (C1, C2)) ; 255 assert (gbtest_eq (C1, C3)) ; 256 assert (gbtest_eq (C1, C4)) ; 257 258 C1 = xor (k , MA) ; 259 C2 = xor (gbk , GA) ; 260 C3 = xor (gbk , MA) ; 261 C4 = xor (k , GA) ; 262 assert (gbtest_eq (C1, C2)) ; 263 assert (gbtest_eq (C1, C3)) ; 264 assert (gbtest_eq (C1, C4)) ; 265 266 k = double (k) ; 267 gbk = GrB (k) ; 268 if (~islogical (MA)) 269 C1 = (k .^ MA) ; 270 C2 = (gbk .^ GA) ; 271 C3 = (gbk .^ MA) ; 272 C4 = (k .^ GA) ; 273 assert (gbtest_err (C1, C2) < tol) ; 274 assert (gbtest_err (C1, C3) < tol) ; 275 assert (gbtest_err (C1, C4) < tol) ; 276 end 277 278end 279 280fprintf ('\ngbtest18: all tests passed\n') ; 281 282