1function gbtest70 2%GBTEST70 test GrB.random 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: GPL-3.0-or-later 6 7rng ('default') ; A = sprand (4, 5, 0.5) ; 8rng ('default') ; C0 = sprand (A) ; 9rng ('default') ; C1 = GrB.random (A) ; 10assert (isequal (C0, C1)) ; 11 12types = gbtest_types ; 13 14rng ('default') ; 15 16for k = 1:length(types) 17 type = types {k} ; 18 19 rng ('default') ; 20 G = GrB.random (30, 40, 0.6) ; %#ok<*NASGU> 21 22 r = gbtest_cast ([3 40], type) ; 23 G = GrB.random (300, 400, 0.6, 'range', r) ; 24 assert (isequal (GrB.type (G), type)) ; 25 26 if (~isequal (type, 'logical')) 27 [i,j,x] = find (G) ; %#ok<*ASGLU> 28 if (isinteger (r)) 29 assert (min (r) == min (r)) ; 30 assert (max (r) == max (r)) ; 31 elseif (isreal (r)) 32 d = min (x) - min (r) ; assert (d > 0 && d < 0.01) ; 33 d = max (r) - max (x) ; assert (d > 0 && d < 0.01) ; 34 end 35 end 36 37 G = GrB.random (30, 40, 0.6, 'normal') ; 38 assert (isequal (GrB.type (G), 'double')) ; 39 40 G = GrB.random (30, 40, inf, 'normal') ; 41 assert (isequal (GrB.type (G), 'double')) ; 42 assert (nnz (G) == prod (size (G))) ; %#ok<*PSIZE> 43 44 G = GrB.random (30, 40, 0.6, 'normal', 'range', r) ; 45 assert (isequal (GrB.type (G), type)) ; 46 47 G = GrB.random (30, 40, 0.6, 'uniform') ; 48 assert (isequal (GrB.type (G), 'double')) ; 49 50 G = GrB.random (30, 40, 0.6, 'uniform', 'range', r) ; 51 assert (isequal (GrB.type (G), type)) ; 52 53 G = GrB.random (30, 0.6, 'symmetric') ; 54 assert (issymmetric (G)) ; 55 assert (isequal (GrB.type (G), 'double')) ; 56 57 G = GrB.random (30, inf, 'symmetric') ; 58 assert (issymmetric (G)) ; 59 assert (isequal (GrB.type (G), 'double')) ; 60 assert (nnz (G) == prod (size (G))) ; 61 62 G = GrB.random (30, 30, 0.6, 'unsymmetric') ; 63 assert (~issymmetric (G)) ; 64 assert (isequal (GrB.type (G), 'double')) ; 65 66 G = GrB.random (30, 0.6, 'normal', 'symmetric') ; 67 assert (issymmetric (G)) ; 68 assert (isequal (GrB.type (G), 'double')) ; 69 70 G = GrB.random (30, 0.6, 'normal', 'range', r, 'symmetric') ; 71 assert (issymmetric (G)) ; 72 assert (isequal (GrB.type (G), type)) ; 73 74 G = GrB.random (30, 0.6, 'normal', 'range', r, 'hermitian') ; 75 assert (ishermitian (G)) ; 76 assert (isequal (GrB.type (G), type)) ; 77 78 S = sprandsym (30, 0.6) ; 79 G = sprandsym (GrB (S)) ; 80 assert (isequal (spones (G), spones (S))) ; 81 assert (issymmetric (G)) ; 82 assert (isequal (GrB.type (G), 'double')) ; 83 84 S = sprandn (30, 40, 0.6) ; 85 G = sprandn (GrB (S)) ; 86 assert (isequal (spones (G), spones (S))) ; 87 assert (isequal (GrB.type (G), 'double')) ; 88 89 S = sprand (30, 40, 0.6) ; 90 G = sprand (GrB (S)) ; 91 assert (isequal (spones (G), spones (S))) ; 92 assert (isequal (GrB.type (G), 'double')) ; 93 94 G = sprand (10, 12, GrB (0.5)) ; 95 assert (isequal (GrB.type (G), 'double')) ; 96 assert (isa (G, 'GrB')) ; 97 assert (isequal (size (G), [10 12])) ; 98 99 G = sprandn (10, 12, GrB (0.5)) ; 100 assert (isequal (GrB.type (G), 'double')) ; 101 assert (isa (G, 'GrB')) ; 102 assert (isequal (size (G), [10 12])) ; 103 gnz = nnz (G) ; 104 % nnz (G) is hard to predict because of duplicates 105 assert (abs (10*12*0.5 - gnz) < 30) ; 106 107 G = sprandn (10, 12, GrB (inf)) ; 108 assert (isequal (GrB.type (G), 'double')) ; 109 assert (isa (G, 'GrB')) ; 110 assert (isequal (size (G), [10 12])) ; 111 assert (nnz (G) == 120) ; 112 113 G = sprandsym (10, GrB (0.5)) ; 114 assert (isequal (GrB.type (G), 'double')) ; 115 assert (isa (G, 'GrB')) ; 116 assert (isequal (size (G), [10 10])) ; 117 gnz = nnz (G) ; 118 assert (abs (10*10*0.5 - gnz) < 30) ; 119 120 G = sprandsym (10, GrB (inf)) ; 121 assert (isequal (GrB.type (G), 'double')) ; 122 assert (isa (G, 'GrB')) ; 123 assert (isequal (size (G), [10 10])) ; 124 assert (nnz (G) == 100) 125 assert (GrB.isfull (G)) ; 126 assert (GrB.isfull (double (G))) ; 127 assert (GrB.isfull (full (G))) ; 128 assert (GrB.isfull (full (double (G)))) ; 129 130end 131 132 133fprintf ('gbtest70: all tests passed\n') ; 134 135