Home | History | Annotate | Download | only in test
      1 #include <stdlib.h>
      2 #include <stdarg.h>
      3 #include <stdbool.h>
      4 #include <errno.h>
      5 #include <inttypes.h>
      6 #include <math.h>
      7 #include <string.h>
      8 
      9 #ifdef _WIN32
     10 #  include <windows.h>
     11 #else
     12 #  include <pthread.h>
     13 #endif
     14 
     15 /******************************************************************************/
     16 /*
     17  * Define always-enabled assertion macros, so that test assertions execute even
     18  * if assertions are disabled in the library code.  These definitions must
     19  * exist prior to including "jemalloc/internal/util.h".
     20  */
     21 #define	assert(e) do {							\
     22 	if (!(e)) {							\
     23 		malloc_printf(						\
     24 		    "<jemalloc>: %s:%d: Failed assertion: \"%s\"\n",	\
     25 		    __FILE__, __LINE__, #e);				\
     26 		abort();						\
     27 	}								\
     28 } while (0)
     29 
     30 #define	not_reached() do {						\
     31 	malloc_printf(							\
     32 	    "<jemalloc>: %s:%d: Unreachable code reached\n",		\
     33 	    __FILE__, __LINE__);					\
     34 	abort();							\
     35 } while (0)
     36 
     37 #define	not_implemented() do {						\
     38 	malloc_printf("<jemalloc>: %s:%d: Not implemented\n",		\
     39 	    __FILE__, __LINE__);					\
     40 	abort();							\
     41 } while (0)
     42 
     43 #define	assert_not_implemented(e) do {					\
     44 	if (!(e))							\
     45 		not_implemented();					\
     46 } while (0)
     47 
     48 #include "test/jemalloc_test_defs.h"
     49 
     50 #ifdef JEMALLOC_OSSPIN
     51 #  include <libkern/OSAtomic.h>
     52 #endif
     53 
     54 #if defined(HAVE_ALTIVEC) && !defined(__APPLE__)
     55 #  include <altivec.h>
     56 #endif
     57 #ifdef HAVE_SSE2
     58 #  include <emmintrin.h>
     59 #endif
     60 
     61 /******************************************************************************/
     62 /*
     63  * For unit tests, expose all public and private interfaces.
     64  */
     65 #ifdef JEMALLOC_UNIT_TEST
     66 #  define JEMALLOC_JET
     67 #  define JEMALLOC_MANGLE
     68 #  include "jemalloc/internal/jemalloc_internal.h"
     69 
     70 /******************************************************************************/
     71 /*
     72  * For integration tests, expose the public jemalloc interfaces, but only
     73  * expose the minimum necessary internal utility code (to avoid re-implementing
     74  * essentially identical code within the test infrastructure).
     75  */
     76 #elif defined(JEMALLOC_INTEGRATION_TEST)
     77 #  define JEMALLOC_MANGLE
     78 #  include "jemalloc/jemalloc.h"
     79 #  include "jemalloc/internal/jemalloc_internal_defs.h"
     80 #  include "jemalloc/internal/jemalloc_internal_macros.h"
     81 
     82 #  define JEMALLOC_N(n) je_##n
     83 #  include "jemalloc/internal/private_namespace.h"
     84 
     85 #  define JEMALLOC_H_TYPES
     86 #  define JEMALLOC_H_STRUCTS
     87 #  define JEMALLOC_H_EXTERNS
     88 #  define JEMALLOC_H_INLINES
     89 #  include "jemalloc/internal/util.h"
     90 #  include "jemalloc/internal/qr.h"
     91 #  include "jemalloc/internal/ql.h"
     92 #  undef JEMALLOC_H_TYPES
     93 #  undef JEMALLOC_H_STRUCTS
     94 #  undef JEMALLOC_H_EXTERNS
     95 #  undef JEMALLOC_H_INLINES
     96 
     97 /******************************************************************************/
     98 /*
     99  * For stress tests, expose the public jemalloc interfaces with name mangling
    100  * so that they can be tested as e.g. malloc() and free().  Also expose the
    101  * public jemalloc interfaces with jet_ prefixes, so that stress tests can use
    102  * a separate allocator for their internal data structures.
    103  */
    104 #elif defined(JEMALLOC_STRESS_TEST)
    105 #  include "jemalloc/jemalloc.h"
    106 
    107 #  include "jemalloc/jemalloc_protos_jet.h"
    108 
    109 #  define JEMALLOC_JET
    110 #  include "jemalloc/internal/jemalloc_internal.h"
    111 #  include "jemalloc/internal/public_unnamespace.h"
    112 #  undef JEMALLOC_JET
    113 
    114 #  include "jemalloc/jemalloc_rename.h"
    115 #  define JEMALLOC_MANGLE
    116 #  ifdef JEMALLOC_STRESS_TESTLIB
    117 #    include "jemalloc/jemalloc_mangle_jet.h"
    118 #  else
    119 #    include "jemalloc/jemalloc_mangle.h"
    120 #  endif
    121 
    122 /******************************************************************************/
    123 /*
    124  * This header does dangerous things, the effects of which only test code
    125  * should be subject to.
    126  */
    127 #else
    128 #  error "This header cannot be included outside a testing context"
    129 #endif
    130 
    131 /******************************************************************************/
    132 /*
    133  * Common test utilities.
    134  */
    135 #include "test/math.h"
    136 #include "test/mtx.h"
    137 #include "test/mq.h"
    138 #include "test/test.h"
    139 #include "test/thd.h"
    140 #define	MEXP 19937
    141 #include "test/SFMT.h"
    142