1function gbtest31
2%GBTEST31 test GrB and casting
3
4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
5% SPDX-License-Identifier: GPL-3.0-or-later
6
7types = gbtest_types ;
8fprintf ('gbtest31: typecasting\n') ;
9rng ('default') ;
10
11for k = 1:length (types)
12    type = types {k} ;
13    fprintf ('%s ', type) ;
14
15    for m = 0:5
16        for n = 0:5
17            A = gbtest_cast (zeros (m, n), type) ;
18            G = GrB (m, n, type) ;
19            C = GrB (G, type) ;
20            assert (gbtest_eq (A, C)) ;
21        end
22    end
23
24    A = 100 * rand (5, 5) ;
25    A = gbtest_cast (A, type) ;
26    G = GrB (A) ;
27
28    G2 = sparse (G) ;
29    assert (gbtest_eq (G, G2)) ;
30
31    for k2 = 1:length (types)
32        type2 = types {k} ;
33        G2 = GrB (G, type2) ;
34        A2 = gbtest_cast (A, type2) ;
35        C = GrB (G2, type2) ;
36        assert (gbtest_eq (A2, C)) ;
37    end
38
39    F = 100 * ones (5, 5) ;
40    F = gbtest_cast (F, type) ;
41    id = F (1,1) ;
42
43    A = 100 * sparse (diag (1:5)) ;
44
45    G = GrB (A, type) ;
46    G2 = GrB (F) ;
47    G2 (logical (speye (5))) = 100:100:500 ;
48
49    for k2 = 1:length (types)
50        type2 = types {k} ;
51        G3 = full (G, type2, id) ;
52        H5 = full (G, type2, GrB (id)) ;
53        G4 = GrB (G2, type2) ;
54        assert (gbtest_eq (G3, G4)) ;
55        assert (gbtest_eq (G3, H5)) ;
56        assert (gbtest_eq (double (G3), double (G4))) ;
57        assert (gbtest_eq (single (G3), single (G4))) ;
58        assert (gbtest_eq (uint16 (G3), uint16 (G4))) ;
59    end
60
61end
62
63fprintf ('\ngbtest31: all tests passed\n') ;
64