Home | History | Annotate | Line # | Download | only in tests
      1 /*
      2  * This file is part of flex.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1. Redistributions of source code must retain the above copyright
      9  *    notice, this list of conditions and the following disclaimer.
     10  * 2. Redistributions in binary form must reproduce the above copyright
     11  *    notice, this list of conditions and the following disclaimer in the
     12  *    documentation and/or other materials provided with the distribution.
     13  *
     14  * Neither the name of the University nor the names of its contributors
     15  * may be used to endorse or promote products derived from this software
     16  * without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
     19  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
     20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     21  * PURPOSE.
     22  */
     23 
     24 %{
     25 /* The goal of this test is to verify that we are getting the counter-intuitive
     26  * posix behavior of the repeat operator `{}'.
     27  *
     28  *  ab{3} -  In traditional flex, this matches "abbb".
     29  *           In posix, this matches "ababab".
     30  */
     31 #include <stdio.h>
     32 #include <stdlib.h>
     33 #include "config.h"
     34 
     35 #define NUM_TESTS 1
     36 char * tests[NUM_TESTS] =  { "ababab"};
     37 int main(void);
     38 
     39 int tests_ok[NUM_TESTS] =  { 0 };
     40 
     41 %}
     42 
     43 %option 8bit prefix="test"
     44 %option nounput nomain noyywrap noinput
     45 %option warn posix-compat
     46 
     47 
     48 %%
     49 
     50 ab{3}    tests_ok[0] = 1; return 0;
     51 .|\n     return 0;
     52 
     53 %%
     54 
     55 
     56 int main (void)
     57 {
     58     YY_BUFFER_STATE state;
     59     int i;
     60 
     61     yyin = stdin;
     62     yyout = stdout;
     63 
     64     /* Run the tests */
     65     for (i=0; i < NUM_TESTS; i++){
     66         printf("Testing: test_scan_string(%s): ", tests[i]);
     67         state = test_scan_string(tests[i]);
     68         testlex();
     69         yy_delete_buffer(state);
     70         printf("... %s\n", tests_ok[i] ? "OK" : "FAILED");
     71     }
     72 
     73     for (i=0; i < NUM_TESTS; i++)
     74         if (!tests_ok[i])
     75             exit(1);
     76 
     77     printf("TEST RETURNING OK.\n");
     78     return 0;
     79 }
     80