aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/external/metalang99/tests/eval/rec.c
blob: aff73908b3a833d54a9c4b287ba1596b7104e7c1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <metalang99/eval/rec.h>

#include <metalang99/assert.h>

#include <metalang99/priv/util.h>

#include <metalang99/nat/eq.h>
#include <metalang99/nat/inc.h>

#define F(acc, i)          ML99_PRIV_IF(ML99_PRIV_NAT_EQ(i, 10), F_DONE, F_PROGRESS)(acc, i)
#define F_DONE(acc, _i)    ML99_PRIV_REC_CONTINUE(ML99_PRIV_REC_STOP)(~, acc)
#define F_PROGRESS(acc, i) ML99_PRIV_REC_CONTINUE(F)(acc##X, ML99_PRIV_INC(i))
#define F_HOOK()           F

#define XXXXXXXXXX 678

ML99_ASSERT_UNEVAL(ML99_PRIV_REC_UNROLL(F(, 0)) == 678);

#undef F
#undef F_DONE
#undef F_PROGRESS
#undef F_HOOK
#undef XXXXXXXXXX

int main(void) {}