source: rtems/cpukit/libfs/src/rfs/rtems-rfs-bitmaps-ut.c @ 355b0544

4.104.115
Last change on this file since 355b0544 was 355b0544, checked in by Chris Johns <chrisj@…>, on 03/27/10 at 04:04:40

2010-03-27 Chris Johns <chrisj@…>

libfs/src/nfsclient/src/cexphelp.c,
libfs/src/nfsclient/src/dirutils.c,
libfs/src/nfsclient/src/nfs.modini.c,
libfs/src/nfsclient/src/nfsTest.c,
libfs/src/nfsclient/src/rpcio.c,
libfs/src/nfsclient/src/rpcio.modini.c,
libfs/src/nfsclient/src/sock_mbuf.c,
libfs/src/nfsclient/src/xdr_mbuf.c,
libfs/src/rfs/rtems-rfs-bitmaps-ut.c,
libfs/src/rfs/rtems-rfs-bitmaps.c,
libfs/src/rfs/rtems-rfs-block.c,
libfs/src/rfs/rtems-rfs-buffer-bdbuf.c,
libfs/src/rfs/rtems-rfs-buffer-devio.c,
libfs/src/rfs/rtems-rfs-buffer.c,
libfs/src/rfs/rtems-rfs-dir-hash.c, libfs/src/rfs/rtems-rfs-dir.c,
libfs/src/rfs/rtems-rfs-file-system.c,
libfs/src/rfs/rtems-rfs-file.c, libfs/src/rfs/rtems-rfs-format.c,
libfs/src/rfs/rtems-rfs-group.c, libfs/src/rfs/rtems-rfs-inode.c,
libfs/src/rfs/rtems-rfs-link.c, libfs/src/rfs/rtems-rfs-mutex.c,
libfs/src/rfs/rtems-rfs-rtems-dev.c,
libfs/src/rfs/rtems-rfs-rtems-dir.c,
libfs/src/rfs/rtems-rfs-rtems-file.c,
libfs/src/rfs/rtems-rfs-rtems-utils.c,
libfs/src/rfs/rtems-rfs-rtems.c, libfs/src/rfs/rtems-rfs-shell.c,
libfs/src/rfs/rtems-rfs-trace.c: Add HAVE_CONFIG_H support to let
files receive configure defines.

  • Property mode set to 100644
