File: test238.m

package info (click to toggle)
suitesparse-graphblas 7.4.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 67,112 kB
  • sloc: ansic: 1,072,243; cpp: 8,081; sh: 512; makefile: 506; asm: 369; python: 125; awk: 10
file content (100 lines) | stat: -rw-r--r-- 3,281 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
function test238
%TEST238 test GrB_mxm (dot4 and dot2)

% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2022, All Rights Reserved.
% SPDX-License-Identifier: Apache-2.0

rng ('default') ;

desc.inp0 = 'tran' ;

n = 8 ;

for k = [1 2 4 8 32]
    fprintf ('\n%2d', k) ;
    for iso = [0 1]

        clear F
        if (iso)
            F.matrix = pi * ones (n,k) ;
        else
            F = GB_spec_random (n, k, inf) ;
        end
        F.sparsity = 8 ;    % full
        F.iso = iso ;
        C0 = sparse (n,k) ;

        for A_sparsity = [1 2 4 8]
            for B_sparsity = [1 2 4 8]

                fprintf ('.') ;
                clear A B
                if (A_sparsity == 8)
                    A = GB_spec_random (n, n, inf) ;
                else
                    A = GB_spec_random (n, n, 0.3) ;
                end
                A.sparsity = A_sparsity ;

                if (B_sparsity == 8)
                    B = GB_spec_random (n, k, inf) ;
                else
                    B = GB_spec_random (n, k, 0.3) ;
                end
                B.sparsity = B_sparsity ;

                for trial = 1:5

                    if (trial == 1)
                        % plus_times_double
                        accum.opname = 'plus' ;
                        accum.optype = 'double' ;
                        semiring.add = 'plus' ;
                        semiring.multiply = 'times' ;
                        semiring.class = 'double' ;
                        tol = 1e-12 ;
                        A.class = 'double' ;
                        B.class = 'double' ;
                        F.class = 'double' ;
                    elseif (trial == 2)
                        % max_firstj_int64
                        accum.opname = 'max' ;
                        accum.optype = 'int64' ;
                        semiring.add = 'max' ;
                        semiring.multiply = 'firstj' ;
                        semiring.class = 'int64' ;
                        tol = 0 ;
                        A.class = 'int64' ;
                        B.class = 'int64' ;
                        F.class = 'int64' ;
                    elseif (trial == 3)
                        % max_firstj1_int64
                        semiring.multiply = 'firstj1' ;
                    elseif (trial == 4)
                        % min_firstj_int64
                        accum.opname = 'min' ;
                        semiring.add = 'min' ;
                        semiring.multiply = 'firstj' ;
                    else
                        % min_firstj1_int64
                        semiring.multiply = 'firstj1' ;
                    end

                    % C = F ; C += A'*B, using dot4
                    C1 = GB_mex_mxm  (F, [ ], accum, semiring, A, B, desc) ;
                    C2 = GB_spec_mxm (F, [ ], accum, semiring, A, B, desc) ;
                    GB_spec_compare (C1, C2, tol) ;

                    % C = A'*B, using dot2
                    C1 = GB_mex_mxm  (C0, [ ], [ ], semiring, A, B, desc) ;
                    C2 = GB_spec_mxm (C0, [ ], [ ], semiring, A, B, desc) ;
                    GB_spec_compare (C1, C2, tol) ;

                end
            end
        end
    end
end

fprintf ('\ntest238: all tests passed\n') ;