busybox/testsuite
Denys Vlasenko d1d29b4245 bc: partially rewrite parser, tests pass, ^C might be broken now
The entire control construct (if/while/for/funcdef) or {} block is
"eaten" by the corresponding parsing function, instead of maintaining
special "block flag stack" with magic bits in it, and returning to main
input loop after every inner statement (every input line, essentially).

This required moving line input deep into lexer - now zbc_lex_next()
triggers more reading when needed.

"block flag stack" is gone.

Correctness of ^C handling wasn't checked, might need fixing now.

if/else syntax is changed to match GNU bc: "else" can not be on
the next line (the rationale is that "if (1) 2" statement in interactive
mode should execute and print 2 instead of waiting for possible
"else ..." line).

This change fixes the following examples:

if (1) if (1) 1 else 2 else 3

if (0) 1 else if (1) 2

define w() { auto z; return 1; }

function                                             old     new   delta
zbc_parse_stmt_possibly_auto                           -    2232   +2232
zbc_vm_process                                        89     561    +472
zbc_lex_next                                        1982    2296    +314
bc_vm_init                                           749     757      +8
bc_parse_expr_empty_ok                              2016    2021      +5
bc_num_printNewline                                   54      51      -3
zbc_program_read                                     289     280      -9
bc_parse_free                                         47      38      -9
bc_parse_reset                                       126     113     -13
bc_parse_create                                      108      92     -16
bc_parse_push_block_flag                              47       -     -47
bc_parse_noElse                                       48       -     -48
zbc_parse_text_init                                  113      59     -54
zbc_parse_body                                       121       -    -121
zbc_parse_else                                       125       -    -125
zbc_parse_endBody                                    254       -    -254
bc_vm_run                                            421     134    -287
zbc_parse_auto                                       290       -    -290
zcommon_parse                                        476       -    -476
zbc_parse_stmt                                      1682       7   -1675
------------------------------------------------------------------------------
(add/remove: 1/7 grow/shrink: 4/8 up/down: 3031/-3427)       Total: -396 bytes
   text	   data	    bss	    dec	    hex	filename
 982586	    485	   7296	 990367	  f1c9f	busybox_old
 982138	    485	   7296	 989919	  f1adf	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16 16:10:38 +01:00
..
2016-12-12 09:26:16 +01:00
2016-12-12 09:26:16 +01:00
2016-06-20 00:36:21 +02:00
2013-11-10 22:06:06 +01:00
2017-03-23 17:35:52 +01:00
2014-01-23 14:41:53 +01:00
2016-06-19 21:54:04 +02:00
2018-04-23 10:53:18 +02:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2016-12-12 09:26:16 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2018-12-12 21:41:40 +01:00
2017-04-09 21:18:43 +02:00
2011-08-10 00:51:29 +02:00
2015-10-11 23:48:28 +02:00
2016-07-11 19:51:08 +02:00
2013-01-21 08:28:37 +01:00
2017-07-19 13:12:02 +02:00
2016-11-24 11:40:36 +01:00
2011-09-17 00:12:24 +02:00
2013-11-10 22:06:06 +01:00

To run the test suite, change to this directory and run "./runtest".  It will
run all of the test cases, and list those with unexpected outcomes.  Adding the
-v option will cause it to show expected outcomes as well.  To only run the test
cases for particular applets:

./runtest <applet1> <applet2>...

Set SKIP_KNOWN_BUGS environment variable to any non-empty value
to exclude tests which are known to fail.

Set SKIP_INTERNET_TESTS to exclude tests which require working
internet connection.


Common causes of false positives:

For busybox built against uclibc, /etc/TZ does not exist or does not match
host system timezone setting. For glibc based host systems, timezone settings
are in /etc/localtime.

LANG and LC_xxx environment variables set to non-C locale.


Developer's notes:

The test cases for an applet reside in the subdirectory of the applet name.
The name of the test case should be the assertion that is tested.
The test case should be a shell fragment that returns successfully
if the test case passes, and unsuccessfully otherwise.

If the test case relies on a certain feature, it should include the string
"FEATURE: " followed by the name of the feature in a comment.  If it is always
expected to fail, it should include the string "XFAIL" in a comment.


For the entire testsuite, the copyright is as follows:

Copyright (C) 2001, 2002  Matt Kraai

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.