File size: 13.3 KB
Line 
1/*
2 *  COPYRIGHT (c) 2010 Chris Johns <chrisj@rtems.org>
3 *
4 *  The license and distribution terms for this file may be
5 *  found in the file LICENSE in this distribution or at
6 *  http://www.rtems.com/license/LICENSE.
7 *
8 *  $Id$
9 */
10/**
11 * @file
12 *
13 * @ingroup rtems-rfs
14 *
15 * RTEMS File Systems Bitmap Unit Test..
16 *
17 * This is a unit test module for the bit map functions.
18 */
19
20#if HAVE_CONFIG_H
21#include "config.h"
22#endif
23
24#include <stdio.h>
25#include <stdlib.h>
26
27#include <rtems/rfs/rtems-rfs-bitmaps.h>
28#include <rtems/rfs/rtems-rfs-file-system.h>
29
30#define rtems_rfs_exit_on_error(_rc, _r, _c, _b)                         \
31  if ((_rc > 0) || _r) { free (_b); rtems_rfs_bitmap_close (_c); return; }
32
33static bool
34rtems_rfs_bitmap_ut_test_range (rtems_rfs_bitmap_control* control,
35                                int                       test,
36                                bool                      set,
37                                rtems_rfs_bitmap_bit      bit,
38                                size_t                    size)
39{
40  unsigned int count;
41  bool         result;
42  for (count = 0; count < size; count++)
43  {
44    int rc = rtems_rfs_bitmap_map_test (control, bit + count, &result);
45    if (rc > 0)
46    {
47      printf (" %2d. Test bit %ld in range (%ld,%ld] is %s: ",
48            test, bit + count, bit, bit + size - 1, !set ? "set" : "clear");
49      printf ("FAIL (%s)\n", strerror (rc));
50      return false;
51    }
52    if (!set)
53      result = !result;
54    if (!result)
55    {
56      printf (" %2d. Test bit %ld in range (%ld,%ld] is %s: ",
57              test, bit + count, bit, bit + size - 1, !set ? "set" : "clear");
58      printf (" %s\n", !result ? "pass" : "FAIL");
59      return false;
60    }
61  }
62 
63  printf (" %2d. Test bit range (%ld,%ld] all %s: pass\n",
64          test, bit, bit + size - 1, set ? "set" : "clear");
65
66  return true;
67}
68
69static bool
70rtems_rfs_bitmap_ut_alloc_seq_test (rtems_rfs_bitmap_control* control,
71                                    int                       test,
72                                    rtems_rfs_bitmap_bit      bit,
73                                    size_t                    size)
74{
75  bool state;
76  int  i;
77  int  rc;
78 
79  printf (" %2d. Set all bits\n", test);
80  rc = rtems_rfs_bitmap_map_set_all (control);
81  if (rc > 0)
82  {
83    printf (" %2d. set all bits: FAIL (%s)\n", test, strerror (rc));
84    return false;
85  }
86 
87  for (i = 0; i < size; i++)
88    rtems_rfs_bitmap_map_clear (control, bit + i);
89 
90  printf (" %2d. Cleared bits (%ld, %ld] (%zd)\n",
91          test, bit, bit + size - 1, size);
92 
93  for (i = 0; i < rtems_rfs_bitmap_element_bits (); i++)
94  {
95    rc = rtems_rfs_bitmap_map_test (control, bit + i, &state);
96    if (rc > 0)
97    {
98      printf (" %2d. test bit: FAIL (%s)\n", test, strerror (rc));
99      return false;
100    }
101    if (state)
102    {
103      printf (" %2d. Cleared bit still set: bit = %ld\n", test, bit + i);
104      return false;
105    }
106  }
107 
108  for (i = 0, bit = 0; i < size; i++)
109  {
110    rtems_rfs_bitmap_bit seed = bit;
111    bool                 result;
112    int                  rc;
113    rc = rtems_rfs_bitmap_map_alloc (control, seed, &result, &bit);
114    if (rc > 0)
115    {
116      printf (" %2d. map all: FAIL (%s)\n", test, strerror (rc));
117      return false;
118    }
119    if (!result)
120    {
121      printf (" %2d. Find bit with seed = %ld: %s: bit = %ld\n",
122              test, seed, result ? "pass" : "FAIL", bit);
123      return false;
124    }
125  }
126
127  printf (" %2d. Alloc'ed all bits (%ld, %ld] (%zd)\n",
128          test, bit, bit + size - 1, size);
129 
130  return true;
131}
132
133static void
134rtems_rfs_bitmap_ut_test_bitmap (size_t size)
135{
136  rtems_rfs_file_system    fs;
137  rtems_rfs_bitmap_control control;
138  rtems_rfs_buffer_handle  handle;
139  rtems_rfs_buffer         buffer;
140  rtems_rfs_bitmap_bit     bit = 0;
141  rtems_rfs_bitmap_bit     first_bit;
142  rtems_rfs_bitmap_bit     last_bit;
143  bool                     result;
144  size_t                   bytes;
145  size_t                   clear;
146  int                      rc;
147
148  bytes = (rtems_rfs_bitmap_elements (size) *
149           sizeof (rtems_rfs_bitmap_element));
150
151  memset (&fs, 0, sizeof (fs));
152  memset (&buffer, 0, sizeof (buffer));
153 
154  buffer.buffer = malloc (bytes);
155  buffer.block = 1;
156
157  if (!buffer.buffer)
158  {
159    printf (" Cannot allocate bitmap memory\n");
160    return;
161  }
162
163#if RTEMS_RFS_BITMAP_CLEAR_ZERO
164  memset (buffer.buffer, 0, bytes);
165#else
166  memset (buffer.buffer, 0xff, bytes);
167#endif
168 
169  /*
170   * Do not close the handle so no writes need occur.
171   */
172  rc = rtems_rfs_buffer_handle_open (&fs, &handle);
173  if (rc > 0)
174  {
175    printf (" Cannot open the handle: %d: %s\n", rc, strerror (rc));
176    free (buffer.buffer);
177    return;
178  }
179
180  handle.buffer = &buffer;
181  handle.bnum = 1;
182 
183  printf ("\nRFS Bitmap Test : size = %zd (%zd)\n",
184          size, rtems_rfs_bitmap_elements (size));
185  rc = rtems_rfs_bitmap_open (&control, &fs, &handle, size, 1);
186  if (rc > 0)
187  {
188    printf (" Cannot open the bitmap: %s\n", strerror (rc));
189    free (buffer.buffer);
190    return;
191  }
192
193  /*
194   * This is a new bitmap with no bits set. Try and find a bit with a few
195   * seeds.
196   */
197  rc = rtems_rfs_bitmap_map_alloc (&control, size * 2, &result, &bit);
198  printf ("  1. Find bit with seed > size: %s (%s)\n",
199          result ? "FAIL" : "pass", strerror (rc));
200  rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
201 
202  rc = rtems_rfs_bitmap_map_alloc (&control, size, &result, &bit);
203  printf ("  2. Find bit with seed = size: %s (%s)\n",
204          result ? "FAIL" : "pass", strerror (rc));
205  rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
206
207  rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
208  result = result && (bit == 0);
209  printf ("  3. Find bit 0 with seed = 0: %s (%s): bit = %ld\n",
210          result ? "pass" : "FAIL", strerror (rc),  bit);
211  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
212 
213  rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
214  result = result && (bit == (size - 1));
215  printf ("  4. Find bit (size - 1) with seed = (size - 1) (%zd): %s (%s): bit = %ld\n",
216          size - 1, result ? "pass" : "FAIL", strerror (rc), bit);
217  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
218
219 
220  /*
221   * Test the bits allocated to make sure they are set.
222   */
223
224  rc = rtems_rfs_bitmap_map_test (&control, 0, &result);
225  printf ("  5. Test bit 0: %s (%s)\n",
226          result ? "pass" : "FAIL", strerror (rc));
227  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
228 
229  rc = rtems_rfs_bitmap_map_test (&control, size - 1, &result);
230  printf ("  6. Test bit (size - 1) (%zd): %s (%s)\n",
231          size - 1, result ? "pass" : "FAIL", strerror (rc));
232  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
233 
234  if (!rtems_rfs_bitmap_ut_test_range (&control, 7, false, 1, size - 2))
235    rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
236
237  /*
238   * Set all bits then clear one and find it.
239   */
240  rc = rtems_rfs_bitmap_map_set_all (&control);
241  printf ("  8. Set all bits: %s (%s)\n",
242          rc == 0 ? "PASS" : "FAIL", strerror (rc));
243  rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
244
245  bit = rand () % size;
246 
247  rc = rtems_rfs_bitmap_map_clear (&control, bit);
248  printf ("  9. Clear bit %ld: %s (%s)\n",
249          bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
250  rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
251
252  last_bit = bit;
253  rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
254  result = result && (bit == last_bit);
255  printf (" 10. Find bit with seed = 0: %s (%s): bit = %ld\n",
256          result ? "pass" : "FAIL", strerror (rc), bit);
257  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
258 
259  rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
260  result = !result || (bit != last_bit);
261  printf (" 11. Fail to find bit with seed = 0: %s (%s): bit = %ld\n",
262          result ? "pass" : "FAIL", strerror (rc), bit);
263  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
264 
265  rc = rtems_rfs_bitmap_map_clear (&control, 0);
266  printf (" 12. Clear bit 0: %s (%s)\n",
267          rc == 0 ? "pass" : "FAIL", strerror (rc));
268  rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
269 
270  rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
271  result = result && (bit == 0);
272  printf (" 13. Find bit with seed = (size - 1): %s (%s): bit = %ld\n",
273          result ? "pass" : "FAIL", strerror (rc), bit);
274  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
275
276  rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
277  printf (" 14. Clear bit (size - 1) (%zd): %s (%s)\n",
278          size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
279  rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
280
281  rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
282  result = result && (bit == (size - 1));
283  printf (" 15. Find bit with seed = 0: %s (%s): bit = %ld\n",
284          result ? "pass" : "FAIL", strerror (rc), bit);
285  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
286
287  rc = rtems_rfs_bitmap_map_clear (&control, 0);
288  printf (" 16. Clear bit 0: %s (%s)\n",
289          rc == 0 ? "pass" : "FAIL", strerror (rc));
290 
291  rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
292  result = result && (bit == 0);
293  printf (" 17. Find bit with seed = (size / 2) (%zd): %s (%s): bit = %ld\n",
294          size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
295  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
296
297  rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
298  printf (" 18. Clear bit (size - 1) (%zd): %s, (%s)\n",
299          size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
300  rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
301 
302  rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
303  result = result && (bit == (size - 1));
304  printf (" 19. Find bit with seed = (size / 2) (%zd): %s (%s): bit = %ld\n",
305          size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
306  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
307
308  rc = rtems_rfs_bitmap_map_clear (&control, 0);
309  printf (" 20. Clear bit 0: %s (%s)\n",
310          rc == 0 ? "pass" : "FAIL", strerror (rc));
311 
312  rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
313  result = result && (bit == 0);
314  printf (" 21. Find bit with seed = ((size / 2) - 1) (%zd): %s (%s): bit = %ld\n",
315          (size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
316  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
317
318  rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
319  printf (" 22. Clear bit (size - 1) (%zd): %s (%s)\n",
320          size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
321 
322  rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
323  result = result && (bit == (size - 1));
324  printf (" 23. Find bit with seed = ((size / 2) - 1) (%zd): %s (%s): bit = %ld\n",
325          (size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
326  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
327
328  bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
329  result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 23, bit,
330                                               rtems_rfs_bitmap_element_bits ());
331  rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
332 
333  bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
334  result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 24, bit, 57);
335  rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
336
337  /*
338   * Set all bits, clear a random numberone then create a search map and make
339   * sure the clear count is correct.
340   */
341  rc = rtems_rfs_bitmap_map_set_all (&control);
342  printf (" 25. Set all bits: %s (%s)\n",
343          rc == 0 ? "PASS" : "FAIL", strerror (rc));
344  rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
345
346  first_bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
347  last_bit = first_bit + rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
348
349  for (bit = first_bit; bit < last_bit; bit++)
350  {
351    rc = rtems_rfs_bitmap_map_clear (&control, bit);
352    if (rc > 0)
353    {
354      printf (" 26. Clear bit %ld: %s (%s)\n",
355              bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
356      rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
357    }
358  }
359 
360  printf (" 26. Clear bit (%ld, %ld]: %s (%s)\n",
361          first_bit, last_bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
362 
363  clear = rtems_rfs_bitmap_map_free (&control);
364  result = clear == (last_bit - first_bit);
365  printf (" 27. Check free count is %zd: %ld: %s (%s)\n",
366          clear, last_bit - first_bit,
367          result ? "pass" : "FAIL", strerror (rc));
368
369  rc = rtems_rfs_bitmap_create_search (&control);
370  result = clear == rtems_rfs_bitmap_map_free (&control);
371  printf (" 28. Create search check free count is %zd: %zd: %s (%s)\n",
372          clear, rtems_rfs_bitmap_map_free (&control),
373          result ? "pass" : "FAIL", strerror (rc));
374  rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
375 
376  rtems_rfs_bitmap_close (&control);
377  free (buffer.buffer);
378}
379
380void
381rtems_rfs_bitmap_unit_test (void)
382{
383  printf ("RTEMS File System Bitmap Unit Test\n");
384  printf (" Bit set value       : %d\n", RTEMS_RFS_BITMAP_BIT_SET);
385  printf (" Bit clear value     : %d\n", RTEMS_RFS_BITMAP_BIT_CLEAR);
386  printf (" Num bit per element : %zd\n", rtems_rfs_bitmap_element_bits ());
387
388  srand (0x23984237);
389 
390  rtems_rfs_bitmap_ut_test_bitmap (2048);
391  rtems_rfs_bitmap_ut_test_bitmap (420);
392}
393
Note: See TracBrowser for help on using the repository browser.