/* * Run some tests * * (C) Copyright 2001-2003 Geert Uytterhoeven * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive for * more details. */ #include #include #include "types.h" #include "fb.h" #include "visual.h" #include "test.h" #include "util.h" static const struct test *all_tests[] = { &test001, &test002, &test003, &test004, &test005, &test006, &test007, &test008, &test009, &test010, &test011, &test012, &test013, NULL }; /* * Run one test */ #define TEST_REQ_MIN(reqname, varname) \ if (test->reqs & REQF_ ## reqname) { \ if (varname < test->reqname) { \ Debug("Requirement " #reqname " >= %d not met\n", \ test->reqname); \ return; \ } \ } static void run_one_test(const struct test *test) { enum test_res res; Debug("Running test %s\n", test->name); if (test->visual != VISUAL_NONE && !visual_set(test->visual)) { Debug("Visual %d not supported\n", test->visual); return; } TEST_REQ_MIN(bits_per_pixel, fb_var.bits_per_pixel); TEST_REQ_MIN(num_colors, idx_len); TEST_REQ_MIN(red_length, fb_var.red.length); TEST_REQ_MIN(green_length, fb_var.green.length); TEST_REQ_MIN(blue_length, fb_var.blue.length); TEST_REQ_MIN(transp_length, fb_var.transp.length); TEST_REQ_MIN(xres, fb_var.xres); TEST_REQ_MIN(yres, fb_var.yres); if (test->reqs & REQF_panning) { if (!(fb_fix.xpanstep && fb_var.xres_virtual-fb_var.xres) && !(fb_fix.ypanstep && fb_var.yres_virtual-fb_var.yres)) { Debug("No support for virtual screen and panning\n"); return; } } res = test->func(); switch (res) { case TEST_OK: Message("%s: PASSED\n", test->name); break; case TEST_FAIL: Error("%s: FAILED\n", test->name); break; case TEST_NA: Debug("Not applicable\n"); break; default: Fatal("%s returned unknown code %d\n", test->name, res); break; } } #undef TEST_REQ_MIN /* * Test run */ void test_run(const char *name) { int i; for (i = 0; all_tests[i]; i++) if (!name || !strcmp(all_tests[i]->name, name)) run_one_test(all_tests[i]); } /* * List all tests */ void test_list(const char *name, int verbose) { int i; const struct test *test; for (i = 0; all_tests[i]; i++) if (!name || !strcmp(all_tests[i]->name, name)) { test = all_tests[i]; printf("%s: %s\n", test->name, test->desc); } }