1/*
2** $Id: ltests.h $
3** Internal Header for Debugging of the Lua Implementation
4** See Copyright Notice in lua.h
5*/
6
7#ifndef ltests_h
8#define ltests_h
9
10
11#include <stdio.h>
12#include <stdlib.h>
13
14/* test Lua with compatibility code */
15#define LUA_COMPAT_MATHLIB
16#define LUA_COMPAT_LT_LE
17
18
19#define LUA_DEBUG
20
21
22/* turn on assertions */
23#define LUAI_ASSERT
24
25
26/* to avoid warnings, and to make sure value is really unused */
27#define UNUSED(x)       (x=0, (void)(x))
28
29
30/* test for sizes in 'l_sprintf' (make sure whole buffer is available) */
31#undef l_sprintf
32#if !defined(LUA_USE_C89)
33#define l_sprintf(s,sz,f,i)	(memset(s,0xAB,sz), snprintf(s,sz,f,i))
34#else
35#define l_sprintf(s,sz,f,i)	(memset(s,0xAB,sz), sprintf(s,f,i))
36#endif
37
38
39/* get a chance to test code without jump tables */
40#define LUA_USE_JUMPTABLE	0
41
42
43/* use 32-bit integers in random generator */
44#define LUA_RAND32
45
46
47/* memory-allocator control variables */
48typedef struct Memcontrol {
49  int failnext;
50  unsigned long numblocks;
51  unsigned long total;
52  unsigned long maxmem;
53  unsigned long memlimit;
54  unsigned long countlimit;
55  unsigned long objcount[LUA_NUMTYPES];
56} Memcontrol;
57
58LUA_API Memcontrol l_memcontrol;
59
60
61/*
62** generic variable for debug tricks
63*/
64extern void *l_Trick;
65
66
67
68/*
69** Function to traverse and check all memory used by Lua
70*/
71LUAI_FUNC int lua_checkmemory (lua_State *L);
72
73/*
74** Function to print an object GC-friendly
75*/
76struct GCObject;
77LUAI_FUNC void lua_printobj (lua_State *L, struct GCObject *o);
78
79
80/* test for lock/unlock */
81
82struct L_EXTRA { int lock; int *plock; };
83#undef LUA_EXTRASPACE
84#define LUA_EXTRASPACE	sizeof(struct L_EXTRA)
85#define getlock(l)	cast(struct L_EXTRA*, lua_getextraspace(l))
86#define luai_userstateopen(l)  \
87	(getlock(l)->lock = 0, getlock(l)->plock = &(getlock(l)->lock))
88#define luai_userstateclose(l)  \
89  lua_assert(getlock(l)->lock == 1 && getlock(l)->plock == &(getlock(l)->lock))
90#define luai_userstatethread(l,l1) \
91  lua_assert(getlock(l1)->plock == getlock(l)->plock)
92#define luai_userstatefree(l,l1) \
93  lua_assert(getlock(l)->plock == getlock(l1)->plock)
94#define lua_lock(l)     lua_assert((*getlock(l)->plock)++ == 0)
95#define lua_unlock(l)   lua_assert(--(*getlock(l)->plock) == 0)
96
97
98
99LUA_API int luaB_opentests (lua_State *L);
100
101LUA_API void *debug_realloc (void *ud, void *block,
102                             size_t osize, size_t nsize);
103
104#if defined(lua_c)
105#define luaL_newstate()		lua_newstate(debug_realloc, &l_memcontrol)
106#define luaL_openlibs(L)  \
107  { (luaL_openlibs)(L); \
108     luaL_requiref(L, "T", luaB_opentests, 1); \
109     lua_pop(L, 1); }
110#endif
111
112
113
114/* change some sizes to give some bugs a chance */
115
116#undef LUAL_BUFFERSIZE
117#define LUAL_BUFFERSIZE		23
118#define MINSTRTABSIZE		2
119#define MAXIWTHABS		3
120
121#define STRCACHE_N	23
122#define STRCACHE_M	5
123
124#undef LUAI_USER_ALIGNMENT_T
125#define LUAI_USER_ALIGNMENT_T   union { char b[sizeof(void*) * 8]; }
126
127
128/*
129** This one is not compatible with tests for opcode optimizations,
130** as it blocks some optimizations
131#define MAXINDEXRK	0
132*/
133
134
135/* make stack-overflow tests run faster */
136#undef LUAI_MAXSTACK
137#define LUAI_MAXSTACK   50000
138
139
140/* test mode uses more stack space */
141#undef LUAI_MAXCCALLS
142#define LUAI_MAXCCALLS	180
143
144
145/* force Lua to use its own implementations */
146#undef lua_strx2number
147#undef lua_number2strx
148
149
150#endif
151
152