1function gbtest53
2%GBTEST53 test GrB.monoidinfo
3
4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
5% SPDX-License-Identifier: GPL-3.0-or-later
6
7types10 = {
8    'double'
9    'single'
10    'int8'
11    'int16'
12    'int32'
13    'int64'
14    'uint8'
15    'uint16'
16    'uint32'
17    'uint64'
18    } ;
19
20nmonoids = 0 ;
21
22% 50 real monoids (integer and floating-point, not logical):
23ops = { '+', '*', 'min', 'max', 'any' } ;
24for k1 = 1:5
25    op = ops {k1} ;
26    fprintf ('\nop ( %s )=============================================\n', op) ;
27    for k2 = 1:10
28        type = types10 {k2} ;
29        GrB.monoidinfo ([op '.' type]) ;
30        GrB.monoidinfo (op, type) ;
31        nmonoids = nmonoids + 1 ;
32    end
33end
34
35% 5 boolean monoids:
36ops = { '|', '&', 'xor', 'xnor', 'any' } ;
37for k1 = 1:5
38    op = ops {k1} ;
39    fprintf ('\nop ( %s )=============================================\n', op) ;
40    GrB.monoidinfo ([op '.logical']) ;
41    GrB.monoidinfo (op, 'logical') ;
42    nmonoids = nmonoids + 1 ;
43end
44
45% 6 complex
46ops = { '+', '*', 'any' } ;
47types = { 'single complex', 'double complex' } ;
48for k1 = 1:3
49    op = ops {k1} ;
50    fprintf ('\nop ( %s )=============================================\n', op) ;
51    for k2 = 1:2
52        type = types {k2} ;
53        GrB.monoidinfo ([op '.' type]) ;
54        GrB.monoidinfo (op, type) ;
55        nmonoids = nmonoids + 1 ;
56    end
57end
58
59% 16 bitwise
60ops = { 'bitor', 'bitand', 'bitxor', 'bitxnor' } ;
61types = { 'uint8', 'uint16', 'uint32', 'uint64' } ;
62for k1 = 1:4
63    op = ops {k1} ;
64    fprintf ('\nop ( %s )=============================================\n', op) ;
65    for k2 = 1:4
66        type = types {k2} ;
67        GrB.monoidinfo ([op '.' type]) ;
68        GrB.monoidinfo (op, type) ;
69        nmonoids = nmonoids + 1 ;
70    end
71end
72
73fprintf ('\n\n') ;
74GrB.monoidinfo
75
76fprintf ('number of monoids: %d\n', nmonoids) ;
77assert (nmonoids == 77) ;
78
79fprintf ('gbtest53: all tests passed\n') ;
80
81