Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:31

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  *  Copyright (c) 2012.
0005  *  Krzysztof Miesowicz <krzysztof.miesowicz@gmail.com>
0006  *
0007  *  This test is extended version of rtems-rfs-bimaps-ut.c . Most of this code
0008  *  was written by Chris Johns in rtems-rfs-bitmaps-ut.c and is copied
0009  *  and pasted here. Rest of this test was written by Krzysztof Miesowicz to
0010  *  completely cover rtems_rfs_bitmap_* symbols.
0011  *
0012  * Redistribution and use in source and binary forms, with or without
0013  * modification, are permitted provided that the following conditions
0014  * are met:
0015  * 1. Redistributions of source code must retain the above copyright
0016  *    notice, this list of conditions and the following disclaimer.
0017  * 2. Redistributions in binary form must reproduce the above copyright
0018  *    notice, this list of conditions and the following disclaimer in the
0019  *    documentation and/or other materials provided with the distribution.
0020  *
0021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0022  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0024  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0025  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0026  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0027  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0028  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0029  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0030  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0031  * POSSIBILITY OF SUCH DAMAGE.
0032  */
0033 
0034 
0035 #ifdef HAVE_CONFIG_H
0036 #include "config.h"
0037 #endif
0038 
0039 #include <stdio.h>
0040 #include <stdlib.h>
0041 #include <inttypes.h>
0042 
0043 #include <rtems/rfs/rtems-rfs-bitmaps.h>
0044 #include <rtems/rfs/rtems-rfs-file-system.h>
0045 
0046 #include "fstest.h"
0047 #include "fs_config.h"
0048 #include "tmacros.h"
0049 #include <rtems/malloc.h>
0050 
0051 const char rtems_test_name[] = "FSRFSBITMAP 1";
0052 const RTEMS_TEST_STATE rtems_test_state = TEST_STATE;
0053 
0054 #define rtems_rfs_exit_on_error(_rc, _r, _c, _b)                         \
0055   if ((_rc > 0) || _r) { free (_b); rtems_rfs_bitmap_close (_c); return; }
0056 
0057 static bool
0058 rtems_rfs_bitmap_ut_test_range (rtems_rfs_bitmap_control* control,
0059                                 int                       test,
0060                                 bool                      set,
0061                                 rtems_rfs_bitmap_bit      bit,
0062                                 size_t                    size)
0063 {
0064   unsigned int count;
0065   bool         result;
0066   for (count = 0; count < size; count++)
0067   {
0068     int rc = rtems_rfs_bitmap_map_test (control, bit + count, &result);
0069     if (rc > 0)
0070     {
0071       printf (" %2d. Test bit %" PRId32 " in range (%" PRId32 ",%zu] is %s: ",
0072             test, bit + count, bit, bit + size - 1, !set ? "set" : "clear");
0073       printf ("FAIL (%s)\n", strerror (rc));
0074       return false;
0075     }
0076     if (!set)
0077       result = !result;
0078     if (!result)
0079     {
0080       printf (" %2d. Test bit %" PRId32 " in range (%" PRId32 ",%zu] is %s: ",
0081               test, bit + count, bit, bit + size - 1, !set ? "set" : "clear");
0082       printf (" %s\n", !result ? "pass" : "FAIL");
0083       return false;
0084     }
0085   }
0086 
0087   printf (" %2d. Test bit range (%" PRId32 ",%zu] all %s: pass\n",
0088           test, bit, bit + size - 1, set ? "set" : "clear");
0089 
0090   return true;
0091 }
0092 
0093 static bool
0094 rtems_rfs_bitmap_ut_alloc_seq_test (rtems_rfs_bitmap_control* control,
0095                                     int                       test,
0096                                     rtems_rfs_bitmap_bit      bit,
0097                                     size_t                    size)
0098 {
0099   bool state;
0100   int  i;
0101   int  rc;
0102 
0103   printf (" %2d. Set all bits\n", test);
0104   rc = rtems_rfs_bitmap_map_set_all (control);
0105   if (rc > 0)
0106   {
0107     printf (" %2d. set all bits: FAIL (%s)\n", test, strerror (rc));
0108     return false;
0109   }
0110 
0111   for (i = 0; i < size; i++)
0112     rtems_rfs_bitmap_map_clear (control, bit + i);
0113 
0114   printf (" %2d. Cleared bits (%" PRId32 ", %zu] (%zu)\n",
0115           test, bit, bit + size - 1, size);
0116 
0117   for (i = 0; i < rtems_rfs_bitmap_element_bits (); i++)
0118   {
0119     rc = rtems_rfs_bitmap_map_test (control, bit + i, &state);
0120     if (rc > 0)
0121     {
0122       printf (" %2d. test bit: FAIL (%s)\n", test, strerror (rc));
0123       return false;
0124     }
0125     if (state)
0126     {
0127       printf (" %2d. Cleared bit still set: bit = %" PRId32 "\n", test, bit + i);
0128       return false;
0129     }
0130   }
0131 
0132   for (i = 0, bit = 0; i < size; i++)
0133   {
0134     rtems_rfs_bitmap_bit seed = bit;
0135     bool                 result;
0136     int                  rc;
0137     rc = rtems_rfs_bitmap_map_alloc (control, seed, &result, &bit);
0138     if (rc > 0)
0139     {
0140       printf (" %2d. map all: FAIL (%s)\n", test, strerror (rc));
0141       return false;
0142     }
0143     if (!result)
0144     {
0145       printf (" %2d. Find bit with seed = %" PRId32 ": %s: bit = %" PRId32 "\n",
0146               test, seed, result ? "pass" : "FAIL", bit);
0147       return false;
0148     }
0149   }
0150 
0151   printf (" %2d. Alloc'ed all bits (%" PRId32 ", %zu] (%zu)\n",
0152           test, bit, bit + size - 1, size);
0153 
0154   return true;
0155 }
0156 
0157 static void
0158 rtems_rfs_bitmap_ut_test_bitmap (size_t size)
0159 {
0160   rtems_rfs_file_system    fs;
0161   rtems_rfs_bitmap_control control;
0162   rtems_rfs_buffer_handle  handle;
0163   rtems_rfs_buffer         buffer;
0164   rtems_rfs_bitmap_bit     bit = 0;
0165   rtems_rfs_bitmap_bit     first_bit;
0166   rtems_rfs_bitmap_bit     last_bit;
0167   bool                     result;
0168   size_t                   bytes;
0169   size_t                   clear;
0170   int                      rc;
0171 
0172   bytes = (rtems_rfs_bitmap_elements (size) *
0173            sizeof (rtems_rfs_bitmap_element));
0174 
0175   memset (&fs, 0, sizeof (fs));
0176   memset (&buffer, 0, sizeof (buffer));
0177 
0178   buffer.buffer = malloc (bytes);
0179   buffer.block = 1;
0180 
0181   if (!buffer.buffer)
0182   {
0183     printf (" Cannot allocate bitmap memory\n");
0184     return;
0185   }
0186 
0187 #if RTEMS_RFS_BITMAP_CLEAR_ZERO
0188   memset (buffer.buffer, 0, bytes);
0189 #else
0190   memset (buffer.buffer, 0xff, bytes);
0191 #endif
0192 
0193   /*
0194    * Do not close the handle so no writes need occur.
0195    */
0196   rc = rtems_rfs_buffer_handle_open (&fs, &handle);
0197   if (rc > 0)
0198   {
0199     printf (" Cannot open the handle: %d: %s\n", rc, strerror (rc));
0200     free (buffer.buffer);
0201     return;
0202   }
0203 
0204   handle.buffer = &buffer;
0205   handle.bnum = 1;
0206 
0207   printf ("\nRFS Bitmap Test : size = %zu (%zu)\n",
0208           size, rtems_rfs_bitmap_elements (size));
0209 
0210   rc = rtems_rfs_bitmap_open (&control, &fs, &handle, size, 1);
0211   if (rc > 0)
0212   {
0213     printf (" Cannot open the bitmap: %s\n", strerror (rc));
0214     free (buffer.buffer);
0215     return;
0216   }
0217 
0218   /* Check the free and size are equal after opening */
0219   rtems_test_assert( control.free == control.size );
0220 
0221   /*
0222    * This is a new bitmap with no bits set. Try and find a bit with a few
0223    * seeds.
0224    */
0225   rc = rtems_rfs_bitmap_map_alloc (&control, size * 2, &result, &bit);
0226   printf ("  1. Find bit with seed > size: %s (%s)\n",
0227           result ? "FAIL" : "pass", strerror (rc));
0228   rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
0229 
0230   rc = rtems_rfs_bitmap_map_alloc (&control, size, &result, &bit);
0231   printf ("  2. Find bit with seed = size: %s (%s)\n",
0232           result ? "FAIL" : "pass", strerror (rc));
0233   rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
0234 
0235   rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
0236   result = result && (bit == 0);
0237   printf ("  3. Find bit 0 with seed = 0: %s (%s): bit = %" PRId32 "\n",
0238           result ? "pass" : "FAIL", strerror (rc),  bit);
0239   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0240 
0241   rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
0242   result = result && (bit == (size - 1));
0243   printf ("  4. Find bit (size - 1) with seed = (size - 1) (%zu): %s (%s): bit = %" PRId32 "\n",
0244           size - 1, result ? "pass" : "FAIL", strerror (rc), bit);
0245   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0246 
0247   /*
0248    * Test the bits allocated to make sure they are set.
0249    */
0250   rc = rtems_rfs_bitmap_map_test (&control, 0, &result);
0251   printf ("  5. Test bit 0: %s (%s)\n",
0252           result ? "pass" : "FAIL", strerror (rc));
0253   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0254 
0255   rc = rtems_rfs_bitmap_map_test (&control, size - 1, &result);
0256   printf ("  6. Test bit (size - 1) (%zu): %s (%s)\n",
0257           size - 1, result ? "pass" : "FAIL", strerror (rc));
0258   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0259 
0260   if (!rtems_rfs_bitmap_ut_test_range (&control, 7, false, 1, size - 2))
0261     rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
0262 
0263   /*
0264    * Set all bits then clear one and find it.
0265    */
0266   rc = rtems_rfs_bitmap_map_set_all (&control);
0267   printf ("  8. Set all bits: %s (%s)\n",
0268           rc == 0 ? "PASS" : "FAIL", strerror (rc));
0269   rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
0270   /* Check the free is 0 */
0271   rtems_test_assert( control.free == 0 );
0272 
0273   bit = rand () % size;
0274 
0275   rc = rtems_rfs_bitmap_map_clear (&control, bit);
0276   printf ("  9. Clear bit %" PRId32 ": %s (%s)\n",
0277           bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
0278   rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
0279   rtems_test_assert( control.free == 1);
0280 
0281   last_bit = bit;
0282   rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
0283   result = result && (bit == last_bit);
0284   printf (" 10. Find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
0285           result ? "pass" : "FAIL", strerror (rc), bit);
0286   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0287 
0288   rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
0289   result = !result || (bit != last_bit);
0290   printf (" 11. Fail to find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
0291           result ? "pass" : "FAIL", strerror (rc), bit);
0292   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0293 
0294   rc = rtems_rfs_bitmap_map_clear (&control, 0);
0295   printf (" 12. Clear bit 0: %s (%s)\n",
0296           rc == 0 ? "pass" : "FAIL", strerror (rc));
0297   rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
0298   rtems_test_assert( control.free == 1);
0299 
0300   rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
0301   result = result && (bit == 0);
0302   printf (" 13. Find bit with seed = (size - 1): %s (%s): bit = %" PRId32 "\n",
0303           result ? "pass" : "FAIL", strerror (rc), bit);
0304   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0305 
0306   rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
0307   printf (" 14. Clear bit (size - 1) (%zu): %s (%s)\n",
0308           size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
0309   rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
0310 
0311   rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
0312   result = result && (bit == (size - 1));
0313   printf (" 15. Find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
0314           result ? "pass" : "FAIL", strerror (rc), bit);
0315   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0316 
0317   rc = rtems_rfs_bitmap_map_clear (&control, 0);
0318   printf (" 16. Clear bit 0: %s (%s)\n",
0319           rc == 0 ? "pass" : "FAIL", strerror (rc));
0320 
0321   rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
0322   result = result && (bit == 0);
0323   printf (" 17. Find bit with seed = (size / 2) (%zu): %s (%s): bit = %" PRId32 "\n",
0324           size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
0325   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0326 
0327   rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
0328   printf (" 18. Clear bit (size - 1) (%zu): %s, (%s)\n",
0329           size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
0330   rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
0331 
0332   rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
0333   result = result && (bit == (size - 1));
0334   printf (" 19. Find bit with seed = (size / 2) (%zu): %s (%s): bit = %" PRId32 "\n",
0335           size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
0336   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0337 
0338   rc = rtems_rfs_bitmap_map_clear (&control, 0);
0339   printf (" 20. Clear bit 0: %s (%s)\n",
0340           rc == 0 ? "pass" : "FAIL", strerror (rc));
0341 
0342   rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
0343   result = result && (bit == 0);
0344   printf (" 21. Find bit with seed = ((size / 2) - 1) (%zu): %s (%s): bit = %" PRId32 "\n",
0345           (size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
0346   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0347 
0348   rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
0349   printf (" 22. Clear bit (size - 1) (%zu): %s (%s)\n",
0350           size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
0351 
0352   rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
0353   result = result && (bit == (size - 1));
0354   printf (" 23. Find bit with seed = ((size / 2) - 1) (%zu): %s (%s): bit = %" PRId32 "\n",
0355           (size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
0356   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0357 
0358   bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
0359   result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 23, bit,
0360                                                rtems_rfs_bitmap_element_bits ());
0361   rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
0362 
0363   bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
0364   result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 24, bit, 57);
0365   rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
0366 
0367   /*
0368    * Set all bits, clear a random numberone then create a search map and make
0369    * sure the clear count is correct.
0370    */
0371   rc = rtems_rfs_bitmap_map_set_all (&control);
0372   printf (" 25. Set all bits: %s (%s)\n",
0373           rc == 0 ? "PASS" : "FAIL", strerror (rc));
0374   rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
0375 
0376   first_bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
0377   last_bit = first_bit + rand () % (size / 2) + rtems_rfs_bitmap_element_bits();
0378 
0379   for (bit = first_bit; bit < last_bit; bit++)
0380   {
0381     rc = rtems_rfs_bitmap_map_clear (&control, bit);
0382     if (rc > 0)
0383     {
0384       printf (" 26. Clear bit %" PRId32 ": %s (%s)\n",
0385               bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
0386       rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
0387     }
0388   }
0389 
0390   printf (" 26. Clear bit (%" PRId32 ", %" PRId32 "]: %s (%s)\n",
0391           first_bit, last_bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
0392 
0393   clear = rtems_rfs_bitmap_map_free (&control);
0394   result = clear == (last_bit - first_bit);
0395   printf (" 27. Check free count is %zu: %" PRId32 ": %s (%s)\n",
0396           clear, last_bit - first_bit,
0397           result ? "pass" : "FAIL", strerror (rc));
0398 
0399   rc = rtems_rfs_bitmap_create_search (&control);
0400   result = clear == rtems_rfs_bitmap_map_free (&control);
0401   printf (" 28. Create search check free count is %zu: %zu: %s (%s)\n",
0402           clear, rtems_rfs_bitmap_map_free (&control),
0403           result ? "pass" : "FAIL", strerror (rc));
0404   rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
0405 
0406   rtems_rfs_bitmap_bit mybit = control.size +2;
0407 
0408   printf (" 29. Map set check with bit (%d) larger than size (%d)\n",
0409           (int)mybit, (int)control.size);
0410   rc = rtems_rfs_bitmap_map_set(&control, mybit);
0411   rtems_test_assert( rc == EINVAL );
0412 
0413   printf (" 30. Map clear check with bit (%d) larger than size (%d)\n",
0414           (int)mybit, (int)control.size);
0415   rc = rtems_rfs_bitmap_map_clear(&control, mybit);
0416   rtems_test_assert( rc == EINVAL );
0417 
0418   printf (" 31. Map test check with bit (%d) larger than size (%d)\n",
0419           (int)mybit, (int)control.size);
0420   rc = rtems_rfs_bitmap_map_test(&control, mybit ,&result);
0421   rtems_test_assert( rc == EINVAL );
0422 
0423   /* Set all bits, clear one and then set this cleared bit once again */
0424   printf (" 32. Set all bits in the map, then clear bit (%zu) and set this bit once again:",control.size/2);
0425   rc = rtems_rfs_bitmap_map_set_all(&control);
0426   rtems_test_assert( rc == 0 );
0427   rc = rtems_rfs_bitmap_map_clear(&control, control.size/2);
0428   rtems_test_assert (rc == 0 );
0429   rc = rtems_rfs_bitmap_map_set(&control, control.size/2);
0430   rtems_test_assert (rc == 0 );
0431   printf ("  PASSED\n");
0432 
0433   /* Attempt to find free bit (with different seeds) when all bits are set */
0434   printf (" 33. Attempt to find bit when all bits are set (expected FAILED):");
0435   rc = rtems_rfs_bitmap_map_alloc(&control, 0, &result, &bit);
0436   rtems_test_assert(rc == 0 );
0437   rtems_test_assert ( result == false );
0438   rc = rtems_rfs_bitmap_map_alloc(&control, size-1, &result, &bit);
0439   rtems_test_assert(rc == 0 );
0440   rtems_test_assert ( result == false );
0441   rc = rtems_rfs_bitmap_map_alloc(&control, size/2, &result, &bit);
0442   rtems_test_assert(rc == 0 );
0443   rtems_test_assert ( result == false );
0444   rc = rtems_rfs_bitmap_map_alloc(&control, 1, &result, &bit);
0445   rtems_test_assert(rc == 0 );
0446   rtems_test_assert ( result == false );
0447   rc = rtems_rfs_bitmap_map_alloc(&control, -2, &result, &bit);
0448   rtems_test_assert(rc == 0 );
0449   rtems_test_assert ( result == false );
0450   printf(" FAILED\n");
0451 
0452   /* Simply clear all bits */
0453   printf (" 34. Clear all bits in the map.\n");
0454   rc = rtems_rfs_bitmap_map_clear_all(&control);
0455   rtems_test_assert( rc == 0 );
0456   /* Check the free and size are equal after clearing all */
0457   rtems_test_assert( control.free == control.size );
0458 
0459   /* Check accounting for bits when setting a bit, see #3089 */
0460   printf (" 35. Set a bit and check accounting.\n");
0461   rc = rtems_rfs_bitmap_map_set(&control, 0);
0462   rtems_test_assert( rc == 0 );
0463   rtems_test_assert( control.free == control.size - 1);
0464   /* Setting again should not change the accounting. */
0465   rc = rtems_rfs_bitmap_map_set(&control, 0);
0466   rtems_test_assert( rc == 0 );
0467   rtems_test_assert( control.free == control.size - 1);
0468 
0469   rtems_rfs_bitmap_close (&control);
0470   free (buffer.buffer);
0471 }
0472 
0473 static void rtems_rfs_bitmap_unit_test (void)
0474 {
0475   printf (" Bit set value       : %d\n", RTEMS_RFS_BITMAP_BIT_SET);
0476   printf (" Bit clear value     : %d\n", RTEMS_RFS_BITMAP_BIT_CLEAR);
0477   printf (" Num bit per element : %zu\n", rtems_rfs_bitmap_element_bits ());
0478 
0479 #if INT_MAX >= 0x23984237
0480   srand (0x23984237);
0481 #else
0482   srand (0x2398);
0483 #endif
0484   rtems_rfs_bitmap_ut_test_bitmap (4096);
0485   rtems_rfs_bitmap_ut_test_bitmap (2048);
0486   rtems_rfs_bitmap_ut_test_bitmap (420);
0487 }
0488 
0489 static void nullpointer_test(void){
0490 
0491   rtems_rfs_bitmap_control control;
0492   rtems_rfs_bitmap_bit  bit = 0;
0493   rtems_rfs_bitmap_bit  seed_bit = 0;
0494   int rc;
0495   bool result;
0496 
0497   memset(&control, 0, sizeof(control));
0498 
0499   printf ("\n Testing bitmap_map functions with zero "
0500             "initialized bitmap control pointer\n");
0501 
0502   /* Invoke all functions with control initialized to zero */
0503   rc = rtems_rfs_bitmap_map_set(&control, bit);
0504   rtems_test_assert(rc == ENXIO);
0505   rc = rtems_rfs_bitmap_map_clear(&control, bit);
0506   rtems_test_assert(rc == ENXIO);
0507   rc = rtems_rfs_bitmap_map_test(&control, bit, &result);
0508   rtems_test_assert(rc == ENXIO);
0509   rc = rtems_rfs_bitmap_map_set_all(&control);
0510   rtems_test_assert(rc == ENXIO);
0511   rc = rtems_rfs_bitmap_map_clear_all(&control);
0512   rtems_test_assert(rc == ENXIO);
0513   rc = rtems_rfs_bitmap_create_search(&control);
0514   rtems_test_assert(rc == ENXIO);
0515   rc = rtems_rfs_bitmap_map_alloc(&control, seed_bit, &result, &bit);
0516   rtems_test_assert(rc == 0);
0517   rtems_test_assert(!result);
0518   rc = rtems_rfs_bitmap_map_set(&control, bit);
0519   rtems_test_assert(rc == ENXIO);
0520 }
0521 
0522 static void open_failure(void){
0523 
0524   rtems_rfs_file_system     fs;
0525   rtems_rfs_bitmap_control  control;
0526   rtems_rfs_buffer_handle   handle;
0527   int                       rc;
0528   void                     *opaque;
0529 
0530   /* Attempt to get ENOMEM while open bitmap */
0531   printf("\n Allocate most of memory - attempt to fail while open bitmap - expect ENOMEM\n" );
0532 
0533   opaque = rtems_heap_greedy_allocate( NULL, 0 );
0534 
0535   memset (&fs, 0, sizeof (fs));
0536 
0537   rc = rtems_rfs_buffer_handle_open (&fs, &handle);
0538   rtems_test_assert( rc == 0 );
0539 
0540   rc = rtems_rfs_bitmap_open (&control, &fs, &handle, 0, 0);
0541   rtems_test_assert( rc == ENOMEM );
0542   printf( " Attempt to open bitmap returned: %s\n", strerror(rc));
0543   puts( " Freeing the allocated memory" );
0544   rtems_heap_greedy_free( opaque );
0545 }
0546 
0547 void test(void){
0548   puts("\n START of RFS Bitmap Unit Test");
0549 
0550   rtems_rfs_bitmap_unit_test();
0551   nullpointer_test();
0552   open_failure();
0553 
0554   puts("\n END of RFS Bitmap Unit Test");
0555 }