X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flanguage%2Flexer%2Fsegment.at;h=abbc08c8cd4b4a037b7f7155ccc799b0cdde6593;hb=c0a1222e44261bf5c75707d6203a26a0da93ead3;hp=8f82dd2e6e13f05b08dd11cfc9af43e0ca730dfe;hpb=6467d294ac5750d7ee060f5c4e0291275ece238d;p=pspp diff --git a/tests/language/lexer/segment.at b/tests/language/lexer/segment.at index 8f82dd2e6e..abbc08c8cd 100644 --- a/tests/language/lexer/segment.at +++ b/tests/language/lexer/segment.at @@ -16,7 +16,8 @@ dnl along with this program. If not, see . dnl AT_BANNER([syntax segmentation]) m4_define([PSPP_CHECK_SEGMENT], - [for strip in "" "-s"; do + [AT_CAPTURE_FILE([input]) + for strip in "" "-s"; do case $strip in # ( '') sed 's/^-//' < expout-base > expout ;; # ( -s) sed '/^-/d' < expout-base > expout ;; @@ -290,8 +291,8 @@ AT_SETUP([punctuation]) AT_KEYWORDS([segment]) AT_DATA([input], [dnl ~ & | = >= > <= < ~= <> ( ) , - + * / [[ ]] ** -~&|=>=><=<~=<>(),-+*/[[]]** -% : ; ? _ ` { } ~ +~&|=>=><=<~=<>(),-+*/[[]]**!* +% : ; ? _ ` { } ~ !* ]) AT_DATA([expout-base], [dnl punct ~ space @@ -336,6 +337,7 @@ punct / punct [[ punct ]] punct ** +macro_id !* newline \n (later) punct % space @@ -346,7 +348,8 @@ punct \_ space punct ` space punct { space punct } space -punct ~ +punct ~ space +macro_id !* -newline \n (later) - end @@ -354,7 +357,7 @@ end PSPP_CHECK_SEGMENT([-i]) AT_CLEANUP -AT_SETUP([numbers]) +AT_SETUP([positive numbers]) AT_KEYWORDS([segment]) AT_DATA([input], [dnl 0 1 01 001. 1. @@ -422,6 +425,83 @@ end ]) PSPP_CHECK_SEGMENT([-i]) AT_CLEANUP + +AT_SETUP([negative numbers]) +AT_KEYWORDS([segment]) +AT_DATA([input], [dnl + -0 -1 -01 -001. -1. + -123. /* comment 1 */ /* comment 2 */ + -.1 -0.1 -00.1 -00.10 + -5e1 -6E-1 -7e+1 -6E+01 -6e-03 + -.3E1 -.4e-1 -.5E+1 -.6e+01 -.7E-03 + -1.23e1 -45.6E-1 -78.9e+1 -99.9E+01 -11.2e-03 + -/**/1 + -. -1e -e1 -1e+ -1e- -1. +]) +AT_DATA([expout-base], [dnl +spaces _ +number -0 space +number -1 space +number -01 space +number -001. space +number -1 +end_command . +newline \n (first) + space +number -123 +end_command . space +comment /*_comment_1_*/ space +comment /*_comment_2_*/ +newline \n (first) + space +number -.1 space +number -0.1 space +number -00.1 space +number -00.10 +newline \n (later) + space +number -5e1 space +number -6E-1 space +number -7e+1 space +number -6E+01 space +number -6e-03 +newline \n (later) + space +number -.3E1 space +number -.4e-1 space +number -.5E+1 space +number -.6e+01 space +number -.7E-03 +newline \n (later) + space +number -1.23e1 space +number -45.6E-1 space +number -78.9e+1 space +number -99.9E+01 space +number -11.2e-03 +newline \n (later) + space +punct - +comment /**/ +number 1 +newline \n (later) + space +punct - +punct . space +expected_exponent -1e space +punct - +identifier e1 space +expected_exponent -1e+ space +expected_exponent -1e- space +number -1 +end_command . +-newline \n (first) +- +end +]) +PSPP_CHECK_SEGMENT([-i]) +AT_CLEANUP + AT_SETUP([strings]) AT_KEYWORDS([segment]) @@ -507,7 +587,8 @@ shbang #!_/usr/bin/pspp newline \n (first) identifier title space -unquoted_string my_title +identifier my space +identifier title end_command . newline \n (first) @@ -673,18 +754,9 @@ end PSPP_CHECK_SEGMENT([-i]) AT_CLEANUP -AT_SETUP([TITLE, SUBTITLE, FILE LABEL commands]) +AT_SETUP([FILE LABEL command]) AT_KEYWORDS([segment]) AT_DATA([input], [dnl -title/**/'Quoted string title'. -tit /* -"Quoted string on second line". -sub "Quoted string subtitle" - . - -TITL /* Not a */ quoted string title. -SUBT Not a quoted string /* subtitle - FIL label isn't quoted. FILE lab 'is quoted'. @@ -693,42 +765,6 @@ FILE /* ]) AT_DATA([expout-base], [dnl -identifier title -comment /**/ -quoted_string 'Quoted_string_title' -end_command . -newline \n (first) - -identifier tit space -comment /* -newline \n (later) - -quoted_string "Quoted_string_on_second_line" -end_command . -newline \n (first) - -identifier sub space -quoted_string "Quoted_string_subtitle" -newline \n (later) - space -end_command . -newline \n (first) - -separate_commands -newline \n (first) - -identifier TITL space -unquoted_string /*_Not_a_*/_quoted_string_title -end_command . -newline \n (first) - -identifier SUBT space -unquoted_string Not_a_quoted_string_/*_subtitle -newline \n (later) - -separate_commands -newline \n (first) - identifier FIL space identifier label space unquoted_string isn't_quoted @@ -1057,19 +1093,87 @@ AT_SETUP([DEFINE command - simple]) AT_KEYWORDS([segment]) AT_DATA([input], [dnl define !macro1() -var1 var2 var3 +var1 var2 var3 "!enddefine" !enddefine. ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 punct ( punct ) +spaces newline \n (DEFINE) -macro_body var1_var2_var3 +macro_body var1_var2_var3_"!enddefine" newline \n (DEFINE) +macro_id !enddefine +end_command . +-newline \n (first) +- +end +]) +PSPP_CHECK_SEGMENT([-i]) +AT_CLEANUP + +AT_SETUP([DEFINE command - no newline after parentheses]) +AT_KEYWORDS([segment]) +AT_DATA([input], [dnl +define !macro1() var1 var2 var3 /* !enddefine +!enddefine. +]) +AT_DATA([expout-base], [dnl +identifier define space +macro_name !macro1 +punct ( +punct ) +macro_body _var1_var2_var3_/*_!enddefine +newline \n (DEFINE) + +macro_id !enddefine +end_command . +-newline \n (first) +- +end +]) +PSPP_CHECK_SEGMENT([-i]) +AT_CLEANUP + +AT_SETUP([DEFINE command - no newline before !ENDDEFINE]) +AT_KEYWORDS([segment ENDDEFINE]) +AT_DATA([input], [dnl +define !macro1() +var1 var2 var3!enddefine. +]) +AT_DATA([expout-base], [dnl +identifier define space +macro_name !macro1 +punct ( +punct ) +spaces +newline \n (DEFINE) + +macro_body var1_var2_var3 +macro_id !enddefine +end_command . +-newline \n (first) +- +end +]) +PSPP_CHECK_SEGMENT([-i]) +AT_CLEANUP + +AT_SETUP([DEFINE command - all on one line]) +AT_KEYWORDS([segment]) +AT_DATA([input], [dnl +define !macro1()var1 var2 var3!enddefine. +]) +AT_DATA([expout-base], [dnl +identifier define space +macro_name !macro1 +punct ( +punct ) +macro_body var1_var2_var3 macro_id !enddefine end_command . -newline \n (first) @@ -1087,9 +1191,41 @@ define !macro1() ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 punct ( punct ) +spaces +newline \n (DEFINE) + +macro_id !enddefine +end_command . +-newline \n (first) +- +end +]) +PSPP_CHECK_SEGMENT([-i]) +AT_CLEANUP + +AT_SETUP([DEFINE command - blank lines]) +AT_KEYWORDS([segment]) +AT_DATA([input], [dnl +define !macro1() + + +!enddefine. +]) +AT_DATA([expout-base], [dnl +identifier define space +macro_name !macro1 +punct ( +punct ) +spaces +newline \n (DEFINE) + +macro_body +newline \n (DEFINE) + +macro_body newline \n (DEFINE) macro_id !enddefine @@ -1109,7 +1245,7 @@ define !macro1(a(), b(), c()) ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 punct ( identifier a punct ( @@ -1123,6 +1259,7 @@ identifier c punct ( punct ) punct ) +spaces newline \n (DEFINE) macro_id !enddefine @@ -1146,7 +1283,7 @@ define !macro1( ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 punct ( newline \n (later) @@ -1171,6 +1308,7 @@ punct ) newline \n (later) punct ) +spaces newline \n (DEFINE) macro_id !enddefine @@ -1194,7 +1332,7 @@ content 2 ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 newline \n (later) punct ( @@ -1206,6 +1344,7 @@ identifier z newline \n (later) punct ) +spaces newline \n (DEFINE) macro_body content_1 @@ -1231,7 +1370,7 @@ data list /x 1. ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 end_command . newline \n (first) @@ -1257,7 +1396,7 @@ data list /x 1. ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 newline \n (later) identifier x @@ -1286,7 +1425,7 @@ data list /x 1. ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 punct ( end_command . newline \n (first) @@ -1318,7 +1457,7 @@ data list /x 1. ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 end_command . newline \n (first) @@ -1344,9 +1483,10 @@ content line 2 ]) AT_DATA([expout-base], [dnl identifier define space -macro_id !macro1 +macro_name !macro1 punct ( punct ) +spaces newline \n (DEFINE) macro_body content_line_1 @@ -1503,3 +1643,16 @@ end ]) PSPP_CHECK_SEGMENT([-a]) AT_CLEANUP + +# This checks for regression against bug #61253. To see the read of +# uninitialized data, run with valgrind. The test will pass either +# way. (The bug report has a more complicated crashing case.) +AT_SETUP([input ends in carriage return]) +printf '\r' > input +AT_DATA([expout-base], [dnl +separate_commands +spaces \r +end +]) +PSPP_CHECK_SEGMENT +AT_CLEANUP