/*
 * cut.h
 * CUT 2.4
 *
 * Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Samuel A. Falvo II, et. al.
 * See LICENSE for details.
 *
 * Based on WDT's "TestAssert" package.
 *
 * $Log: cut.h,v $
 * Revision 1.4  2003/03/18 05:53:50  sfalvo
 * ADD: cutgen.c: cut_exit() -- common exit point; returns proper error code
 * at all times.
 *
 * FIX: cutgen.c: Factored all instances of exit() to invoke cut_exit()
 * instead.  This fixes the bug #703793.
 *
 * Revision 1.3  2003/03/13 04:27:54  sfalvo
 * ADD: LICENSE.TXT -- zlib license
 *
 * ADD: README cut.h cutgen.c -- Changelog token for CVS
 *
 * FIX: test/bringup-failure -- reflects new usage for bringups and
 * teardowns in CUT 2.2.
 *
 */

#ifndef CUT_CUT_H_INCLUDED
#define CUT_CUT_H_INCLUDED

typedef void CUTTakedownFunction( void );

void cut_start            ( char *, CUTTakedownFunction * );
void cut_init             ( int breakpoint );
void cut_break_formatting ( void );
void cut_resume_formatting( void );
void cut_interject        ( const char *, ... );

#define cut_end(t)           __cut_end( __FILE__, __LINE__, t )
#define cut_mark_point()     __cut_mark_point(__FILE__,__LINE__)
#define cut_check_errors()   __cut_check_errors( __FILE__, __LINE__ )
#define ASSERT(X,msg)        __cut_assert(__FILE__,__LINE__,msg,#X,X)

#define ASSERT_EQUALS(X,Y,msg)   \
    __cut_assert_equals( __FILE__, __LINE__, msg, #X " == " #Y, ( (X) == (Y) ), X )

#define STATIC_ASSERT(X)         \
    extern bool __static_ASSERT_at_line_##__LINE__##__[ (0!=(X))*2-1 ];

/*
 * These functions are not officially "public".  They exist here because they
 * need to be for proper operation of CUT.  Please use the aforementioned
 * macros instead.
 */

void __cut_end          ( char *, int, char * );
void __cut_mark_point   ( char *, int );
void __cut_assert       ( char *, int, char *, char *, int );
void __cut_assert_equals( char *, int, char *, char *, int, int );
int  __cut_check_errors ( char *, int );

#endif

