summaryrefslogtreecommitdiffstats
path: root/test/theap.c
blob: 5a5bb72400e9f0e388e0f094c18aaff243290e7a (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
/*-------------------------------------------------------------------------
 * 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 <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 = H5Aatom_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);
}