X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flanguage%2Flexer%2Fsegment-test.c;h=5977e8fce69236c868d4035f14515350d385afaf;hb=0891406f7c1039af8c769b8069691246566fd894;hp=62db4814266395b84315857503fd4bfbf33fdc9d;hpb=369c24f1d085a41ec274ebae5fc198fcee567653;p=pspp diff --git a/tests/language/lexer/segment-test.c b/tests/language/lexer/segment-test.c index 62db481426..5977e8fce6 100644 --- a/tests/language/lexer/segment-test.c +++ b/tests/language/lexer/segment-test.c @@ -70,6 +70,8 @@ main (int argc, char *argv[]) set_program_name (argv[0]); file_name = parse_options (argc, argv); + setvbuf (stdout, NULL, _IONBF, 0); + /* Read from stdin into 'input'. Ensure that 'input' ends in a new-line followed by a null byte. */ input = (!strcmp (file_name, "-") @@ -106,8 +108,7 @@ main (int argc, char *argv[]) static void check_segmentation (const char *input, size_t length, bool print_segments) { - struct segmenter s; - segmenter_init (&s, mode); + struct segmenter s = segmenter_init (mode, false); size_t line_number = 1; size_t line_offset = 0; @@ -154,15 +155,19 @@ check_segmentation (const char *input, size_t length, bool print_segments) offset); } assert (offset + n <= length); + assert (offset <= length); if (type == SEG_NEWLINE) { - assert ((n == 1 && input[offset] == '\n') - || (n == 2 - && input[offset] == '\r' && input[offset + 1] == '\n')); + if (n == 1 ? input[offset] != '\n' + : n == 2 ? input[offset] != '\r' || input[offset + 1] != '\n' + : false) + error (EXIT_FAILURE, 0, "NEWLINE segment at offset %zu contains " + "non-newline content \"%.*s\"", offset, n, &input[offset]); } - else - assert (memchr (&input[offset], '\n', n) == NULL); + else if (memchr (&input[offset], '\n', n)) + error (EXIT_FAILURE, 0, "%s segment \"%.*s\" contains new-line", + segment_type_to_string (type), n, &input[offset]); if (!print_segments) { @@ -197,7 +202,7 @@ check_segmentation (const char *input, size_t length, bool print_segments) for (i = MIN (15, strlen (type_name)); i < 16; i++) putchar (' '); - for (i = 0; i < n; ) + for (i = 0; i < n;) { const uint8_t *u_input = CHAR_CAST (const uint8_t *, input); ucs4_t uc; @@ -274,6 +279,7 @@ check_segmentation (const char *input, size_t length, bool print_segments) prompt = segmenter_get_prompt (&s); printf (" (%s)\n", prompt_style_to_string (prompt)); } + fflush (stdout); } while (type != SEG_END);