1function test31
2%TEST31 test GrB_transpose
3
4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
5% SPDX-License-Identifier: Apache-2.0
6
7fprintf ('\n------------------- simple tests of GB_mex_transpose\n') ;
8
9rng ('default') ;
10A = sprand (4, 3, 0.4) ;
11% full (A)
12% full (A')
13C = GB_mex_transpose (sparse (3,4), [ ], [ ], A) ;
14assert (GB_spok (C.matrix) == 1) ;
15assert (isequal (C.matrix,A')) ;
16
17% C = A
18D = struct ('inp0', 'tran') ;
19C = GB_mex_transpose (sparse(4,3), [ ], [ ], A, D) ;
20assert (isequal (C.matrix,A)) ;
21
22% C = A'
23C = GB_mex_transpose (sparse(3,4), [ ], [ ], A) ;
24assert (isequal (C.matrix,A')) ;
25
26Cin = sprand (4, 3, 0.5) ;
27Cin2 = Cin' ;
28
29% C = A'
30C = GB_mex_transpose (Cin2, [ ], [ ], A) ;
31assert (isequal (C.matrix,A')) ;
32
33% C = Cin2+A'
34C = GB_mex_transpose (Cin2, [ ], 'plus', A) ;
35assert (isequal (C.matrix,Cin2+A')) ;
36
37% C = Cin+A
38D = struct ('inp0', 'tran') ;
39C = GB_mex_transpose (Cin, [ ], 'plus', A, D) ;
40assert (isequal (C.matrix,Cin+A)) ;
41
42ops = {
43    'first',
44    'second',
45    'pair',
46    'min',
47    'max',
48    'plus',
49    'minus',
50    'times',
51    'div',   } ;
52
53for k = 1:length(ops)
54    op = ops {k} ;
55
56    % C = op (Cin2,A')
57    D = struct ;
58    C = GB_mex_transpose  (Cin2, [ ], op, A, D)  ;
59    S = GB_spec_transpose (Cin2, [ ], op, A, D)  ;
60    assert (isequal (C.matrix, sparse (S.matrix))) ;
61    assert (isequal (GB_spones_mex (C.matrix), sparse (S.pattern))) ;
62
63    % C = A', ignore the op
64    D = struct ('outp', 'replace') ;
65    C = GB_mex_transpose  (Cin2, [ ], op, A, D) ;
66    S = GB_spec_transpose (Cin2, [ ], op, A, D) ;
67    assert (isequal (GB_spones_mex (C.matrix), sparse (S.pattern))) ;
68
69    % C = A, ignore the op
70    D = struct ('inp0', 'tran', 'outp', 'replace') ;
71    C = GB_mex_transpose  (Cin, [ ], op, A, D) ;
72    S = GB_spec_transpose (Cin, [ ], op, A, D) ;
73    assert (isequal (GB_spones_mex (C.matrix), sparse (S.pattern))) ;
74
75    % C = op (Cin,A)
76    D = struct ('inp0', 'tran') ;
77    C = GB_mex_transpose  (Cin, [ ], op, A, D) ;
78    S = GB_spec_transpose (Cin, [ ], op, A, D) ;
79    assert (isequal (GB_spones_mex (C.matrix), sparse (S.pattern))) ;
80
81end
82
83%{
84A = sprand (20, 16, 0.45)
85C = GB_mex_transpose (A)
86
87A = sparse (rand (40,10)) ;
88C = GB_mex_transpose (A)
89%}
90
91fprintf ('\ntest31: all tests passed\n') ;
92
93