diff options
author | thurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0> | 2007-01-21 22:58:22 +0000 |
---|---|---|
committer | thurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0> | 2007-01-21 22:58:22 +0000 |
commit | 12056158053532946b53b6249cb0e6cfd4580051 (patch) | |
tree | 9b5449ef42e829f98bf7a6c6e0554b88d4ab9132 /test/call1.rl | |
download | ragel-12056158053532946b53b6249cb0e6cfd4580051.tar.gz ragel-12056158053532946b53b6249cb0e6cfd4580051.tar.bz2 ragel-12056158053532946b53b6249cb0e6cfd4580051.zip |
Import from my private repository. Snapshot after version 5.16, immediately
following the rewrite of the parsers. Repository revision number 3961.
git-svn-id: http://svn.complang.org/ragel/trunk@2 052ea7fc-9027-0410-9066-f65837a77df0
Diffstat (limited to 'test/call1.rl')
-rw-r--r-- | test/call1.rl | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/test/call1.rl b/test/call1.rl new file mode 100644 index 0000000..24a362f --- /dev/null +++ b/test/call1.rl @@ -0,0 +1,103 @@ +/* + * @LANG: c + */ + +#include <stdio.h> +#include <string.h> + +int num = 0; + +struct test +{ + int cs, top, stack[32]; +}; + +%%{ + machine test; + access fsm->; + + action check_num { + if ( num & 1 ) + fcall *fentry(odd); + else + fcall even; + } + + # Test call and return functionality. + even := 'even' any @{fhold; fret;}; + odd := 'odd' any @{fhold; fret;}; + num = [0-9]+ ${ num = num * 10 + (fc - '0'); }; + even_odd = num ' ' @check_num "\n"; + + # Test calls in out actions. + fail := !(any*); + out_acts = 'OA ok\n' | + 'OA error1\n' | + 'OA error2\n'; + + main := even_odd | out_acts; +}%% + +%% write data; + +void test_init( struct test *fsm ) +{ + num = 0; + %% write init; +} + +void test_execute( struct test *fsm, const char *data, int len ) +{ + const char *p = data; + const char *pe = data+len; + + %% write exec; +} + +int test_finish( struct test *fsm ) +{ + %% write eof; + + if ( fsm->cs == test_error ) + return -1; + if ( fsm->cs >= test_first_final ) + return 1; + return 0; +} + +#define BUFSIZE 1024 + +void test( char *buf ) +{ + struct test test; + test_init( &test ); + test_execute( &test, buf, strlen(buf) ); + if ( test_finish( &test ) > 0 ) + printf( "ACCEPT\n" ); + else + printf( "FAIL\n" ); +} + +int main() +{ + test( "78 even\n" ); + test( "89 odd\n" ); + test( "1 even\n" ); + test( "0 odd\n" ); + test( "OA ok\n" ); + test( "OA error1\n" ); + test( "OA error2\n" ); + + return 0; +} + + +#ifdef _____OUTPUT_____ +ACCEPT +ACCEPT +FAIL +FAIL +ACCEPT +ACCEPT +ACCEPT +#endif |