1function gbtest13
2%GBTEST13 test find and GrB.extracttuples
3
4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
5% SPDX-License-Identifier: GPL-3.0-or-later
6
7list = gbtest_types ;
8
9A = 100 * rand (3) ;
10[I, J, X] = find (A) ; %#ok<*ASGLU>
11I_0 = int64 (I) - 1 ;
12J_0 = int64 (J) - 1 ;
13A (1,1) = 0 ;
14
15desc_default.base = 'default' ;
16desc0.base = 'zero-based' ;
17desc1.base = 'one-based' ;
18desc1_int.base = 'one-based int' ;
19
20for k = 1:length(list)
21    xtype = list {k} ;
22    fprintf ('%s ', xtype) ;
23    C = gbtest_cast (A, xtype) ;
24    G = GrB (C) ;
25
26    [I1, J1, X1] = find (G) ;
27    nz = find (C (:) ~= 0) ;
28    assert (isequal (C (nz), X1)) ;
29    assert (isequal (I (nz), I1)) ;
30    assert (isequal (J (nz), J1)) ;
31
32    [I1, J1] = find (G) ;
33    nz = find (C (:) ~= 0) ;
34    assert (isequal (I (nz), I1)) ;
35    assert (isequal (J (nz), J1)) ;
36
37    [I0, J0, X0] = GrB.extracttuples (G, desc0)  ;
38    assert (isequal (C (:), X0)) ;
39    assert (isequal (I_0, I0)) ;
40    assert (isequal (J_0, J0)) ;
41
42    [I1, J1, X0] = GrB.extracttuples (G, desc1) ;
43    assert (isequal (C (:), X0)) ;
44    assert (isequal (double (I_0+1), I1)) ;
45    assert (isequal (double (J_0+1), J1)) ;
46
47    [I1, J1, X0] = GrB.extracttuples (G, desc1_int) ;
48    assert (isequal (C (:), X0)) ;
49    assert (isequal (I_0+1, I1)) ;
50    assert (isequal (J_0+1, J1)) ;
51
52    [I1, J1, X0] = GrB.extracttuples (G, desc_default) ;
53    assert (isequal (C (:), X0)) ;
54    assert (isequal (double (I_0+1), I1)) ;
55    assert (isequal (double (J_0+1), J1)) ;
56
57    [I1, J1, X0] = GrB.extracttuples (G) ;
58    assert (isequal (C (:), X0)) ;
59    assert (isequal (double (I_0+1), I1)) ;
60    assert (isequal (double (J_0+1), J1)) ;
61
62    [I1, J1] = GrB.extracttuples (G) ;
63    assert (isequal (double (I_0+1), I1)) ;
64    assert (isequal (double (J_0+1), J1)) ;
65
66    [I1] = GrB.extracttuples (G, desc0) ;
67    assert (isequal (I1, I0)) ;
68end
69
70v = rand (1,3) ;
71[i1, j1, x1] = find (v) ;
72[i2, j2, x2] = find (GrB (v)) ;
73assert (isequal (x1, x2)) ;
74assert (isequal (i1, i2)) ;
75assert (isequal (j1, j2)) ;
76
77[i2, j2] = find (GrB (v)) ;
78assert (isequal (i1, i2)) ;
79assert (isequal (j1, j2)) ;
80
81j1 = find (v) ;
82j2 = find (GrB (v)) ;
83assert (isequal (j1, j2)) ;
84
85G = GrB.prune (GrB (A, 'by row')) ;
86[i1, j1, x1] = find (A, 4) ;
87[i2, j2, x2] = find (G, 4) ;
88assert (isequal (x1, x2)) ;
89assert (isequal (i1, i2)) ;
90assert (isequal (j1, j2)) ;
91
92[i1, j1, x1] = find (A, 4, 'last') ;
93[i2, j2, x2] = find (G, 4, 'last') ;
94assert (isequal (x1, x2)) ;
95assert (isequal (i1, i2)) ;
96assert (isequal (j1, j2)) ;
97
98fprintf ('\ngbtest13: all tests passed\n') ;
99
100