Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include <string.h>
  2. #include <stdlib.h>
  3. //#include <stdint.h>
  4. #include "test.h"
  5.  
  6. static char buf[512];
  7.  
  8. static void *(*volatile pmemset)(void *, int, size_t);
  9.  
  10. static void *aligned(void *p)
  11. {
  12.         return (void*)(((uintptr_t)p + 63) & -64U);
  13. }
  14.  
  15. #define N 80
  16. static void test_align(int align, int len)
  17. {
  18.         char *s = aligned(buf);
  19.         char *want = aligned(buf + 256);
  20.         char *p;
  21.         int i;
  22.  
  23.         if (align + len > N)
  24.                 abort();
  25.         for (i = 0; i < N; i++)
  26.                 s[i] = want[i] = ' ';
  27.         for (i = 0; i < len; i++)
  28.                 want[align+i] = '#';
  29.         p = pmemset(s+align, '#', len);
  30.         if (p != s+align)
  31.                 t_error("memset(%p,...) returned %p\n", s+align, p);
  32.         for (i = 0; i < N; i++)
  33.                 if (s[i] != want[i]) {
  34.                         t_error("memset(align %d, '#', %d) failed\n", align, len);
  35.                         t_printf("got : %.*s\n", align+len+1, s);
  36.                         t_printf("want: %.*s\n", align+len+1, want);
  37.                         break;
  38.                 }
  39. }
  40.  
  41. static void test_value(int c)
  42. {
  43.         int i;
  44.  
  45.         pmemset(buf, c, 10);
  46.         for (i = 0; i < 10; i++)
  47.                 if ((unsigned char)buf[i] != (unsigned char)c) {
  48.                         t_error("memset(%d) failed: got %d\n", c, buf[i]);
  49.                         break;
  50.                 }
  51. }
  52.  
  53. int main(void)
  54. {
  55.         int i,j,k;
  56.  
  57.         pmemset = memset;
  58.  
  59.         for (i = 0; i < 16; i++)
  60.                 for (j = 0; j < 64; j++)
  61.                         test_align(i,j);
  62.  
  63.         test_value('c');
  64.         test_value(0);
  65.         test_value(-1);
  66.         test_value(-5);
  67.         test_value(0xab);
  68.  
  69.         printf("%s finished\n", __FILE__);
  70.         return t_status;
  71. }
  72.