1 //------------------------------------------------------------------------------
2 // GB_Semiring_check: check and print a semiring
3 //------------------------------------------------------------------------------
4
5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
6 // SPDX-License-Identifier: Apache-2.0
7
8 //------------------------------------------------------------------------------
9
10 #include "GB.h"
11
12 GB_PUBLIC // accessed by the MATLAB tests in GraphBLAS/Test only
GB_Semiring_check(const GrB_Semiring semiring,const char * name,int pr,FILE * f)13 GrB_Info GB_Semiring_check // check a GraphBLAS semiring
14 (
15 const GrB_Semiring semiring, // GraphBLAS semiring to print and check
16 const char *name, // name of the semiring, optional
17 int pr, // print level
18 FILE *f // file for output
19 )
20 {
21
22 //--------------------------------------------------------------------------
23 // check inputs
24 //--------------------------------------------------------------------------
25
26 GBPR0 ("\n GraphBLAS Semiring: %s ", ((name != NULL) ? name : "")) ;
27
28 if (semiring == NULL)
29 {
30 GBPR0 ("NULL\n") ;
31 return (GrB_NULL_POINTER) ;
32 }
33
34 //--------------------------------------------------------------------------
35 // check object
36 //--------------------------------------------------------------------------
37
38 GB_CHECK_MAGIC (semiring, "Semiring") ;
39 GBPR0 (semiring->header_size > 0 ? "(user-defined)" : "(built-in)") ;
40
41 GrB_Info info ;
42 info = GB_Monoid_check (semiring->add, "semiring->add", pr, f) ;
43 if (info != GrB_SUCCESS)
44 {
45 GBPR0 (" Semiring->add invalid\n") ;
46 return (GrB_INVALID_OBJECT) ;
47 }
48
49 info = GB_BinaryOp_check (semiring->multiply, "semiring->multiply", pr, f) ;
50 if (info != GrB_SUCCESS)
51 {
52 GBPR0 (" Semiring->multiply invalid\n") ;
53 return (GrB_INVALID_OBJECT) ;
54 }
55
56 // z = multiply(x,y); type of z must match monoid type
57 if (semiring->multiply->ztype != semiring->add->op->ztype)
58 {
59 GBPR0 (" Semiring multiply output domain must match monoid"
60 " domain\n") ;
61 return (GrB_INVALID_OBJECT) ;
62 }
63
64 return (GrB_SUCCESS) ;
65 }
66
67