diff options
| author | Blaine Garst <blaine@apple.com> | 2010-08-04 23:34:21 +0000 |
|---|---|---|
| committer | Blaine Garst <blaine@apple.com> | 2010-08-04 23:34:21 +0000 |
| commit | be67b4aa2011bb2de0404971c343b1d8a573d823 (patch) | |
| tree | bc4dae13980a2e07916d9d62166d25c3da38f09d /compiler-rt/BlocksRuntime/tests/variadic.c | |
| parent | a1c0f8b5c81d8da22d649c8e6feb9f85949cdcfa (diff) | |
| download | bcm5719-llvm-be67b4aa2011bb2de0404971c343b1d8a573d823.tar.gz bcm5719-llvm-be67b4aa2011bb2de0404971c343b1d8a573d823.zip | |
add unit tests
llvm-svn: 110278
Diffstat (limited to 'compiler-rt/BlocksRuntime/tests/variadic.c')
| -rw-r--r-- | compiler-rt/BlocksRuntime/tests/variadic.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/compiler-rt/BlocksRuntime/tests/variadic.c b/compiler-rt/BlocksRuntime/tests/variadic.c new file mode 100644 index 00000000000..1d80657e988 --- /dev/null +++ b/compiler-rt/BlocksRuntime/tests/variadic.c @@ -0,0 +1,66 @@ +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. + +/* + * variadic.c + * testObjects + * + * Created by Blaine Garst on 2/17/09. + * + */ + +// PURPOSE Test that variadic arguments compile and work for Blocks +// CONFIG + +#include <stdarg.h> +#include <stdio.h> + +int main(int argc, char *argv[]) { + + long (^addthem)(const char *, ...) = ^long (const char *format, ...){ + va_list argp; + const char *p; + int i; + char c; + double d; + long result = 0; + va_start(argp, format); + //printf("starting...\n"); + for (p = format; *p; p++) switch (*p) { + case 'i': + i = va_arg(argp, int); + //printf("i: %d\n", i); + result += i; + break; + case 'd': + d = va_arg(argp, double); + //printf("d: %g\n", d); + result += (int)d; + break; + case 'c': + c = va_arg(argp, int); + //printf("c: '%c'\n", c); + result += c; + break; + } + //printf("...done\n\n"); + return result; + }; + long testresult = addthem("ii", 10, 20); + if (testresult != 30) { + printf("got wrong result: %ld\n", testresult); + return 1; + } + testresult = addthem("idc", 30, 40.0, 'a'); + if (testresult != (70+'a')) { + printf("got different wrong result: %ld\n", testresult); + return 1; + } + printf("%s: Success\n", argv[0]); + return 0; +} + + |

