# regression tests for the iffe command
TEST 01 'command line basics'
EXEC -r -v - hdr stdio
OUTPUT - $'/* : : generated by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes'
EXEC -r -v -s bsh - hdr stdio
EXEC -r -v - hdr stdio,limits
OUTPUT - $'/* : : generated by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#define _hdr_limits 1 /* #include <limits.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is limits.h a header ... yes'
EXEC -r -v -s bsh - hdr stdio,limits
EXEC -r -v - hdr,lib no_foo_bar,no_bar_foo stdio.h
OUTPUT - $'/* : : generated by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is no_foo_bar.h a header ... no
iffe: test: is no_bar_foo.h a header ... no
iffe: test: is no_foo_bar a library function ... no
iffe: test: is no_bar_foo a library function ... no'
EXEC -r -v -s bsh - hdr,lib no_foo_bar,no_bar_foo stdio.h
EXEC -r -v - hdr no_foo_bar,no_bar_foo stdio.h : lib no_foo_bar,no_bar_foo stdio.h
EXEC -r -v -s bsh - hdr no_foo_bar,no_bar_foo stdio.h : lib no_foo_bar,no_bar_foo stdio.h
TEST 02 'file input basics'
EXEC -r -v - t1.iffe
INPUT t1.iffe $'hdr stdio'
OUTPUT - $'/* : : generated from t1.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes'
EXEC -r -v -s bsh - t1.iffe
EXEC -r -v - t2.iffe
INPUT t2.iffe $'hdr stdio,limits'
OUTPUT - $'/* : : generated from t2.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#define _hdr_limits 1 /* #include <limits.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is limits.h a header ... yes'
EXEC -r -v -s bsh - t2.iffe
EXEC -r -v - t3.iffe
INPUT t3.iffe $'hdr,lib no_foo_bar,no_bar_foo stdio.h'
OUTPUT - $'/* : : generated from t3.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is no_foo_bar.h a header ... no
iffe: test: is no_bar_foo.h a header ... no
iffe: test: is no_foo_bar a library function ... no
iffe: test: is no_bar_foo a library function ... no'
EXEC -r -v -s bsh - t3.iffe
EXEC -r -v - t3.iffe
INPUT t3.iffe $'hdr no_foo_bar,no_bar_foo stdio.h
lib no_foo_bar,no_bar_foo stdio.h'
EXEC -r -v -s bsh - t3.iffe
TEST 03 'nested if'
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if hdr stdio
if lib open {
HIT 1
}
elif lib close {
HIT 2
}
else {
HIT 3
}
endif
elif hdr limits {
HIT 4
}
else {
HIT 5
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#define _lib_open 1 /* open() in default lib(s) */
HIT 1
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is open a library function ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if hdr _XXX_stdio
if lib open {
HIT 1
}
elif lib close {
HIT 2
}
else {
HIT 3
}
endif
elif hdr limits {
HIT 4
}
else {
HIT 5
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_limits 1 /* #include <limits.h> ok */
HIT 4
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is _XXX_stdio.h a header ... no
iffe: test: is limits.h a header ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if hdr _XXX_stdio
if lib open {
HIT 1
}
elif lib close {
HIT 2
}
else {
HIT 3
}
endif
elif hdr _XXX_limits {
HIT 4
}
else {
HIT 5
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
HIT 5
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is _XXX_stdio.h a header ... no
iffe: test: is _XXX_limits.h a header ... no'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if hdr stdio
if lib _XXX_open {
HIT 1
}
elif lib close {
HIT 2
}
else {
HIT 3
}
endif
elif hdr limits {
HIT 4
}
else {
HIT 5
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#define _lib_close 1 /* close() in default lib(s) */
HIT 2
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is _XXX_open a library function ... no
iffe: test: is close a library function ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if hdr stdio
if lib _XXX_open {
HIT 1
}
elif lib _XXX_close {
HIT 2
}
else {
HIT 3
}
endif
elif hdr limits {
HIT 4
}
else {
HIT 5
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
HIT 3
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is _XXX_open a library function ... no
iffe: test: is _XXX_close a library function ... no'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if mem stat.st_atime sys/types.h sys/stat.h {
#define ATIME 1
}
elif mem stat.st_ctime sys/types.h sys/stat.h {
#define CTIME 1
}
elif mem stat.st_mtime sys/types.h sys/stat.h {
#define MTIME 1
}
else pass{ no_stat_time=1 }end {
#define NOTIME 1
}
endif
if ( !no_stat_time ) {
#define YESTIME 1
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _sys_stat 1 /* #include <sys/stat.h> ok */
#define _mem_st_atime_stat 1 /* st_atime is a member of struct stat */
#define ATIME 1
#define YESTIME 1
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is sys/stat.h a header ... yes
iffe: test: is stat a type or typedef ... no
iffe: test: is st_atime a member of struct stat ... yes
iffe: test: is ( !no_stat_time ) true ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if mem foo_stat.st_atime sys/types.h sys/stat.h {
#define ATIME 1
}
elif mem stat.st_ctime sys/types.h sys/stat.h {
#define CTIME 1
}
elif mem stat.st_mtime sys/types.h sys/stat.h {
#define MTIME 1
}
else pass{ no_stat_time=1 }end {
#define NOTIME 1
}
endif
if ( !no_stat_time ) {
#define YESTIME 1
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _sys_stat 1 /* #include <sys/stat.h> ok */
#define _mem_st_ctime_stat 1 /* st_ctime is a member of struct stat */
#define CTIME 1
#define YESTIME 1
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is sys/stat.h a header ... yes
iffe: test: is foo_stat a type or typedef ... no
iffe: test: is st_atime a member of struct foo_stat ... no
iffe: test: is stat a type or typedef ... no
iffe: test: is st_ctime a member of struct stat ... yes
iffe: test: is ( !no_stat_time ) true ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if mem foo_stat.st_atime sys/types.h sys/stat.h {
#define ATIME 1
}
elif mem foo_stat.st_ctime sys/types.h sys/stat.h {
#define CTIME 1
}
elif mem stat.st_mtime sys/types.h sys/stat.h {
#define MTIME 1
}
else pass{ no_stat_time=1 }end {
#define NOTIME 1
}
endif
if ( !no_stat_time ) {
#define YESTIME 1
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _sys_stat 1 /* #include <sys/stat.h> ok */
#define _mem_st_mtime_stat 1 /* st_mtime is a member of struct stat */
#define MTIME 1
#define YESTIME 1
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is sys/stat.h a header ... yes
iffe: test: is foo_stat a type or typedef ... no
iffe: test: is st_atime a member of struct foo_stat ... no
iffe: test: is st_ctime a member of struct foo_stat ... no
iffe: test: is stat a type or typedef ... no
iffe: test: is st_mtime a member of struct stat ... yes
iffe: test: is ( !no_stat_time ) true ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff ifelse
if mem foo_stat.st_atime sys/types.h sys/stat.h {
#define ATIME 1
}
elif mem foo_stat.st_ctime sys/types.h sys/stat.h {
#define CTIME 1
}
elif mem foo_stat.st_mtime sys/types.h sys/stat.h {
#define MTIME 1
}
else pass{ no_stat_time=1 }end {
#define NOTIME 1
}
endif
if ( !no_stat_time ) {
#define YESTIME 1
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _ifelse_H
#define _ifelse_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _sys_stat 1 /* #include <sys/stat.h> ok */
#define NOTIME 1
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is sys/stat.h a header ... yes
iffe: test: is foo_stat a type or typedef ... no
iffe: test: is st_atime a member of struct foo_stat ... no
iffe: test: is st_ctime a member of struct foo_stat ... no
iffe: test: is st_mtime a member of struct foo_stat ... no
iffe: test: is ( !no_stat_time ) true ... no'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'set explicit
iff previous
hdr stdio
if hdr stdio {
OK
}
else {
OK
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _previous_H
#define _previous_H 1
#define _hdr_stdio 1 /* #include <stdio.h> ok */
OK
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes'
EXEC -r -v -s bsh - t.iffe
TEST 04 'test variable/macro override'
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
HAVE_STDIO = hdr stdio'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define HAVE_STDIO 1 /* #include <stdio.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if hdr - stdio {
#define HIT 1
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define HIT 1
#endif'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if - hdr stdio {
#define HIT 1
}
endif'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if ? hdr stdio {
#define HIT 1
}
endif'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if hdr - stdio {
#define HIT 1
}
endif'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if HAVE_STDIO = hdr stdio {
#define HIT 1
}
endif
if ( HAVE_STDIO ) {
#define TOO ALSO
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define HAVE_STDIO 1 /* #include <stdio.h> ok */
#define HIT 1
#define TOO ALSO
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is ( HAVE_STDIO ) true ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if HAVE_STDIO = hdr stdio {
#define HIT 1
}
endif
exp ALSO HAVE_STDIO'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define HAVE_STDIO 1 /* #include <stdio.h> ok */
#define HIT 1
#define ALSO 1 /* HAVE_STDIO is true */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is HAVE_STDIO true ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if HAVE_STDIO = hdr stdio {
#define HIT 1
}
endif
ALSO = ( HAVE_STDIO )'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define HAVE_STDIO 1 /* #include <stdio.h> ok */
#define HIT 1
#define ALSO 1 /* ( HAVE_STDIO ) is true */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is ( HAVE_STDIO ) true ... yes'
EXEC -r -v -s bsh - t.iffe
TEST 05 'test code option sequence'
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
tst seq - -DA=1 - -DB=1 note{ long int type }end compile{
#if A == 1 && B == 0
#define t long
#else
#define t error
#endif
t n = 0;
}end'
OUTPUT - '/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _seq 1 /* long int type */
#endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
tst seq -DG=1 - -DN=1 - -DN=2 note{ long int type }end compile{
#if G == 1 && N == 1
#define t long
#else
#define t error
#endif
t n = 0;
}end'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
tst seq - -DA=1 - -DB=1 note{ long int type }end compile{
#if A == 0 && B == 1
#define t long
#else
#define t error
#endif
t n = 0;
}end'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ...
iffe: test: long int type ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
tst seq -DG=1 - -DN=1 - -DN=2 note{ long int type }end compile{
#if G == 1 && N == 2
#define t long
#else
#define t error
#endif
t n = 0;
}end'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
tst seq - -DA=1 - -DB=1 note{ long int type }end compile{
#if A == 0 && B == 0
#define t long
#else
#define t error
#endif
t n = 0;
}end'
OUTPUT - '/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ...
iffe: test: long int type ... no'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
tst seq -DG=1 - -DN=1 - -DN=2 note{ long int type }end compile{
#if G == 1 && N == 0
#define t long
#else
#define t error
#endif
t n = 0;
}end'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst - -DA=1 - -DB=1 note{ long int type }end compile{
#if A == 1 && B == 0
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
OUTPUT - '/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
/* long int type */
#define seq 1
#endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst -DG=1 - -DN=1 - -DN=2 note{ long int type }end compile{
#if G == 1 && N == 1
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst - -DA=1 - -DB=1 note{ long int type }end compile{
#if A == 0 && B == 1
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ...
iffe: test: long int type ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst -DG=1 - -DN=1 - -DN=2 note{ long int type }end compile{
#if G == 1 && N == 2
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst - -DA=1 - -DB=1 note{ long int type }end compile{
#if A == 0 && B == 0
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
OUTPUT - '/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ...
iffe: test: long int type ... no'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst -DG=1 - -DN=1 - -DN=2 note{ long int type }end compile{
#if G == 1 && N == 0
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst - -DN=1 - -DN=2 - -DN=3 note{ long int type }end compile{
#if N == 1
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
OUTPUT - '/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
/* long int type */
#define seq 1
#endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst - -DN=1 - -DN=2 - -DN=3 note{ long int type }end compile{
#if N == 2
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ...
iffe: test: long int type ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst - -DN=1 - -DN=2 - -DN=3 note{ long int type }end compile{
#if N == 3
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ...
iffe: test: long int type ...
iffe: test: long int type ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v - t.iffe
INPUT t.iffe $'iff macro
if tst - -DN=1 - -DN=2 - -DN=3 note{ long int type }end compile{
#if N == 0
#define t long
#else
#define t error
#endif
t n = 0;
}end {
#define seq 1
}
endif'
OUTPUT - '/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _macro_H
#define _macro_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#endif'
ERROR - 'iffe: test: is sys/types.h a header ... yes
iffe: test: long int type ...
iffe: test: long int type ...
iffe: test: long int type ... no'
EXEC -r -v -s bsh - t.iffe
TEST 06 'block side effects'
EXEC -r - t.iffe
INPUT t.iffe $'iff -
tst output{
int
main()
{
printf("HIT\\n");
return 0;
}
}end'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#define _sys_types 1 /* #include <sys/types.h> ok */
HIT'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'iff
tst - output{
int
main()
{
printf("HIT\\n");
return 0;
}
}end'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'iff
tst - output{
int
main()
{
printf("HIT\\n");
return 1;
}
}end'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#define _sys_types 1 /* #include <sys/types.h> ok */'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'iff
tst - nooutput{
int
main()
{
printf("HIT\\n");
return 1;
}
}end'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#define _sys_types 1 /* #include <sys/types.h> ok */
HIT'
EXEC -r -s bsh - t.iffe
TEST 07 'diagnostics'
EXEC -r - t.iffe
INPUT t.iffe $'tst foo'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#endif'
ERROR - $'iffe: t.iffe:1: tst: unknown feature test'
EXIT 1
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'if (1)'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */'
ERROR - $'iffe: t.iffe:1: missing endif'
EXIT 1
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'if'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */'
ERROR - $'iffe: t.iffe:1: missing endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'endif'
ERROR - $'iffe: t.iffe:1: endif: no matching if'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'if {
}end'
ERROR - $'iffe: t.iffe:2: missing }'
EXEC -r -s bsh - t.iffe
TEST 08 'negation consternation'
EXEC -r - t.iffe
INPUT t.iffe $'npt fopen,fooon stdio.h'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdlib 1 /* #include <stdlib.h> ok */
#define _hdr_unistd 1 /* #include <unistd.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#define _npt_fooon 1 /* fooon() needs a prototype */
#endif'
EXEC -r -u - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdlib 1 /* #include <stdlib.h> ok */
#define _hdr_unistd 1 /* #include <unistd.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#undef _npt_fopen /* fopen() does not need a prototype */
#define _npt_fooon 1 /* fooon() needs a prototype */
#endif'
EXEC -r -a - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdlib 1 /* #include <stdlib.h> ok */
#define _hdr_unistd 1 /* #include <unistd.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#define _npt_fopen 0 /* fopen() does not need a prototype */
#define _npt_fooon 1 /* fooon() needs a prototype */
#endif'
EXEC -r -C - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define HAVE_SYS_TYPES_H 1 /* #include <sys/types.h> ok */
#define HAVE_STDLIB_H 1 /* #include <stdlib.h> ok */
#define HAVE_UNISTD_H 1 /* #include <unistd.h> ok */
#define HAVE_STDIO_H 1 /* #include <stdio.h> ok */
#define HAVE_FOPEN_DECL 1 /* fopen() does not need a prototype */
#undef HAVE_FOOON_DECL /* fooon() needs a prototype */
#endif'
EXEC -r - t.iffe
INPUT t.iffe $'NEED_FOPEN = npt fopen stdio.h
HAVE_FOPEN = ! npt fopen stdio.h
NEED_FOOON = npt fooon stdio.h
HAVE_FOOON = ! npt fooon stdio.h'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdlib 1 /* #include <stdlib.h> ok */
#define _hdr_unistd 1 /* #include <unistd.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#define HAVE_FOPEN 1 /* fopen() does not need a prototype */
#define NEED_FOOON 1 /* fooon() needs a prototype */
#endif'
EXEC -r -u - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_stdlib 1 /* #include <stdlib.h> ok */
#define _hdr_unistd 1 /* #include <unistd.h> ok */
#define _hdr_stdio 1 /* #include <stdio.h> ok */
#undef NEED_FOPEN /* fopen() does not need a prototype */
#define HAVE_FOPEN 1 /* fopen() does not need a prototype */
#define NEED_FOOON 1 /* fooon() needs a prototype */
#undef HAVE_FOOON /* fooon() needs a prototype */
#endif'
EXEC -r -C - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define HAVE_SYS_TYPES_H 1 /* #include <sys/types.h> ok */
#define HAVE_STDLIB_H 1 /* #include <stdlib.h> ok */
#define HAVE_UNISTD_H 1 /* #include <unistd.h> ok */
#define HAVE_STDIO_H 1 /* #include <stdio.h> ok */
#undef NEED_FOPEN /* fopen() does not need a prototype */
#define HAVE_FOPEN 1 /* fopen() does not need a prototype */
#define NEED_FOOON 1 /* fooon() needs a prototype */
#undef HAVE_FOOON /* fooon() needs a prototype */
#endif'
TEST 09 'exp vs. if'
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_false {
ONE
}
exp _tst_hit !_tst_hit&_tst_true pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&_tst_true {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#define _tst_hit 1 /* !_tst_false is true */
/* !_tst_false */
ONE
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_true {
ONE
}
exp _tst_hit !_tst_hit&_tst_true pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&_tst_true {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#define _tst_hit 1 /* !_tst_hit&_tst_true is true */
TWO 0 1
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_true {
ONE
}
exp _tst_hit !_tst_hit&_tst_false pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&_tst_true {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#define _tst_hit 1 /* !_tst_hit&_tst_true is true */
/* !_tst_hit&_tst_true */
THREE
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_true {
ONE
}
exp _tst_hit !_tst_hit&_tst_false pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&_tst_false {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_false {
ONE
}
exp _tst_hit !_tst_hit&&_tst_true pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&&_tst_true {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#define _tst_hit 1 /* !_tst_false is true */
/* !_tst_false */
ONE
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_true {
ONE
}
exp _tst_hit !_tst_hit&&_tst_true pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&&_tst_true {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#define _tst_hit 1 /* !_tst_hit&&_tst_true is true */
TWO 0 1
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_true {
ONE
}
exp _tst_hit !_tst_hit&&_tst_false pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&&_tst_true {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#define _tst_hit 1 /* !_tst_hit&&_tst_true is true */
/* !_tst_hit&&_tst_true */
THREE
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
exp _tst_hit !_tst_true {
ONE
}
exp _tst_hit !_tst_hit&&_tst_false pass{
cat <<!
TWO $_tst_false $_tst_true
!
}end
exp _tst_hit !_tst_hit&&_tst_false {
THREE
}'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
if ( ! _tst_false ) {
ONE
}
elif ( _tst_true ) pass{
cat <<!
TWO
!
}end
else {
THREE
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
ONE
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
if ( ! _tst_true ) {
ONE
}
elif ( _tst_true ) pass{
cat <<!
TWO
!
}end
else {
THREE
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
TWO
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
if ( ! _tst_true ) {
ONE
}
elif ( _tst_false ) pass{
cat <<!
TWO
!
}end
else {
THREE
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
THREE
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
if ( ! _tst_true ) yes{
typedef struct
{
int dd_fd; /* file descriptor */
} DIR;
}end
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
if ( ! _tst_true ) {
typedef struct
{
int dd_fd; /* file descriptor */
} DIR;
}
else {
OK
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _tst_true 1 /* ( 1 ) is true */
OK
#endif'
EXEC -r -s bsh - t.iffe
EXEC -r - t.iffe
INPUT t.iffe $'_tst_false = ( 0 )
_tst_true = ( 1 )
if ( ! _tst_true ) {
typedef struct
{
int dd_fd; /* file descriptor */
};
}
else {
OK
}
endif'
EXEC -r -s bsh - t.iffe
TEST 10 'exp details'
EXEC -r -v - t.iffe
INPUT t.iffe $'_str = "string"
_hdr = <header>
_aaa = ( 0 )
_zzz = ( 1 )
( _str )
( ! _str )
( _hdr )
( ! _hdr )
( _aaa )
( ! _aaa )
( _zzz )
( ! _zzz )'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _str "string"
#define _hdr <header>
#define _zzz 1 /* ( 1 ) is true */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is ( 0 ) true ... no
iffe: test: is ( 1 ) true ... yes
iffe: test: is ( _str ) true ... yes
iffe: test: is ( ! _str ) true ... no
iffe: test: is ( _hdr ) true ... yes
iffe: test: is ( ! _hdr ) true ... no
iffe: test: is ( _aaa ) true ... no
iffe: test: is ( ! _aaa ) true ... yes
iffe: test: is ( _zzz ) true ... yes
iffe: test: is ( ! _zzz ) true ... no'
EXEC -r -v -s bsh - t.iffe
TEST 11 'set [no]define'
EXEC -r -v - t.iffe
INPUT t.iffe $'set nodefine
mem stat.st_mtime sys/types.h sys/stat.h
set define
mem stat.st_mode sys/types.h sys/stat.h
if ( _mem_st_mtime_stat ) {
1
}
endif
if ( _mem_st_mode_stat ) {
2
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _mem_st_mode_stat 1 /* st_mode is a member of struct stat */
1
2
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is sys/stat.h a header ... yes
iffe: test: is stat a type or typedef ... no
iffe: test: is st_mtime a member of struct stat ... yes
iffe: test: is st_mode a member of struct stat ... yes
iffe: test: is ( _mem_st_mtime_stat ) true ... yes
iffe: test: is ( _mem_st_mode_stat ) true ... yes'
EXEC -r -v -s bsh - t.iffe
TEST 12 'non-opaque mem'
EXEC -r -v - mem OPAQUE -I. t.h
INPUT t.h $'typedef struct opaque OPAQUE;'
OUTPUT - $'/* : : generated by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_t 1 /* #include <t.h> ok */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is t.h a header ... yes
iffe: test: is OPAQUE a type or typedef ... no
iffe: test: is struct OPAQUE a non-opaque struct ... no'
EXEC -r -v - mem NONOPAQUE -I. t.h
INPUT t.h $'struct nonopaque { int pad; };
typedef struct nonopaque NONOPAQUE;'
OUTPUT - $'/* : : generated by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _hdr_t 1 /* #include <t.h> ok */
#define _mem_NONOPAQUE 1 /* NONOPAQUE is a non-opaque struct */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is t.h a header ... yes
iffe: test: is NONOPAQUE a type or typedef ... yes
iffe: test: is NONOPAQUE a non-opaque struct ... yes'
TEST 13 'key states'
EXEC -r -v - t.iffe
INPUT t.iffe $'key int
key const =
key foo
key bar =
key aha = huh = int
key chr = char = int'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _key_int 1 /* int is a reserved keyword */
#define _key_const 1 /* const is a reserved keyword */
#define bar /* default for reserved keyword bar */
#define aha int /* default for reserved keyword aha */
#define _key_char 1 /* char is a reserved keyword */
#define chr char /* alternate for reserved keyword chr */
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is int a reserved keyword ... yes
iffe: test: is const a reserved keyword ... yes
iffe: test: is foo a reserved keyword ... no
iffe: test: is bar a reserved keyword ... no
iffe: test: is aha a reserved keyword ... no
iffe: test: is huh a reserved keyword ... no
iffe: test: is chr a reserved keyword ... no
iffe: test: is char a reserved keyword ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -u -r -v - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _key_int 1 /* int is a reserved keyword */
#define _key_const 1 /* const is a reserved keyword */
#undef _key_foo /* foo is not a reserved keyword */
#undef _key_bar /* bar is not a reserved keyword */
#define bar /* default for reserved keyword bar */
#undef _key_huh /* huh is not a reserved keyword */
#define aha int /* default for reserved keyword aha */
#define _key_char 1 /* char is a reserved keyword */
#define chr char /* alternate for reserved keyword chr */
#endif'
EXEC -u -r -v -s bsh - t.iffe
EXEC -a -r -v - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define _key_int 1 /* int is a reserved keyword */
#define _key_const 1 /* const is a reserved keyword */
#define _key_foo 0 /* foo is not a reserved keyword */
#define _key_bar 0 /* bar is not a reserved keyword */
#define bar /* default for reserved keyword bar */
#define _key_huh 0 /* huh is not a reserved keyword */
#define aha int /* default for reserved keyword aha */
#define _key_char 1 /* char is a reserved keyword */
#define chr char /* alternate for reserved keyword chr */
#endif'
EXEC -a -r -v -s bsh - t.iffe
EXEC -C -r -v - t.iffe
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define HAVE_SYS_TYPES_H 1 /* #include <sys/types.h> ok */
#define HAVE_INT_RESERVED 1 /* int is a reserved keyword */
#define HAVE_CONST_RESERVED 1 /* const is a reserved keyword */
#undef HAVE_FOO_RESERVED /* foo is not a reserved keyword */
#undef HAVE_BAR_RESERVED /* bar is not a reserved keyword */
#define bar /* default for reserved keyword bar */
#undef HAVE_HUH_RESERVED /* huh is not a reserved keyword */
#define aha int /* default for reserved keyword aha */
#define HAVE_CHAR_RESERVED 1 /* char is a reserved keyword */
#define chr char /* alternate for reserved keyword chr */
#endif'
EXEC -C -r -v -s bsh - t.iffe
TEST 14 'inc file'
EXEC -r -v - t.iffe
INPUT t.iffe $'inc t_lib.h
if ( bar_foo ) {
#define all 1
}
elif ( _foo_bar ) {
#define some 1
}
endif'
INPUT t_lib.h '#define bar_foo ALL
#define _foo_bar SOME'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define some 1
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is ( bar_foo ) true ... no
iffe: test: is ( _foo_bar ) true ... yes'
EXEC -r -v - t.iffe
INPUT t.iffe $'inc t_lib.h .
if ( bar_foo ) {
#define all 1
}
elif ( _foo_bar ) {
#define ok 1
}
endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define all 1
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is ( bar_foo ) true ... yes'
EXEC -r -v - t.iffe
INPUT t.iffe $'inc t_lib.h . ?
if ( bar_foo ) {
#define all 1
}
elif ( _foo_bar ) {
#define ok 1
}
endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: t.iffe:1: warning: ?: operands ignored
iffe: test: is ( bar_foo ) true ... yes'
EXEC -r -v - t.iffe
INPUT t.iffe $'inc foo_lib.h'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: t.iffe:1: foo_lib.h: file not found'
EXIT 1
EXEC -r -v - t.iffe
INPUT t.iffe $'inc'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: t.iffe:1: path expected'
TEST 15 'KnR compatibility'
EXEC -r -v - t.iffe
INPUT t.iffe $'
if ( 1 ) {
#define all 1
}
endif
if ( 2 ) {
#define some 1
}
endif
cat{
#define a 1
#define b 2
#define c 3
#define d 4
}end'
#define _foo_bar SOME'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define some 1
#endif'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define all 1
#define some 1
#define a 1
#define b 2
#define c 3
#define d 4
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is ( 1 ) true ... yes
iffe: test: is ( 2 ) true ... yes
iffe: test: cat{ ... }end ... yes'
EXEC -r -v -s bsh - t.iffe
EXEC -r -v -s osh - t.iffe
TEST 16 '{ define extern include print }'
EXEC -r -v - t.iffe
INPUT t.iffe $'
print /* test header */
header stdio.h
define EOF -1
define FoobaR (a,b) ((a)+(b))
define FoomaC -1
extern fopen FILE* (char*, char*)
extern BarfoO struct barfoo* (int)
extern Tab_lE struct barfoo* [10]'
OUTPUT - $'/* test header */
/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#include <stdio.h>
#define FoobaR(a,b) ((a)+(b))
#define FoomaC -1
extern struct barfoo* BarfoO(int);
extern struct barfoo* Tab_lE[10];
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes
iffe: test: is EOF a macro ... yes
iffe: test: is FoobaR a macro ... no
iffe: test: is FoomaC a macro ... no
iffe: test: is fopen a symbol that needs a prototype ... no
iffe: test: is BarfoO a symbol that needs a prototype ... yes
iffe: test: is Tab_lE a symbol that needs a prototype ... yes'
TEST 17 'features/* => FEATURE/*'
EXEC -r -v run features/stdio
INPUT features/stdio $'set prototyped
header stdio.h'
OUTPUT FEATURE/stdio $'
/* : : generated by proto : : */
/* : : generated from features/stdio by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#if !defined(__PROTO__)
# if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
# if defined(__cplusplus)
# define __LINKAGE__ "C"
# else
# define __LINKAGE__
# endif
# define __STDARG__
# define __PROTO__(x) x
# define __OTORP__(x)
# define __PARAM__(n,o) n
# if !defined(__STDC__) && !defined(__cplusplus)
# if !defined(c_plusplus)
# define const
# endif
# define signed
# define void int
# define volatile
# define __V_ char
# else
# define __V_ void
# endif
# else
# define __PROTO__(x) ()
# define __OTORP__(x) x
# define __PARAM__(n,o) o
# define __LINKAGE__
# define __V_ char
# define const
# define signed
# define void int
# define volatile
# endif
# define __MANGLE__ __LINKAGE__
# if defined(__cplusplus) || defined(c_plusplus)
# define __VARARG__ ...
# else
# define __VARARG__
# endif
# if defined(__STDARG__)
# define __VA_START__(p,a) va_start(p,a)
# else
# define __VA_START__(p,a) va_start(p)
# endif
# if !defined(__INLINE__)
# if defined(__cplusplus)
# define __INLINE__ extern __MANGLE__ inline
# else
# if defined(_WIN32) && !defined(__GNUC__)
# define __INLINE__ __inline
# endif
# endif
# endif
#endif
#if !defined(__LINKAGE__)
#define __LINKAGE__ /* 2004-08-11 transition */
#endif
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#include <stdio.h>
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes
iffe: test: is stdio.h a header ... yes'
TEST 18 'api + ver'
EXEC -r -v - t.iffe
INPUT t.iffe $'iff api
ver foo 20100606
ver bar 19840919
api foo 19991231 dis dat tother
api foo 20100601 dat
api foo 20100606 dis
api bar 19991231 moe larry shemp
api bar 20020202 curly
api bar 20030303 shemp
api bar 20040404 joe_b
api bar 20050505 joe_d
'
OUTPUT - $'/* : : generated from t.iffe by iffe version 1995-03-19 : : */
#ifndef _api_H
#define _api_H 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#define FOO_VERSION 20100606
#define BAR_VERSION 19840919
#define FOOAPI(rel) ( _BLD_foo || !_API_foo || _API_foo >= rel )
#if !defined(_API_foo) && defined(_API_DEFAULT)
#define _API_foo _API_DEFAULT
#endif
#if FOOAPI(20100601)
#undef dat
#define dat dat_20100601
#elif _API_foo >= 19991231
#undef dat
#define dat dat_19991231
#endif
#if FOOAPI(20100606)
#undef dis
#define dis dis_20100606
#elif _API_foo >= 19991231
#undef dis
#define dis dis_19991231
#endif
#if FOOAPI(19991231)
#undef tother
#define tother tother_19991231
#endif
#define _API_foo_MAP "dat_20100601 dat_19991231 dis_20100606 dis_19991231 tother_19991231"
#define BARAPI(rel) ( _BLD_bar || !_API_bar || _API_bar >= rel )
#if !defined(_API_bar) && defined(_API_DEFAULT)
#define _API_bar _API_DEFAULT
#endif
#if BARAPI(20020202)
#undef curly
#define curly curly_20020202
#endif
#if BARAPI(20040404)
#undef joe_b
#define joe_b joe_b_20040404
#endif
#if BARAPI(20050505)
#undef joe_d
#define joe_d joe_d_20050505
#endif
#if BARAPI(19991231)
#undef larry
#define larry larry_19991231
#endif
#if BARAPI(19991231)
#undef moe
#define moe moe_19991231
#endif
#if BARAPI(20030303)
#undef shemp
#define shemp shemp_20030303
#elif _API_bar >= 19991231
#undef shemp
#define shemp shemp_19991231
#endif
#define _API_bar_MAP "curly_20020202 joe_b_20040404 joe_d_20050505 larry_19991231 moe_19991231 shemp_20030303 shemp_19991231"
#endif'
ERROR - $'iffe: test: is sys/types.h a header ... yes'