From 265d7df073f4350a44cc0b61571fdf5d85b7189a Mon Sep 17 00:00:00 2001 From: Riley Smith Date: Thu, 7 Nov 2024 11:33:12 -0800 Subject: [PATCH] add sorting lab test --- lab-3/main_test.c | 269 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) diff --git a/lab-3/main_test.c b/lab-3/main_test.c index 02dc1c4..1eb729a 100644 --- a/lab-3/main_test.c +++ b/lab-3/main_test.c @@ -312,4 +312,273 @@ UTEST(scanner, quadratic) { ASSERT_STREQ(tokens[index].p, yytext); ++index; } while (t != TOKEN_EOF); +} + +UTEST(scanner, sorting) { + struct token_st tokens[] = { + {TOKEN_IDENTIFICATION, "IDENTIFICATION"}, + {TOKEN_KEYWORD_DIVISION, "DIVISION"}, + {TOKEN_DOT, "."}, + {TOKEN_PROGRAM_ID, "PROGRAM-ID"}, + {TOKEN_DOT, "."}, + {TOKEN_IDENT, "sorting"}, + {TOKEN_DOT, "."}, + {TOKEN_KEYWORD_DATA, "DATA"}, + {TOKEN_KEYWORD_DIVISION, "DIVISION"}, + {TOKEN_DOT, "."}, + {TOKEN_WORKING_STORAGE, "WORKING-STORAGE"}, + {TOKEN_KEYWORD_SECTION, "SECTION"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "01"}, + {TOKEN_IDENT, "WS-SORT-AREA"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "05"}, + {TOKEN_IDENT, "WS-SORT-TABLE"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "10"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_PICTURE, "PIC"}, + {TOKEN_ALPHANUMERIC, "X"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "10"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_KEYWORD_OCCURS, "OCCURS"}, + {TOKEN_INTEGER, "100"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "05"}, + {TOKEN_IDENT, "WS-TEMP-ROW"}, + {TOKEN_PICTURE, "PIC"}, + {TOKEN_ALPHANUMERIC, "X"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "10"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "05"}, + {TOKEN_IDENT, "WS-ROW-MAX"}, + {TOKEN_PICTURE, "PIC"}, + {TOKEN_SIGNED_NUMERIC, "S9"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "4"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_COMPUTATION_LEVEL_0, "COMP"}, + {TOKEN_KEYWORD_VALUE, "VALUE"}, + {TOKEN_INTEGER, "100"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "05"}, + {TOKEN_IDENT, "WS-SORT-MAX"}, + {TOKEN_PICTURE, "PIC"}, + {TOKEN_SIGNED_NUMERIC, "S9"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "4"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_COMPUTATION_LEVEL_0, "COMP"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "05"}, + {TOKEN_IDENT, "WS-I"}, + {TOKEN_PICTURE, "PIC"}, + {TOKEN_SIGNED_NUMERIC, "S9"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "4"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_COMPUTATION_LEVEL_0, "COMP"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "05"}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_PICTURE, "PIC"}, + {TOKEN_SIGNED_NUMERIC, "S9"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "4"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_COMPUTATION_LEVEL_0, "COMP"}, + {TOKEN_DOT, "."}, + {TOKEN_INTEGER, "05"}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_PICTURE, "PIC"}, + {TOKEN_SIGNED_NUMERIC, "S9"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "4"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_COMPUTATION_LEVEL_0, "COMP"}, + {TOKEN_DOT, "."}, + {TOKEN_PROCEDURE, "PROCEDURE"}, + {TOKEN_KEYWORD_DIVISION, "DIVISION"}, + {TOKEN_DOT, "."}, + {TOKEN_COMMENT, "*> Initialize test data"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_STRING, "\"30\""}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "1"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_STRING, "\"10\""}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "2"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_STRING, "\"50\""}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "3"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_STRING, "\"20\""}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "4"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_STRING, "\"40\""}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_INTEGER, "5"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_INTEGER, "5"}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-MAX"}, + {TOKEN_COMMENT, "*> * Display original array"}, + {TOKEN_DISPLAY, "DISPLAY"}, + {TOKEN_STRING, "\"Original Array Contents:\""}, + {TOKEN_DISPLAY, "DISPLAY"}, + {TOKEN_STRING, "\"---------------------\""}, + {TOKEN_PERFORM, "PERFORM"}, + {TOKEN_VARYING, "VARYING"}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_KEYWORD_FROM, "FROM"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_KEYWORD_BY, "BY"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_UNTIL, "UNTIL"}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_GREATER_THAN, ">"}, + {TOKEN_IDENT, "WS-SORT-MAX"}, + {TOKEN_DISPLAY, "DISPLAY"}, + {TOKEN_STRING, "\"Element \""}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_STRING, "\": \""}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_END_PERFORM, "END-PERFORM"}, + {TOKEN_DISPLAY, "DISPLAY"}, + {TOKEN_SPACE, "SPACE"}, + {TOKEN_COMMENT, "*> * Simplified bubble sort"}, + {TOKEN_PERFORM, "PERFORM"}, + {TOKEN_VARYING, "VARYING"}, + {TOKEN_IDENT, "WS-I"}, + {TOKEN_KEYWORD_FROM, "FROM"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_KEYWORD_BY, "BY"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_UNTIL, "UNTIL"}, + {TOKEN_IDENT, "WS-I"}, + {TOKEN_GREATER_THAN, ">"}, + {TOKEN_IDENT, "WS-SORT-MAX"}, + {TOKEN_SUB, "-"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_PERFORM, "PERFORM"}, + {TOKEN_VARYING, "VARYING"}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_KEYWORD_FROM, "FROM"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_KEYWORD_BY, "BY"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_UNTIL, "UNTIL"}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_GREATER_THAN, ">"}, + {TOKEN_IDENT, "WS-SORT-MAX"}, + {TOKEN_SUB, "-"}, + {TOKEN_IDENT, "WS-I"}, + {TOKEN_IF, "IF"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_GREATER_THAN, ">"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_ADD, "+"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-TEMP-ROW"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_ADD, "+"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_MOVE, "MOVE"}, + {TOKEN_IDENT, "WS-TEMP-ROW"}, + {TOKEN_KEYWORD_TO, "TO"}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-J"}, + {TOKEN_ADD, "+"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_END_IF, "END-IF"}, + {TOKEN_END_PERFORM, "END-PERFORM"}, + {TOKEN_END_PERFORM, "END-PERFORM"}, + {TOKEN_COMMENT, "*> * Display sorted array"}, + {TOKEN_DISPLAY, "DISPLAY"}, + {TOKEN_STRING, "\"Sorted Array Contents:\""}, + {TOKEN_DISPLAY, "DISPLAY"}, + {TOKEN_STRING, "\"--------------------\""}, + {TOKEN_PERFORM, "PERFORM"}, + {TOKEN_VARYING, "VARYING"}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_KEYWORD_FROM, "FROM"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_KEYWORD_BY, "BY"}, + {TOKEN_INTEGER, "1"}, + {TOKEN_UNTIL, "UNTIL"}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_GREATER_THAN, ">"}, + {TOKEN_IDENT, "WS-SORT-MAX"}, + {TOKEN_DISPLAY, "DISPLAY"}, + {TOKEN_STRING, "\"Element \""}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_STRING, "\": \""}, + {TOKEN_IDENT, "WS-SORT-ROW"}, + {TOKEN_LEFT_PARENTHESIS, "("}, + {TOKEN_IDENT, "WS-INDEX"}, + {TOKEN_RIGHT_PARENTHESIS, ")"}, + {TOKEN_END_PERFORM, "END-PERFORM"}, + {TOKEN_DOT, "."}, + {TOKEN_STOP, "STOP"}, + {TOKEN_RUN, "RUN"}, + {TOKEN_DOT, "."}, + {TOKEN_EOF, ""}, + }; + yyin = fopen("samples/sorting-snippet.cbl", "r"); + ASSERT_TRUE(yyin); + int index = 0; + token_t t; + do { + printf("index: %d token: %d text: %s\n", index, t, yytext); + ASSERT_EQ(tokens[index].t, (t = yylex())); + ASSERT_STREQ(tokens[index].p, yytext); + ++index; + } while (t != TOKEN_EOF); } \ No newline at end of file