blob: ac063c7c199d7d926d30eae186f7c1f4f9a5483d [file] [edit]
/*
* Copyright 2010 The Native Client Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/*
* NaCl test for super simple program not using newlib
*/
#include "barebones.h"
#include <stdarg.h>
/* globals are intentional to confuse optimizer */
int errors = 55;
int count = 0;
char buffer[16];
int cmp(long l) {
++count;
if (l != count) {
myprint("Error is ");
myhextochar(l, buffer);
myprint(buffer);
myprint(" expected ");
myhextochar(count, buffer);
myprint(buffer);
myprint("\n");
return 1;
}
return 0;
}
int dump(const char *fmt, ...) {
int errors = 0;
int i;
va_list ap;
va_start(ap, fmt);
myprint(fmt);
myprint("\n");
count = 0;
for (i = 0; fmt[i]; ++i) {
if (fmt[i] == 'L') {
long l = va_arg(ap, long);
errors += cmp(l);
} else if (fmt[i] == 'Q') {
long long ll = (long long) va_arg(ap, long long);
errors += cmp((long)((ll >> 32) & 0xffffffffL));
errors += cmp((long)(ll & 0xffffffffL));
} else {
myprint("Error bad format");
errors += 100;
}
}
va_end(ap);
return errors;
}
void test(void) {
errors += dump("QQQL",
0x0000000100000002LL,
0x0000000300000004LL,
0x0000000500000006LL,
0x00000007L);
errors += dump("QQLQ",
0x0000000100000002LL,
0x0000000300000004LL,
0x00000005L,
0x0000000600000007LL);
errors += dump("QLQQ",
0x0000000100000002LL,
0x00000003L,
0x0000000400000005LL,
0x0000000600000007LL);
errors += dump("LQQQ",
0x00000001L,
0x0000000200000003LL,
0x0000000400000005LL,
0x0000000600000007LL);
errors += dump("QQQ",
0x0000000100000002LL,
0x0000000300000004LL,
0x0000000500000006LL);
errors += dump("LLLLLL",
0x00000001L,
0x00000002L,
0x00000003L,
0x00000004L,
0x00000005L,
0x00000006L);
}
int main(void) {
test();
NACL_SYSCALL(exit)(errors);
/* UNREACHABLE */
return 0;
}