1function gbtest16
2%GBTEST16 test GrB.extract
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') ;
8
9n = 6 ;
10A = 100 * sprand (n, n, 0.5) ;
11AT = A' ;
12M = sparse (rand (n)) > 0.5 ;
13Cin = sprand (n, n, 0.5) ;
14
15Cout = GrB.extract (Cin, A) ;
16assert (gbtest_eq (A, Cout)) ;
17
18Cout = GrB.extract (Cin, A, { }, { }) ;
19assert (gbtest_eq (A, Cout)) ;
20
21Cout = GrB.extract (A, {n, -1, 1}, {n, -1, 1}) ;
22assert (gbtest_eq (A (n:-1:1, n:-1:1), Cout)) ;
23
24Cout = GrB.extract (Cin, M, A) ;
25C2 = Cin ;
26C2 (M) = A (M) ;
27assert (gbtest_eq (C2, Cout)) ;
28
29Cout = GrB.extract (Cin, '+', A) ;
30C2 = Cin + A ;
31assert (gbtest_eq (C2, Cout)) ;
32
33d.in0 = 'transpose' ;
34Cout = GrB.extract (Cin, M, A, d) ;
35C2 = Cin ;
36C2 (M) = AT (M) ;
37assert (gbtest_eq (C2, Cout)) ;
38
39Cout = GrB.extract (Cin, '+', A, d) ;
40C2 = Cin + AT ;
41assert (gbtest_eq (C2, Cout)) ;
42
43d.mask = 'complement' ;
44d2 = d ;
45d2.kind = 'sparse' ;
46Cout  = GrB.extract (Cin, M, A, d) ;
47Cout2 = GrB.extract (Cin, M, A, d2) ;
48C2 = Cin ;
49C2 (~M) = AT (~M) ;
50assert (gbtest_eq (C2, Cout)) ;
51assert (gbtest_eq (C2, Cout2)) ;
52assert (isequal (class (Cout2), 'double')) ;
53
54I = [2 1 5] ;
55J = [3 3 1 2] ;
56% B = sprandn (length (I), length (J), 0.5) ;
57Cout = GrB.extract (A, {I}, {J}) ;
58C2 = A (I,J)  ;
59assert (gbtest_eq (C2, Cout)) ;
60
61G = GrB.random (1, 10, inf) ;
62A = double (G) ;
63C0 = A (1:3) ;
64C1 = GrB.extract (G, { 1, 3}) ;
65assert (isequal (C0, C1)) ;
66
67G = GrB.random (10, 1, inf) ;
68A = double (G) ;
69C0 = A (1:3) ;
70C1 = GrB.extract (G, { 1, 3}) ;
71assert (isequal (C0, C1)) ;
72
73fprintf ('gbtest16: all tests passed\n') ;
74
75