X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fhashtest.c;h=70d622874da90bc24eee5c93ed85605f054b2a29;hp=85248c81665aad92f70c71e61d7ad624c82a547c;hb=HEAD;hpb=772f879d17117c5b766022f28099e341ebea825b;ds=sidebyside diff --git a/test/hashtest.c b/test/hashtest.c index 85248c81..be79c0e1 100644 --- a/test/hashtest.c +++ b/test/hashtest.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright 2019-2020,2022 Thomas E. Dickey * + * Copyright 1998-2013,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -30,17 +31,9 @@ * * Generate timing statistics for vertical-motion optimization. * - * $Id: hashtest.c,v 1.27 2007/07/21 17:45:09 tom Exp $ + * $Id: hashtest.c,v 1.39 2022/12/04 00:40:11 tom Exp $ */ -#ifdef TRACE -#define Trace(p) _tracef p -#define USE_TRACE 1 -#else -#define Trace(p) /* nothing */ -#define USE_TRACE 0 -#endif - #include #define LO_CHAR ' ' @@ -62,7 +55,7 @@ cleanup(void) endwin(); } -static RETSIGTYPE +static void finish(int sig GCC_UNUSED) { cleanup(); @@ -90,20 +83,21 @@ genlines(int base) move(0, 0); for (i = 0; i < head_lines; i++) for (j = 0; j < COLS; j++) - addch(UChar((j % 8 == 0) ? ('A' + j / 8) : '-')); + AddCh(UChar((j % 8 == 0) ? ('A' + j / 8) : '-')); move(head_lines, 0); for (i = head_lines; i < LINES - foot_lines; i++) { - chtype c = (base - LO_CHAR + i) % (HI_CHAR - LO_CHAR + 1) + LO_CHAR; + chtype c = (chtype) ((base - LO_CHAR + i) % (HI_CHAR - LO_CHAR + 1) + + LO_CHAR); int hi = (extend_corner || (i < LINES - 1)) ? COLS : COLS - 1; for (j = 0; j < hi; j++) - addch(c); + AddCh(c); } for (i = LINES - foot_lines; i < LINES; i++) { move(i, 0); for (j = 0; j < (extend_corner ? COLS : COLS - 1); j++) - addch(UChar((j % 8 == 0) ? ('A' + j / 8) : '-')); + AddCh(UChar((j % 8 == 0) ? ('A' + j / 8) : '-')); } scrollok(stdscr, TRUE); @@ -148,61 +142,66 @@ run_test(bool optimized GCC_UNUSED) #endif if (reverse_loops) - for (ch = hi; ch >= lo; ch--) + for (ch = (char) hi; ch >= lo; ch--) one_cycle(ch); else - for (ch = lo; ch <= hi; ch++) + for (ch = (char) lo; ch <= hi; ch++) one_cycle(ch); } static void -usage(void) +usage(int ok) { static const char *const tbl[] = { "Usage: hashtest [options]" ,"" + ,USAGE_COMMON ,"Options:" - ," -c continuous (don't reset between refresh's)" - ," -f num leave 'num' lines constant for footer" - ," -h num leave 'num' lines constant for header" - ," -l num repeat test 'num' times" - ," -n test the normal optimizer" - ," -o test the hashed optimizer" - ," -r reverse the loops" - ," -s single-step" - ," -x assume lower-right corner extension" + ," -c continuous (don't reset between refresh's)" + ," -F num leave 'num' lines constant for footer" + ," -H num leave 'num' lines constant for header" + ," -l num repeat test 'num' times" + ," -n test the normal optimizer" + ," -o test the hashed optimizer" + ," -r reverse the loops" + ," -s single-step" + ," -x assume lower-right corner extension" }; size_t n; for (n = 0; n < SIZEOF(tbl); n++) fprintf(stderr, "%s\n", tbl[n]); - ExitProgram(EXIT_FAILURE); + ExitProgram(ok ? EXIT_SUCCESS : EXIT_FAILURE); } +/* *INDENT-OFF* */ +VERSION_COMMON() +/* *INDENT-ON* */ int main(int argc, char *argv[]) { - int c; + int ch; int test_loops = 1; int test_normal = FALSE; int test_optimize = FALSE; setlocale(LC_ALL, ""); - while ((c = getopt(argc, argv, "cf:h:l:norsx")) != -1) { - switch (c) { + while ((ch = getopt(argc, argv, OPTS_COMMON "cF:H:l:norsx")) != -1) { + switch (ch) { case 'c': continuous = TRUE; break; - case 'f': + case 'F': foot_lines = atoi(optarg); break; - case 'h': + case 'H': head_lines = atoi(optarg); break; case 'l': test_loops = atoi(optarg); + assert(test_loops >= 0); break; case 'n': test_normal = TRUE; @@ -219,8 +218,12 @@ main(int argc, char *argv[]) case 'x': extend_corner = TRUE; break; + case OPTS_VERSION: + show_version(argv); + ExitProgram(EXIT_SUCCESS); default: - usage(); + usage(ch == OPTS_USAGE); + /* NOTREACHED */ } } if (!test_normal && !test_optimize) { @@ -228,12 +231,10 @@ main(int argc, char *argv[]) test_optimize = TRUE; } #if USE_TRACE - trace(TRACE_TIMES); + curses_trace(TRACE_TIMES); #endif - CATCHALL(finish); /* arrange interrupts to terminate */ - - (void) initscr(); /* initialize the curses library */ + InitAndCatch(initscr(), finish); keypad(stdscr, TRUE); /* enable keyboard mapping */ (void) nonl(); /* tell curses not to do NL->CR/NL on output */ (void) cbreak(); /* take input chars one at a time, no wait for \n */