Beispiel #1
0
int
main(int argc, char** argv)
{
    struct mem_allocator allocator;

    (void)argc;
    (void)argv;

    printf("Default allocator:\n");
    regular_test(&mem_default_allocator);

    printf("\nProxy allocator\n");
    mem_init_proxy_allocator("utest", &allocator, &mem_default_allocator);
    regular_test(&allocator);
    mem_shutdown_proxy_allocator(&allocator);

    CHECK(MEM_ALLOCATED_SIZE(&mem_default_allocator), 0);

    return 0;
}
Beispiel #2
0
static void
regular_test(struct mem_allocator* allocator)
{
    char dump[BUFSIZ];
    void* p = NULL;
    void* q[3] = {NULL, NULL, NULL};
    size_t i = 0;

    p = MEM_ALIGNED_ALLOC(allocator, 1024, ALIGNOF(char));
    NCHECK(p, NULL);
    CHECK(IS_ALIGNED((uintptr_t)p, ALIGNOF(char)), 1);
    MEM_FREE(allocator, p);

    q[0] = MEM_ALIGNED_ALLOC(allocator, 10, 8);
    q[1] = MEM_CALLOC(allocator, 1, 58);
    q[2] = MEM_ALLOC(allocator, 78);
    NCHECK(q[0], NULL);
    NCHECK(q[1], NULL);
    NCHECK(q[2], NULL);
    CHECK(IS_ALIGNED((uintptr_t)q[0], 8), 1);

    p = MEM_CALLOC(allocator, 2, 2);
    NCHECK(p, NULL);
    for(i = 0; i < 4; ++i)
        CHECK(((char*)p)[i], 0);
    for(i = 0; i < 4; ++i)
        ((char*)p)[i] = (char)i;

    MEM_DUMP(allocator, dump, BUFSIZ);
    printf("dump:\n%s\n", dump);
    MEM_DUMP(allocator, dump, 16);
    printf("truncated dump:\n%s\n", dump);
    MEM_DUMP(allocator, NULL, 0); /* may not crashed. */

    MEM_FREE(allocator, q[1]);

    p = MEM_REALLOC(allocator, p, 8);
    for(i = 0; i < 4; ++i)
        CHECK(((char*)p)[i], (char)i);
    for(i = 4; i < 8; ++i)
        ((char*)p)[i] = (char)i;

    MEM_FREE(allocator, q[2]);

    p = MEM_REALLOC(allocator, p, 5);
    for(i = 0; i < 5; ++i)
        CHECK(((char*)p)[i], (char)i);

    MEM_FREE(allocator, p);

    p = NULL;
    p = MEM_REALLOC(allocator, NULL, 16);
    NCHECK(p, NULL);
    p = MEM_REALLOC(allocator, p, 0);

    MEM_FREE(allocator, q[0]);

    CHECK(MEM_ALIGNED_ALLOC(allocator, 1024, 0), NULL);
    CHECK(MEM_ALIGNED_ALLOC(allocator, 1024, 3), NULL);
    CHECK(MEM_ALLOCATED_SIZE(allocator), 0);
}
Beispiel #3
0
  CHECK(sl_flat_map_lower_bound(map, (int[]){26}, &i), OK);
  CHECK(i, 6);

  CHECK(sl_flat_map_upper_bound(NULL, NULL, NULL), BAD_ARG);
  CHECK(sl_flat_map_upper_bound(map, NULL, NULL), BAD_ARG);
  CHECK(sl_flat_map_upper_bound(NULL, (int[]){1}, NULL), BAD_ARG);
  CHECK(sl_flat_map_upper_bound(map, (int[]){1}, NULL), BAD_ARG);
  CHECK(sl_flat_map_upper_bound(NULL, NULL, &i), BAD_ARG);
  CHECK(sl_flat_map_upper_bound(map, NULL, &i), BAD_ARG);
  CHECK(sl_flat_map_upper_bound(NULL, (int[]){1}, &i), BAD_ARG);
  CHECK(sl_flat_map_upper_bound(map, (int[]){1}, &i), OK);
  CHECK(i, 1);
  CHECK(sl_flat_map_upper_bound(map, (int[]){0}, &i), OK);
  CHECK(i, 1);
  CHECK(sl_flat_map_upper_bound(map, (int[]){-1}, &i), OK);
  CHECK(i, 0);
  CHECK(sl_flat_map_upper_bound(map, (int[]){5}, &i), OK);
  CHECK(i, 4);
  CHECK(sl_flat_map_upper_bound(map, (int[]){24}, &i), OK);
  CHECK(i, 5);
  CHECK(sl_flat_map_upper_bound(map, (int[]){25}, &i), OK);
  CHECK(i, 6);
  CHECK(sl_flat_map_upper_bound(map, (int[]){26}, &i), OK);
  CHECK(i, 6);

  CHECK(sl_free_flat_map(NULL), BAD_ARG);
  CHECK(sl_free_flat_map(map), OK);
  CHECK(MEM_ALLOCATED_SIZE(&mem_default_allocator), 0);
  return 0;
}
Beispiel #4
0
int
main(int argc, char** argv)
{
  char buf[BUFSIZ];
  struct font_glyph_desc desc;
  struct font_system* sys = NULL;
  struct font_rsrc* font = NULL;
  struct font_glyph* glyph = NULL;
  const char* path = NULL;
  unsigned char* buffer = NULL;
  size_t buffer_size = 0;
  int h = 0;
  int w = 0;
  int Bpp = 0;
  int i = 0;
  bool b = false;

  if(argc != 2) {
    printf("usage: %s FONT\n", argv[0]);
    goto error;
  }
  path = argv[1];

  CHECK(font_system_create( NULL, NULL ), BAD_ARG);
  CHECK(font_system_create(NULL, &sys), OK);

  CHECK(font_rsrc_create(NULL, NULL, NULL), BAD_ARG);
  CHECK(font_rsrc_create(sys, NULL, NULL), BAD_ARG);
  CHECK(font_rsrc_create(NULL, NULL, &font), BAD_ARG);
  CHECK(font_rsrc_create(sys, NULL, &font), OK);

  CHECK(font_rsrc_load(NULL, NULL), BAD_ARG);
  CHECK(font_rsrc_load(font, NULL), BAD_ARG);
  CHECK(font_rsrc_load(NULL, path), BAD_ARG);
  CHECK(font_rsrc_load(font, path), OK);

  CHECK(font_rsrc_is_scalable(NULL, NULL), BAD_ARG);
  CHECK(font_rsrc_is_scalable(font, NULL), BAD_ARG);
  CHECK(font_rsrc_is_scalable(NULL, &b), BAD_ARG);
  CHECK(font_rsrc_is_scalable(font, &b), OK);

  if(b) {
    CHECK(font_rsrc_set_size(NULL, 0, 0), BAD_ARG);
    CHECK(font_rsrc_set_size(font, 0, 0), BAD_ARG);
    CHECK(font_rsrc_set_size(NULL, 32, 0), BAD_ARG);
    CHECK(font_rsrc_set_size(font, 32, 0), BAD_ARG);
    CHECK(font_rsrc_set_size(NULL, 0, 64), BAD_ARG);
    CHECK(font_rsrc_set_size(font, 0, 64), BAD_ARG);
    CHECK(font_rsrc_set_size(NULL, 32, 64), BAD_ARG);
    CHECK(font_rsrc_set_size(font, 32, 64), OK);
    CHECK(font_rsrc_set_size(font, 16, 16), OK);
  }

  CHECK(font_rsrc_get_line_space(NULL, NULL), BAD_ARG);
  CHECK(font_rsrc_get_line_space(font, NULL), BAD_ARG);
  CHECK(font_rsrc_get_line_space(NULL, &i), BAD_ARG);
  CHECK(font_rsrc_get_line_space(font, &i), OK);

  CHECK(font_rsrc_get_glyph(NULL, L'a', NULL), BAD_ARG);
  CHECK(font_rsrc_get_glyph(font, L'a', NULL), BAD_ARG);
  CHECK(font_rsrc_get_glyph(NULL, L'a', &glyph), BAD_ARG);
  CHECK(font_rsrc_get_glyph(font, L'a', &glyph), OK);

  CHECK(font_glyph_get_desc(NULL, NULL), BAD_ARG);
  CHECK(font_glyph_get_desc(glyph, NULL), BAD_ARG);
  CHECK(font_glyph_get_desc(NULL, &desc), BAD_ARG);
  CHECK(font_glyph_get_desc(glyph, &desc), OK);
  CHECK(desc.character, L'a');

  CHECK(font_glyph_get_bitmap(NULL, true, NULL, NULL, NULL, NULL), BAD_ARG);
  CHECK(font_glyph_get_bitmap(glyph, true, NULL, NULL, NULL, NULL), OK);
  CHECK(font_glyph_get_bitmap(glyph, true, &w, NULL, NULL, NULL), OK);
  CHECK(font_glyph_get_bitmap(glyph, true, NULL, &h, NULL, NULL), OK);
  CHECK(font_glyph_get_bitmap(glyph, true, &w, &h, NULL, NULL), OK);
  CHECK(font_glyph_get_bitmap(glyph, true, NULL, NULL, &Bpp, NULL), OK);
  CHECK(font_glyph_get_bitmap(glyph, true, &w, NULL, &Bpp, NULL), OK);
  CHECK(font_glyph_get_bitmap(glyph, true, NULL, &h, &Bpp, NULL), OK);
  CHECK(font_glyph_get_bitmap(glyph, true, &w, &h, &Bpp, NULL), OK);
  NCHECK(w, 0);
  NCHECK(h, 0);
  NCHECK(Bpp, 0);

  buffer = MEM_CALLOC
    (&mem_default_allocator, (size_t)(w*h*Bpp), sizeof(unsigned char));
  NCHECK(buffer, NULL);
  buffer_size = (size_t)(w*h*Bpp) * sizeof(unsigned char);

  CHECK(font_glyph_get_bitmap(glyph, false, NULL, NULL, NULL, buffer), OK);
  CHECK(font_glyph_get_bitmap(glyph, false, &w, NULL, NULL, buffer), OK);
  CHECK(font_glyph_get_bitmap(glyph, false, NULL, &h, NULL, buffer), OK);
  CHECK(font_glyph_get_bitmap(glyph, false, &w, &h, NULL, buffer), OK);
  CHECK(font_glyph_get_bitmap(glyph, false, NULL, NULL, &Bpp, buffer), OK);
  CHECK(font_glyph_get_bitmap(glyph, false, &w, NULL, &Bpp, buffer), OK);
  CHECK(font_glyph_get_bitmap(glyph, false, NULL, &h, &Bpp, buffer), OK);
  CHECK(font_glyph_get_bitmap(glyph, false, &w, &h, &Bpp, buffer), OK);

  CHECK(font_glyph_ref_get(NULL), BAD_ARG);
  CHECK(font_glyph_ref_get(glyph), OK);
  CHECK(font_glyph_ref_put(NULL), BAD_ARG);
  CHECK(font_glyph_ref_put(glyph), OK);
  CHECK(font_glyph_ref_put(glyph), OK);

  b = true;
  for(i = 0; b && i < w*h*Bpp; ++i)
    b = ((int)buffer[i] == 0);
  CHECK(b, false);

  for(i = 32; i < 127; ++i) {
    size_t required_buffer_size = 0;
    CHECK(font_rsrc_get_glyph(font, (wchar_t)i, &glyph), OK);

    CHECK(font_glyph_get_bitmap(glyph, true, &w, &h, &Bpp, NULL), OK);
    required_buffer_size = (size_t)(w * h * Bpp) * sizeof(unsigned char);
    if(required_buffer_size > buffer_size) {
      buffer = MEM_REALLOC(&mem_default_allocator,buffer, required_buffer_size);
      NCHECK(buffer, NULL);
      buffer_size = required_buffer_size;
    }
    CHECK(font_glyph_get_bitmap(glyph, true, &w, &h, &Bpp, buffer), OK);
    NCHECK(snprintf(buf, BUFSIZ, "/tmp/%.3d.ppm", i - 32), BUFSIZ);
    CHECK(image_ppm_write(buf, w, h, Bpp, buffer), 0);
    CHECK(font_glyph_ref_put(glyph), OK);
  }
  MEM_FREE(&mem_default_allocator, buffer);

  CHECK(font_rsrc_ref_get(NULL), BAD_ARG);
  CHECK(font_rsrc_ref_get(font), OK);
  CHECK(font_rsrc_ref_put(NULL), BAD_ARG);
  CHECK(font_rsrc_ref_put(font), OK);
  CHECK(font_rsrc_ref_put(font), OK);

  CHECK(font_system_ref_get(NULL), BAD_ARG);
  CHECK(font_system_ref_get(sys), OK);
  CHECK(font_system_ref_put(NULL), BAD_ARG);
  CHECK(font_system_ref_put(sys), OK);
  CHECK(font_system_ref_put(sys), OK);

  CHECK(MEM_ALLOCATED_SIZE(&mem_default_allocator), 0);

  return 0;

error:
  return -1;
}