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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//-----------------------------------------------------------------------------
// LAGraph/src/test/test_Malloc.c: test LAGraph_Malloc and related methods
//-----------------------------------------------------------------------------
// LAGraph, (c) 2019-2022 by The LAGraph Contributors, All Rights Reserved.
// SPDX-License-Identifier: BSD-2-Clause
//
// For additional details (including references to third party source code and
// other files) see the LICENSE file or contact permission@sei.cmu.edu. See
// Contributors.txt for a full list of contributors. Created, in part, with
// funding and support from the U.S. Government (see Acknowledgments.txt file).
// DM22-0790
// Contributed by Timothy A. Davis, Texas A&M University
//-----------------------------------------------------------------------------
#include "LAGraph_test.h"
char msg [LAGRAPH_MSG_LEN] ;
//-----------------------------------------------------------------------------
// test_malloc
//-----------------------------------------------------------------------------
void test_malloc (void)
{
char msg [LAGRAPH_MSG_LEN] ;
OK (LAGraph_Init (msg)) ;
char *p ;
OK (LAGraph_Malloc ((void **) &p, 42, sizeof (char), msg)) ;
for (int k = 0 ; k < 42 ; k++)
{
p [k] = (char) k ;
}
OK (LAGraph_Free ((void **) &p, msg)) ;
TEST_CHECK (p == NULL) ;
size_t huge = 1 + SIZE_MAX/2 ;
if (sizeof (size_t) >= sizeof (uint64_t))
{
LAGraph_Malloc ((void **) &p, huge, sizeof (char), msg) ;
TEST_CHECK (p == NULL) ; // was FAIL
LAGraph_Calloc ((void **) &p, huge, sizeof (char), msg) ;
TEST_CHECK (p == NULL) ; // was FAIL
}
OK (LAGraph_Calloc ((void **) &p, 42, sizeof (char), msg)) ;
for (int k = 0 ; k < 42 ; k++)
{
TEST_CHECK (*p == '\0') ;
}
OK (LAGraph_Free ((void **) &p, msg)) ;
TEST_CHECK (p == NULL) ;
OK (LAGraph_Free (NULL, NULL)) ;
LAGraph_Calloc_function = NULL ;
OK (LAGraph_Calloc ((void **) &p, 42, sizeof (char), msg)) ;
TEST_CHECK (p != NULL) ;
for (int k = 0 ; k < 42 ; k++)
{
TEST_CHECK (*p == '\0') ;
}
OK (LAGraph_Realloc ((void **) &p, 100, 42, sizeof (char), msg)) ;
for (int k = 0 ; k < 42 ; k++)
{
TEST_CHECK (*p == '\0') ;
}
for (int k = 42 ; k < 100 ; k++)
{
p [k] = (char) k ;
}
OK (LAGraph_Free ((void **) &p, NULL)) ;
TEST_CHECK (p == NULL) ;
OK (LAGraph_Realloc ((void **) &p, 80, 0, sizeof (char), msg)) ;
if (sizeof (size_t) >= sizeof (uint64_t))
{
int s = (LAGraph_Realloc ((void **) &p, huge, 80, sizeof (char), msg)) ;
TEST_CHECK (s == GrB_OUT_OF_MEMORY) ; // was FAIL
}
for (int k = 0 ; k < 80 ; k++)
{
p [k] = (char) k ;
}
OK (LAGraph_Realloc ((void **) &p, 80, 80, sizeof (char), msg)) ;
for (int k = 0 ; k < 80 ; k++)
{
TEST_CHECK (p [k] == (char) k) ; // was FAIL
}
LAGraph_Realloc_function = NULL ;
OK (LAGraph_Realloc ((void **) &p, 100, 80, sizeof (char), msg)) ;
for (int k = 0 ; k < 80 ; k++)
{
TEST_CHECK (p [k] == (char) k) ; // was FAIL
}
OK (LAGraph_Free ((void **) &p, NULL)) ;
TEST_CHECK (p == NULL) ;
OK (LAGraph_Finalize (msg)) ;
}
//-----------------------------------------------------------------------------
// TEST_LIST: the list of tasks for this entire test
//-----------------------------------------------------------------------------
TEST_LIST = {
{"test_malloc", test_malloc},
// no brutal test needed
{NULL, NULL}
};