/* EINA - EFL data type library
* Copyright (C) 2009 Rafael Antognolli
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library;
* if not, see .
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include
#include "eina_suite.h"
#include "Eina.h"
struct test_rect
{
unsigned long col, row;
int x, y, w, h;
Eina_Bool full;
};
static void
check_iterator(Eina_Iterator *it, struct test_rect *cur_test)
{
unsigned int i = 0;
struct Eina_Tile_Grid_Info *tile;
EINA_ITERATOR_FOREACH(it, tile) {
fail_if(cur_test[i].col != tile->col ||
cur_test[i].row != tile->row ||
cur_test[i].x != tile->rect.x ||
cur_test[i].y != tile->rect.y ||
cur_test[i].w != tile->rect.w ||
cur_test[i].h != tile->rect.h ||
cur_test[i].full != tile->full);
i++;
}
fail_if(i == 0);
}
START_TEST(eina_test_tile_grid_slicer_iterator)
{
Eina_Iterator *it;
struct test_rect *cur_test;
struct test_rect test1[] = {{1, 1, 72, 82, 10, 15, 0}};
struct test_rect test2[] =
{{1, 1, 72, 82, 56, 15, 0},
{2, 1, 0, 82, 128, 15, 0},
{3, 1, 0, 82, 116, 15, 0}};
struct test_rect test3[] =
{{1, 1, 72, 82, 10, 46, 0},
{1, 2, 72, 0, 10, 128, 0},
{1, 3, 72, 0, 10, 126, 0}};
struct test_rect test4[] =
{{1, 1, 72, 82, 56, 46, 0},
{2, 1, 0, 82, 128, 46, 0},
{3, 1, 0, 82, 128, 46, 0},
{4, 1, 0, 82, 88, 46, 0},
{1, 2, 72, 0, 56, 128, 0},
{2, 2, 0, 0, 128, 128, 1},
{3, 2, 0, 0, 128, 128, 1},
{4, 2, 0, 0, 88, 128, 0},
{1, 3, 72, 0, 56, 126, 0},
{2, 3, 0, 0, 128, 126, 0},
{3, 3, 0, 0, 128, 126, 0},
{4, 3, 0, 0, 88, 126, 0}};
struct test_rect test5[] = {{1, 1, 0, 0, 128, 128, 1}};
struct test_rect test6[] = {{1, 1, 0, 0, 1, 1, 0}};
struct test_rect test7[] =
{{1, 1, 0, 0, 128, 128, 1},
{2, 1, 0, 0, 1, 128, 0},
{1, 2, 0, 0, 128, 1, 0},
{2, 2, 0, 0, 1, 1, 0}};
eina_init();
cur_test = test1;
it = eina_tile_grid_slicer_iterator_new(200, 210, 10, 15, 128, 128);
check_iterator(it, cur_test);
eina_iterator_free(it);
cur_test = test2;
it = eina_tile_grid_slicer_iterator_new(200, 210, 300, 15, 128, 128);
check_iterator(it, cur_test);
eina_iterator_free(it);
cur_test = test3;
it = eina_tile_grid_slicer_iterator_new(200, 210, 10, 300, 128, 128);
check_iterator(it, cur_test);
eina_iterator_free(it);
cur_test = test4;
it = eina_tile_grid_slicer_iterator_new(200, 210, 400, 300, 128, 128);
check_iterator(it, cur_test);
eina_iterator_free(it);
cur_test = test5;
it = eina_tile_grid_slicer_iterator_new(128, 128, 128, 128, 128, 128);
check_iterator(it, cur_test);
eina_iterator_free(it);
cur_test = test6;
it = eina_tile_grid_slicer_iterator_new(128, 128, 1, 1, 128, 128);
check_iterator(it, cur_test);
eina_iterator_free(it);
cur_test = test7;
it = eina_tile_grid_slicer_iterator_new(128, 128, 129, 129, 128, 128);
check_iterator(it, cur_test);
eina_iterator_free(it);
eina_shutdown();
}
END_TEST
START_TEST(eina_test_tiler_all)
{
Eina_Tiler *tl;
Eina_Iterator *it;
Eina_Rectangle *rp;
Eina_Rectangle r;
int i = 0;
eina_init();
tl = eina_tiler_new(640, 480);
eina_tiler_tile_size_set(tl, 32, 32);
EINA_RECTANGLE_SET(&r, 50, 50, 20, 20);
fail_if(!eina_tiler_rect_add(tl, &r));
EINA_RECTANGLE_SET(&r, -10, -10, 5, 5);
fail_if(eina_tiler_rect_add(tl, &r));
EINA_RECTANGLE_SET(&r, 40, 40, 20, 20);
eina_tiler_rect_del(tl, &r);
it = eina_tiler_iterator_new(tl);
fail_if(!it);
EINA_ITERATOR_FOREACH(it, rp)
{
fail_if(rp->w <= 0);
fail_if(rp->h <= 0);
fail_if(rp->x < 0 || rp->x + rp->w > 640);
fail_if(rp->y < 0 || rp->y + rp->h > 480);
++i;
}
fail_if(eina_iterator_container_get(it) != tl);
eina_iterator_free(it);
fail_if(i == 0);
eina_tiler_clear(tl);
eina_tiler_free(tl);
eina_shutdown();
}
END_TEST
void
eina_test_tiler(TCase *tc)
{
tcase_add_test(tc, eina_test_tile_grid_slicer_iterator);
tcase_add_test(tc, eina_test_tiler_all);
}