summaryrefslogtreecommitdiffstats
path: root/test/theap.c
blob: ad0ee75672645e509af9a24431af45deb3fe123c (plain)
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
/*-------------------------------------------------------------------------
 * Copyright (C) 1997   National Center for Supercomputing Applications.
 *                      All rights reserved.
 *
 *-------------------------------------------------------------------------
 *
 * Created:             theap.c
 *                      Jul 17 1997
 *                      Robb Matzke <robb@maya.nuance.com>
 *
 * Purpose:             
 *
 * Modifications:       
 *
 *-------------------------------------------------------------------------
 */
#include <testhdf5.h>

#include <H5private.h>
#include <H5Aprivate.h>
#include <H5ACprivate.h>
#include <H5Fprivate.h>
#include <H5Hprivate.h>

#define NOBJS   40

/*-------------------------------------------------------------------------
 * Function:    test_heap
 *
 * Purpose:     Test name and object heaps.
 *
 * Return:      void
 *
 * Programmer:  Robb Matzke
 *              robb@maya.nuance.com
 *              Jul 17 1997
 *
 * Modifications:
 *
 *-------------------------------------------------------------------------
 */
void
test_heap(void)
{
    int                     i, j;
    hid_t                   fid;
    H5F_t                  *f;
    haddr_t                 heap_addr;
    char                    buf[NOBJS + 8];
    const char             *s;
    size_t                  obj[NOBJS];
    herr_t                  status;

    MESSAGE(5, ("Testing Heaps\n"));

    /* Create the file */
    fid = H5Fcreate("theap.h5", H5ACC_OVERWRITE, 0, 0);
    CHECK(fid, FAIL, "H5Fcreate");
    f = H5A_object(fid);
    CHECK(f, NULL, "H5Aatom_object");

    /* Create a new heap */
    status = H5H_create(f, H5H_LOCAL, 0, &heap_addr /*out */ );
    CHECK_I(status, "H5H_new");

    /* Add stuff to the heap */
    for (i = 0; i < NOBJS; i++) {
        sprintf(buf, "%03d-", i);
        for (j = 4; j < i; j++)
            buf[j] = '0' + j % 10;
        if (j > 4)
            buf[j] = '\0';

        obj[i] = H5H_insert(f, &heap_addr, strlen(buf) + 1, buf);
        CHECK_I(obj[i], "H5H_insert");
    }

    /* Flush the cache and invalidate everything */
    H5AC_flush(f, NULL, 0, TRUE);

    /* Read the objects back out */
    for (i = 0; i < NOBJS; i++) {
        s = H5H_peek(f, &heap_addr, obj[i]);
        MESSAGE(8, ("object is `%s'\n", s));
    }

    /* Close the file */
    H5Fclose(fid);
}