Test simplification, plaything
* test.h provides some macros to aid test writing * applied that to some tests
This commit is contained in:
parent
0b8b5bf507
commit
646d6fa0d3
3 changed files with 220 additions and 187 deletions
|
|
@ -23,173 +23,166 @@
|
|||
//#include <string.h>
|
||||
|
||||
#include "lib/llist.h"
|
||||
#include "lib/error.h"
|
||||
#include "tests/test.h"
|
||||
|
||||
TESTS_BEGIN
|
||||
|
||||
LUMIERA_ERROR_DEFINE(TEST, "test error");
|
||||
|
||||
int
|
||||
main (int argc, char** argv)
|
||||
TEST ("basic")
|
||||
{
|
||||
NOBUG_INIT;
|
||||
LLIST_AUTO (node1);
|
||||
|
||||
if (argc == 1)
|
||||
return 0;
|
||||
llist node2;
|
||||
llist_init (&node2);
|
||||
|
||||
if (!strcmp(argv[1], "basic"))
|
||||
{
|
||||
LLIST_AUTO (node1);
|
||||
|
||||
llist node2;
|
||||
llist_init (&node2);
|
||||
|
||||
printf ("%d\n", llist_is_empty (&node1));
|
||||
printf ("%d\n", llist_is_empty (&node2));
|
||||
}
|
||||
else if (!strcmp(argv[1], "nodeinsert"))
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
|
||||
llist_insert_next (&list, &node1);
|
||||
printf ("%d\n", llist_is_empty (&list));
|
||||
printf ("%d\n", llist_is_empty (&node1));
|
||||
printf ("%d\n", llist_is_single (&node1));
|
||||
llist_insert_next (&node1, &node2);
|
||||
printf ("%d\n", llist_is_single (&node1));
|
||||
llist_insert_prev (&node1, &node3);
|
||||
printf ("%d\n", llist_next (&list) == &node3);
|
||||
printf ("%d\n", llist_next (&node3) == &node1);
|
||||
printf ("%d\n", llist_next (&node1) == &node2);
|
||||
printf ("%d\n", llist_prev (&list) == &node2);
|
||||
printf ("%d\n", llist_count (&list));
|
||||
}
|
||||
else if (!strcmp(argv[1], "predicates"))
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
LLIST_AUTO (node4);
|
||||
LLIST_AUTO (nil);
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
printf ("%d\n", llist_is_head (&list, &node1));
|
||||
printf ("%d\n", llist_is_tail (&list, &node4));
|
||||
printf ("%d\n", llist_is_head (&list, &node4));
|
||||
printf ("%d\n", llist_is_tail (&list, &node1));
|
||||
printf ("%d\n", llist_is_end (&list, &list));
|
||||
printf ("%d\n", llist_is_member (&list, &node3));
|
||||
printf ("%d\n", llist_is_member (&list, &nil));
|
||||
|
||||
printf ("%d\n", llist_is_before_after (&list, &node1, &node3));
|
||||
printf ("%d\n", llist_is_before_after (&list, &node3, &node1));
|
||||
printf ("%d\n", llist_is_before_after (&list, &node1, &nil));
|
||||
}
|
||||
else if (!strcmp(argv[1], "unlink"))
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
LLIST_AUTO (node4);
|
||||
LLIST_AUTO (nil);
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
LLIST_FOREACH_REV (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
|
||||
llist_unlink (&nil);
|
||||
llist_unlink (&node2);
|
||||
llist_unlink (&node3);
|
||||
|
||||
LLIST_FOREACH (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
printf ("%d\n", llist_is_empty (&node2));
|
||||
printf ("%d\n", llist_is_empty (&node3));
|
||||
printf ("%d\n", llist_is_empty (&nil));
|
||||
}
|
||||
else if (!strcmp(argv[1], "whiles"))
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
LLIST_AUTO (node4);
|
||||
LLIST_AUTO (nil);
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
LLIST_FOREACH_REV (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
|
||||
LLIST_WHILE_HEAD (&list, head)
|
||||
llist_unlink (head);
|
||||
|
||||
LLIST_FOREACH (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
LLIST_WHILE_TAIL (&list, tail)
|
||||
llist_unlink (tail);
|
||||
|
||||
LLIST_FOREACH (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
}
|
||||
else
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
printf ("%d\n", llist_is_empty (&node1));
|
||||
printf ("%d\n", llist_is_empty (&node2));
|
||||
}
|
||||
|
||||
TEST ("nodeinsert")
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
|
||||
llist_insert_next (&list, &node1);
|
||||
printf ("%d\n", llist_is_empty (&list));
|
||||
printf ("%d\n", llist_is_empty (&node1));
|
||||
printf ("%d\n", llist_is_single (&node1));
|
||||
llist_insert_next (&node1, &node2);
|
||||
printf ("%d\n", llist_is_single (&node1));
|
||||
llist_insert_prev (&node1, &node3);
|
||||
printf ("%d\n", llist_next (&list) == &node3);
|
||||
printf ("%d\n", llist_next (&node3) == &node1);
|
||||
printf ("%d\n", llist_next (&node1) == &node2);
|
||||
printf ("%d\n", llist_prev (&list) == &node2);
|
||||
printf ("%d\n", llist_count (&list));
|
||||
}
|
||||
|
||||
TEST ("predicates")
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
LLIST_AUTO (node4);
|
||||
LLIST_AUTO (nil);
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
printf ("%d\n", llist_is_head (&list, &node1));
|
||||
printf ("%d\n", llist_is_tail (&list, &node4));
|
||||
printf ("%d\n", llist_is_head (&list, &node4));
|
||||
printf ("%d\n", llist_is_tail (&list, &node1));
|
||||
printf ("%d\n", llist_is_end (&list, &list));
|
||||
printf ("%d\n", llist_is_member (&list, &node3));
|
||||
printf ("%d\n", llist_is_member (&list, &nil));
|
||||
|
||||
printf ("%d\n", llist_is_before_after (&list, &node1, &node3));
|
||||
printf ("%d\n", llist_is_before_after (&list, &node3, &node1));
|
||||
printf ("%d\n", llist_is_before_after (&list, &node1, &nil));
|
||||
}
|
||||
|
||||
TEST ("unlink")
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
LLIST_AUTO (node4);
|
||||
LLIST_AUTO (nil);
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
LLIST_FOREACH_REV (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
|
||||
llist_unlink (&nil);
|
||||
llist_unlink (&node2);
|
||||
llist_unlink (&node3);
|
||||
|
||||
LLIST_FOREACH (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
printf ("%d\n", llist_is_empty (&node2));
|
||||
printf ("%d\n", llist_is_empty (&node3));
|
||||
printf ("%d\n", llist_is_empty (&nil));
|
||||
}
|
||||
|
||||
TEST ("whiles")
|
||||
{
|
||||
LLIST_AUTO (list);
|
||||
LLIST_AUTO (node1);
|
||||
LLIST_AUTO (node2);
|
||||
LLIST_AUTO (node3);
|
||||
LLIST_AUTO (node4);
|
||||
LLIST_AUTO (nil);
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
LLIST_FOREACH_REV (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
|
||||
LLIST_WHILE_HEAD (&list, head)
|
||||
llist_unlink (head);
|
||||
|
||||
LLIST_FOREACH (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
|
||||
llist_insert_tail (&list, &node2);
|
||||
llist_insert_tail (&list, &node3);
|
||||
llist_insert_tail (&list, &node4);
|
||||
llist_insert_head (&list, &node1);
|
||||
|
||||
LLIST_WHILE_TAIL (&list, tail)
|
||||
llist_unlink (tail);
|
||||
|
||||
LLIST_FOREACH (&list, itr)
|
||||
{
|
||||
if(itr == &node1) printf ("node1 ");
|
||||
else if(itr == &node2) printf ("node2 ");
|
||||
else if(itr == &node3) printf ("node3 ");
|
||||
else if(itr == &node4) printf ("node4 ");
|
||||
else printf ("unknown ");
|
||||
}
|
||||
printf (".\n");
|
||||
}
|
||||
|
||||
|
||||
TESTS_END
|
||||
|
|
|
|||
|
|
@ -21,33 +21,21 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "lib/error.h"
|
||||
|
||||
LUMIERA_ERROR_DEFINE(TEST, "test error");
|
||||
#include "tests/test.h"
|
||||
|
||||
int conditionforgotunlock ();
|
||||
int mutexforgotunlock ();
|
||||
|
||||
TESTS_BEGIN
|
||||
|
||||
int
|
||||
main (int argc, char** argv)
|
||||
TEST ("conditionforgotunlock")
|
||||
{
|
||||
NOBUG_INIT;
|
||||
|
||||
if (argc == 1)
|
||||
return 0;
|
||||
|
||||
if (!strcmp(argv[1], "conditionforgotunlock"))
|
||||
{
|
||||
return conditionforgotunlock ();
|
||||
}
|
||||
if (!strcmp(argv[1], "mutexforgotunlock"))
|
||||
{
|
||||
return mutexforgotunlock ();
|
||||
}
|
||||
else
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
return conditionforgotunlock ();
|
||||
}
|
||||
|
||||
TEST ("mutexforgotunlock")
|
||||
{
|
||||
return mutexforgotunlock ();
|
||||
}
|
||||
|
||||
TESTS_END
|
||||
|
|
|
|||
52
tests/test.h
Normal file
52
tests/test.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
test.h - macros for running tests
|
||||
|
||||
Copyright (C) CinelerraCV
|
||||
2008, Christian Thaeter <ct@pipapo.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef TEST_H
|
||||
#define TEST_H
|
||||
|
||||
#include <nobug.h>
|
||||
|
||||
#include "lib/error.h"
|
||||
|
||||
LUMIERA_ERROR_DEFINE (TEST, "test error");
|
||||
|
||||
#define TESTS_BEGIN \
|
||||
int \
|
||||
main (int argc, char** argv) \
|
||||
{ \
|
||||
NOBUG_INIT; \
|
||||
\
|
||||
if (argc == 1) \
|
||||
return 1;
|
||||
|
||||
#define TEST(name) \
|
||||
else if (!strcmp(argv[1], name))
|
||||
|
||||
|
||||
#define TESTS_END \
|
||||
else \
|
||||
return 1; \
|
||||
\
|
||||
return 0; \
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue