]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[region] Added test program
authorCharlie Brej <cbrej@cs.man.ac.uk>
Sun, 22 Nov 2009 21:42:12 +0000 (21:42 +0000)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Sun, 22 Nov 2009 21:42:12 +0000 (21:42 +0000)
This examines the behaviour for correct behavious and performance.

src/libply/ply-region.c
src/libply/tests/Makefile.am
src/libply/tests/ply-region.am [new file with mode: 0644]

index ed1614f0d02a02c846cf7de17b3a39c32a36cb58..85c8797d5cb6c137f98597a70ed93b37bd8c7e0b 100644 (file)
@@ -388,4 +388,130 @@ ply_region_get_rectangle_list (ply_region_t *region)
   return region->rectangle_list;
 }
 
+#ifdef PLY_REGION_ENABLE_TEST
+#include <stdio.h>
+
+#define COVER_SIZE 30
+#define RECTANGLE_COUNT 2
+
+static void
+cover_with_rect(char             cover[COVER_SIZE][COVER_SIZE],
+                ply_rectangle_t *rectangle,
+                int              mask)
+{
+  int x, y;
+  for (y=0; y<rectangle->height; y++)
+    {
+      for (x=0; x<rectangle->width; x++)
+        {
+          if (rectangle->x + x >= 0 &&
+              rectangle->y + y >= 0 &&
+              rectangle->x + x < COVER_SIZE &&
+              rectangle->y + y < COVER_SIZE)
+            {
+//              printf("%d %d\n", rectangle->x, x);
+              if (mask)
+                cover[rectangle->y + y][rectangle->x + x] = mask;
+              else
+                cover[rectangle->y + y][rectangle->x + x]++;
+            }
+        }
+    }
+}
+
+int
+do_test (void)
+{
+  ply_rectangle_t rectangle;
+  char cover[COVER_SIZE][COVER_SIZE];
+  int x, y, i, width, height;
+  ply_region_t *region;
+  ply_list_node_t *node;
+  
+  region = ply_region_new ();
+  
+
+  for (y = 0; y < COVER_SIZE; y++)
+    {
+      for (x = 0; x < COVER_SIZE; x++)
+        {
+          cover[y][x] = 0;
+        }
+    }
+  
+  for (i = 0; i < RECTANGLE_COUNT; i++)
+    {
+      rectangle.x = random() % COVER_SIZE-5;
+      rectangle.y = random() % COVER_SIZE-5;
+      rectangle.width = 1 + random() % 20;
+      rectangle.height = 1 + random() % 20;
+      printf("Adding X=%d Y=%d W=%d H=%d\n", rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+      cover_with_rect(cover, &rectangle, 100); /* 100 means covered by origial squares */
+      ply_region_add_rectangle (region, &rectangle);
+    }
+  
+  printf("TO\n");
+  int count = 0;
+  
+  ply_list_t *rectangle_list = ply_region_get_rectangle_list (region);
+  for (node = ply_list_get_first_node (rectangle_list);
+       node;
+       node = ply_list_get_next_node (rectangle_list, node))
+    {
+      ply_rectangle_t *small_rectangle = ply_list_node_get_data (node);
+      printf("Processed X=%d Y=%d W=%d H=%d\n", small_rectangle->x, small_rectangle->y, small_rectangle->width, small_rectangle->height);
+      cover_with_rect(cover, small_rectangle, 0);
+      count++;
+    }
+  printf("Rectangles in:%d out:%d\n", RECTANGLE_COUNT, count);
+  
+  count=0;
+  
+  for (y = 0; y < COVER_SIZE; y++)
+    {
+      printf("%03d ", y);
+      for (x = 0; x < COVER_SIZE; x++)
+        {
+          if (cover[y][x] >= 100)
+            {
+              if (cover[y][x] == 100)
+                {
+                  printf("-");
+                  count++;
+                }
+              else
+                if (cover[y][x] == 101) printf("O");
+              else
+                {
+                  printf("%d", cover[y][x]-101);
+                  count++;
+                }
+            }
+          else
+            {
+              if (cover[y][x] == 0) printf("o");
+              else                 {
+                  printf("%d", cover[y][x]);
+                  count++;
+                }
+            }
+        }
+      printf("\n");
+    }
+  printf("errors:%d\n", count);
+  return count;
+}
+int
+main (int    argc,
+      char **argv)
+{
+  int i;
+  srandom(123);
+  for (i=0; i<100; i++)
+    {
+      if (do_test ()) return 1;
+    }
+  return 0;
+}
+#endif
 /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
index 5707c25123f08bf0a38bbf9f78ff83a2cc83451b..8e37f93d966ba4e8d9e7adf4159b98119910b64d 100644 (file)
@@ -14,6 +14,7 @@ include $(srcdir)/ply-hashtable-test.am
 include $(srcdir)/ply-event-loop-test.am
 include $(srcdir)/ply-command-parser-test.am
 include $(srcdir)/ply-progress-test.am
+include $(srcdir)/ply-region.am
 endif
 
 noinst_PROGRAMS = $(TESTS)
diff --git a/src/libply/tests/ply-region.am b/src/libply/tests/ply-region.am
new file mode 100644 (file)
index 0000000..1883833
--- /dev/null
@@ -0,0 +1,12 @@
+TESTS += ply-region-test
+
+ply_region_test_CFLAGS = $(PLYMOUTH_CFLAGS) -DPLY_REGION_ENABLE_TEST
+ply_region_test_LDADD = $(PLYMOUTH_LIBS)
+
+ply_region_test_SOURCES =                                                   \
+                          $(srcdir)/../ply-region.h                         \
+                          $(srcdir)/../ply-region.c                         \
+                          $(srcdir)/../ply-rectangle.h                      \
+                          $(srcdir)/../ply-rectangle.c                      \
+                          $(srcdir)/../ply-list.h                           \
+                          $(srcdir)/../ply-list.c