diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-01-15 17:01:19 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-01-15 17:01:19 -0800 |
commit | c42b937808924f6b922b29d2e0fd1fe1d1b0411c (patch) | |
tree | 4027d435b6638a7e72b9519990298fb9314ecc96 /tests | |
parent | 8478d6aee54d6c52de16d8c58309534afbf5bf9e (diff) | |
parent | e5ccf17e84e7a5102bf9e05ffef01e6672b4c15a (diff) |
Merge branch 'incoming'
Diffstat (limited to 'tests')
31 files changed, 727 insertions, 125 deletions
diff --git a/tests/cases/breakinthemiddle2.ll b/tests/cases/breakinthemiddle2.ll index ba96654f..2f8c1c91 100644 --- a/tests/cases/breakinthemiddle2.ll +++ b/tests/cases/breakinthemiddle2.ll @@ -11,10 +11,6 @@ define linkonce_odr i32 @main() align 2 { label555: ; preds = %0 br label %label569 ; branch should ignore all code after it in the block ; No predecessors! - %aa472 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - cleanup - %aa473 = extractvalue { i8*, i32 } %aa472, 0 - %aa474 = extractvalue { i8*, i32 } %aa472, 1 br label %label569 label569: ; preds = %0 @@ -23,10 +19,6 @@ label569: ; preds = %0 label990: ret i32 0 ; ret should ignore all code after it in the block ; No predecessors! - %a472 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - cleanup - %a473 = extractvalue { i8*, i32 } %a472, 0 - %a474 = extractvalue { i8*, i32 } %a472, 1 br label %label569 label999: ; preds = %555 diff --git a/tests/cases/breakinthemiddle3.ll b/tests/cases/breakinthemiddle3.ll deleted file mode 100644 index 38da15ef..00000000 --- a/tests/cases/breakinthemiddle3.ll +++ /dev/null @@ -1,29 +0,0 @@ -target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" -target triple = "le32-unknown-nacl" - -@.str = private constant [15 x i8] c"hello, world!\0A\00", align 1 ; [#uses=1] - -define linkonce_odr i32 @main() align 2 { - %a333 = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0] - %z199 = trunc i8 1 to i1 ; [#uses=1] - switch i32 %a333, label %label999 [ - i32 1000, label %label995 - ] ; switch should ignore all code after it in the block - ; No predecessors! - %a472 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - cleanup - %a473 = extractvalue { i8*, i32 } %a472, 0 - %a474 = extractvalue { i8*, i32 } %a472, 1 - br label %label999 - -label995: - %b333b = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0] - br label %label999 - -label999: ; preds = %555 - ret i32 0 -} - -declare i32 @printf(i8*) -declare i32 @__gxx_personality_v0(...) - diff --git a/tests/cases/gepaddoverflow.ll b/tests/cases/gepaddoverflow.ll new file mode 100644 index 00000000..11246c1d --- /dev/null +++ b/tests/cases/gepaddoverflow.ll @@ -0,0 +1,37 @@ +; ModuleID = 'new.o' +target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" +target triple = "le32-unknown-nacl" + +declare i32 @printf(i8* noalias, ...) nounwind + +@x = common global [4194304 x i8] zeroinitializer, align 4 +@.str = private constant [6 x i8] c"*%d*\0A\00", align 1 + +define i8* @test_gep(i32 %y) nounwind readnone { + ; JavaScript uses double precision 64-bit floating point values, with + ; a 53 bit mantissa. The maximum precisely representable integer is + ; 9007199254740992. A number close to that limit is constructed here + ; for the constant part of the getelementptr instruction: + ; 4194304 * 2147483647 == 9007199250546688 == 9007199254740992 - 4194304 + ; If that number appears in JavaScript source instead of being properly + ; limited to 32 bits, the %y parameter can be used to exceed the maximum + ; precisely representable integer, and make the computation inexact. + %test_res = getelementptr [4194304 x i8]* @x, i32 2147483647, i32 %y + ret i8* %test_res +} + +define i32 @main() { + %res_0 = call i8* (i32)* @test_gep(i32 1000000000) + %res_1 = call i8* (i32)* @test_gep(i32 1000000001) + %res_0_i = ptrtoint i8* %res_0 to i32 + %res_1_i = ptrtoint i8* %res_1 to i32 + + ; If getelementptr limited the constant part of the offset to 32 bits, + ; result will be 1. Otherwise, it cannot be 1 because the large numbers in + ; the calculation cannot be accurately represented by floating point math. + %res_diff = sub i32 %res_1_i, %res_0_i + %printf_res = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([6 x i8]* @.str, i32 0, i32 0), i32 %res_diff) + + ret i32 0 +} + diff --git a/tests/cases/gepaddoverflow.txt b/tests/cases/gepaddoverflow.txt new file mode 100644 index 00000000..10fd998b --- /dev/null +++ b/tests/cases/gepaddoverflow.txt @@ -0,0 +1 @@ +*1* diff --git a/tests/cases/invokeundef.ll b/tests/cases/invokeundef.ll index be1dd671..2f13e7ab 100644 --- a/tests/cases/invokeundef.ll +++ b/tests/cases/invokeundef.ll @@ -31,6 +31,8 @@ invcont33: ret i32 %retval1 lpad106: + %Z = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) + cleanup ret i32 %retval1 return: ; preds = %entry @@ -40,3 +42,6 @@ return: ; preds = %entry ; [#uses=1] declare i32 @puts(i8*) + +declare i32 @__gxx_personality_v0(...) + diff --git a/tests/cases/switch64_ta2.ll b/tests/cases/switch64_ta2.ll index 4d5c6273..1a6d52f3 100644 --- a/tests/cases/switch64_ta2.ll +++ b/tests/cases/switch64_ta2.ll @@ -1,12 +1,14 @@ target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" target triple = "le32-unknown-nacl" -@.str = private constant [15 x i8] c"hello, world!\0A\00", align 1 ; [#uses=1] +@.str = private constant [18 x i8] c"hello, world: %d\0A\00", align 1 + +declare i32 @printf(i8*, ...) define linkonce_odr i32 @main() align 2 { - %a333 = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0] - %a444 = zext i32 %a333 to i64 - %a199 = trunc i8 1 to i1 ; [#uses=1] + %a333 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str, i32 0, i32 0), i32 5) + %a400 = zext i32 %a333 to i64 + %a444 = udiv i64 %a400, 3 switch i64 %a444, label %label999 [ i64 1000, label %label9950 i64 1001, label %label9951 @@ -18,41 +20,35 @@ define linkonce_odr i32 @main() align 2 { i64 1007, label %label9957 i64 1008, label %label9958 i64 1009, label %label9959 - ] ; switch should ignore all code after it in the block - ; No predecessors! - %a472 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - cleanup - %a473 = extractvalue { i8*, i32 } %a472, 0 - %a474 = extractvalue { i8*, i32 } %a472, 1 - br label %label999 + ] label9950: - %a333b = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0] + %waka = phi i32 [1000, %0], [0, %label9951], [1, %label9952], [2, %label9953], [3, %label9954], [4, %label9955], [5, %label9956], [6, %label9957], [7, %label9958], [8, %label9959] + %a333b = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str, i32 0, i32 0), i32 %waka) br label %label999 label9951: - br label %label999 + br label %label9950 label9952: - br label %label999 + br label %label9950 label9953: - br label %label999 + br label %label9950 label9954: - br label %label999 + br label %label9950 label9955: - br label %label999 + br label %label9950 label9956: - br label %label999 + br label %label9950 label9957: - br label %label999 + br label %label9950 label9958: - br label %label999 + br label %label9950 label9959: - br label %label999 + br label %label9950 label999: ; preds = %555 + %last = phi i32 [1, %0], [2, %label9950] + %a333c = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str, i32 0, i32 0), i32 %last) ret i32 0 } -declare i32 @printf(i8*) -declare i32 @__gxx_personality_v0(...) - diff --git a/tests/cases/switch64_ta2.txt b/tests/cases/switch64_ta2.txt new file mode 100644 index 00000000..72084b0c --- /dev/null +++ b/tests/cases/switch64_ta2.txt @@ -0,0 +1,2 @@ +hello, world: 5 +hello, world: 1 diff --git a/tests/cases/switch64b_ta2.ll b/tests/cases/switch64b_ta2.ll new file mode 100644 index 00000000..4364725f --- /dev/null +++ b/tests/cases/switch64b_ta2.ll @@ -0,0 +1,54 @@ +target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" +target triple = "le32-unknown-nacl" + +@.str = private constant [18 x i8] c"hello, world: %d\0A\00", align 1 + +declare i32 @printf(i8*, ...) + +define linkonce_odr i32 @main() align 2 { + %a333 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str, i32 0, i32 0), i32 5) + %a400 = zext i32 %a333 to i64 + %a444 = udiv i64 %a400, 3 + switch i64 %a444, label %label999 [ + i64 0, label %label9950 + i64 1, label %label9951 + i64 2, label %label9952 + i64 3, label %label9953 + i64 4, label %label9954 + i64 5, label %label9955 + i64 6, label %label9956 + i64 7, label %label9957 + i64 8, label %label9958 + i64 9, label %label9959 + ] + +label9950: + %waka = phi i32 [11000, %0], [10, %label9951], [11, %label9952], [12, %label9953], [13, %label9954], [14, %label9955], [15, %label9956], [16, %label9957], [17, %label9958], [18, %label9959] + %a333b = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str, i32 0, i32 0), i32 %waka) + br label %label999 + +label9951: + br label %label9950 +label9952: + br label %label9950 +label9953: + br label %label9950 +label9954: + br label %label9950 +label9955: + br label %label9950 +label9956: + br label %label9950 +label9957: + br label %label9950 +label9958: + br label %label9950 +label9959: + br label %label9950 + +label999: ; preds = %555 + %last = phi i32 [1, %0], [2, %label9950] + %a333c = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str, i32 0, i32 0), i32 %last) + ret i32 0 +} + diff --git a/tests/cases/switch64b_ta2.txt b/tests/cases/switch64b_ta2.txt new file mode 100644 index 00000000..917d42e5 --- /dev/null +++ b/tests/cases/switch64b_ta2.txt @@ -0,0 +1,3 @@ +hello, world: 5 +hello, world: 14 +hello, world: 2 diff --git a/tests/core/test_literal_negative_zero.in b/tests/core/test_literal_negative_zero.in new file mode 100644 index 00000000..1554fbf5 --- /dev/null +++ b/tests/core/test_literal_negative_zero.in @@ -0,0 +1,27 @@ +#include <stdio.h> +#include <math.h> + +static float XXXf = -0.0f; +static double XXXd = -0.0; + +struct x { + float f; + double d; +}; + +static struct x xx[] = { + -0x0p+0, + -0x0p+0, +}; + +int main(int argc, char ** argv) { + float YYYf = -0.0f; + float YYYd = -0.0; + + printf("%.2f\n", XXXf); + printf("%.2f\n", XXXd); + printf("%.2f\n", YYYf); + printf("%.2f\n", YYYd); + printf("%.2f\n", xx->f); + printf("%.2f\n", xx->d); +} diff --git a/tests/core/test_literal_negative_zero.out b/tests/core/test_literal_negative_zero.out new file mode 100644 index 00000000..d1b863b8 --- /dev/null +++ b/tests/core/test_literal_negative_zero.out @@ -0,0 +1,6 @@ +-0.00 +-0.00 +-0.00 +-0.00 +-0.00 +-0.00 diff --git a/tests/core/test_wprintf.c b/tests/core/test_wprintf.c new file mode 100644 index 00000000..b5f8d6ab --- /dev/null +++ b/tests/core/test_wprintf.c @@ -0,0 +1,63 @@ +#include <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <wchar.h> + +void PrintWide ( const wchar_t * format, ... ) +{ + wchar_t buffer[256]; + memset(buffer, 0, 256); + va_list args; + va_start ( args, format ); + wprintf(L"format starts with 0x%x\n", *(int*)format); + wprintf(L"fmt continues with 0x%x\n", *(((int*)format) + 1)); + wprintf(L"fmt continues with 0x%x\n", *(((int*)format) + 2)); + int r = vswprintf ( buffer, 256, format, args ); + wprintf(L"vswprintf told us %d\n", r); + wprintf(L"vswoutput st-rts with 0x%x\n", *(int*)buffer); + wprintf(L"vsw continues with 0x%x\n", *(((int*)buffer) + 1)); + wprintf(L"vsw continues with 0x%x\n", *(((int*)buffer) + 2)); + wprintf(buffer); + va_end ( args ); +} + +int main () +{ + FILE *f = fopen("test.dat", "wb"); + int num = fwprintf(f, L"hello %d", 5); + wprintf(L"fwprintf told us %d\n", num); + fclose(f); + f = fopen("test.dat", "rb"); + fseek(f, 0, SEEK_END); + int size = ftell(f); + fclose(f); + wprintf(L"file size is %d\n", size); + + wchar_t str[] = L"test string has %d wide characters.\n"; + wprintf(L"str starts with 0x%x\n", *(int*)str); + wprintf(L"str continues with 0x%x\n", *(((int*)str) + 1)); + wprintf(L"str continues with 0x%x\n", *(((int*)str) + 2)); + PrintWide ( str, wcslen(str) ); + + wprintf (L"Characters: %lc %lc \n", L'a', 65); + wprintf (L"Decimals: %d %ld\n", 1977, 650000L); + wprintf (L"Preceding with blanks: %10d \n", 1977); + wprintf (L"Preceding with zeros: %010d \n", 1977); + wprintf (L"Some different radixes: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100); + wprintf (L"floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416); + wprintf (L"Width trick: %*d \n", 5, 10); + wprintf (L"%ls \n", L"A wide string"); + + wchar_t buffer [100]; + memset(buffer, 0, sizeof(buffer)); + int cx; + cx = swprintf(buffer, 100, L"The half of %d is %d", 80, 80/2); + wprintf(L"swprintf told us %d\n", cx); + for (int i = 0; i < 10; i++) wprintf(L"pre %d\n", ((int*)buffer)[i]); + swprintf (buffer+cx, 100-cx-1, L", and the half of that is %d.\n", 80/2/2); + for (int i = 0; i < 10; i++) wprintf(L"post %d\n", ((int*)buffer)[i]); + wprintf(buffer); + + return 0; +} + diff --git a/tests/core/test_wprintf.out b/tests/core/test_wprintf.out new file mode 100644 index 00000000..e074743d --- /dev/null +++ b/tests/core/test_wprintf.out @@ -0,0 +1,43 @@ +fwprintf told us 7 +file size is 7 +str starts with 0x74 +str continues with 0x65 +str continues with 0x73 +format starts with 0x74 +fmt continues with 0x65 +fmt continues with 0x73 +vswprintf told us 36 +vswoutput st-rts with 0x74 +vsw continues with 0x65 +vsw continues with 0x73 +test string has 36 wide characters. +Characters: a A +Decimals: 1977 650000 +Preceding with blanks: 1977 +Preceding with zeros: 0000001977 +Some different radixes: 100 64 144 0x64 0144 +floats: 3.14 +3e+00 3.141600E+00 +Width trick: 10 +A wide string +swprintf told us 20 +pre 84 +pre 104 +pre 101 +pre 32 +pre 104 +pre 97 +pre 108 +pre 102 +pre 32 +pre 111 +post 84 +post 104 +post 101 +post 32 +post 104 +post 97 +post 108 +post 102 +post 32 +post 111 +The half of 80 is 40, and the half of that is 20. diff --git a/tests/doublestart.c b/tests/doublestart.c new file mode 100644 index 00000000..533e6308 --- /dev/null +++ b/tests/doublestart.c @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <emscripten.h> + +int times = 0; + +void later(void* nada) { + int result = times; + REPORT_RESULT(); +} + +void main_loop(void) { + static int cnt = 0; + if (++cnt >= 10) emscripten_cancel_main_loop(); +} + +int main(void) { + emscripten_async_call(later, NULL, 2000); + times++; + printf("This should only appear once.\n"); + emscripten_set_main_loop(main_loop, 10, 0); + return 0; +} + diff --git a/tests/glew.c b/tests/glew.c new file mode 100644 index 00000000..3bf93fd9 --- /dev/null +++ b/tests/glew.c @@ -0,0 +1,51 @@ +#include <GL/glew.h> +#include <stdio.h> +#include <assert.h> +#include <string.h> + +/* for context creation */ +#include <SDL/SDL.h> + +int main() +{ + assert(SDL_Init(SDL_INIT_VIDEO) == 0); + assert(SDL_SetVideoMode(640, 480, 16, SDL_OPENGL) != NULL); + + assert(glewInit() == GLEW_OK); + assert(glewGetString(0) == NULL); + assert(!strcmp((const char*)glewGetString(1), "1.10.0")); + assert(!strcmp((const char*)glewGetString(2), "1")); + assert(!strcmp((const char*)glewGetString(3), "10")); + assert(!strcmp((const char*)glewGetString(4), "0")); + + for (int i = 0; i < 8; ++i) { + assert(glewGetErrorString(i) != NULL); + } + + assert(glewGetExtension("EXT_unexistant") == 0); + assert(glewIsSupported("EXT_unexistant EXT_foobar") == 0); + + /* we can't be sure about which extension exists, so lets do test on + * some of the common ones */ + if (GLEW_EXT_texture_filter_anisotropic) { + assert(glewGetExtension("EXT_texture_filter_anisotropic") == 1); + assert(glewGetExtension("GL_EXT_texture_filter_anisotropic") == 1); + } + + if (GLEW_EXT_framebuffer_object) { + assert(glewGetExtension("EXT_framebuffer_object") == 1); + assert(glewGetExtension("GL_EXT_framebuffer_object") == 1); + } + + if (GLEW_EXT_texture_filter_anisotropic && + GLEW_EXT_framebuffer_object) { + assert(glewIsSupported("EXT_texture_filter_anisotropic EXT_framebuffer_object") == 1); + assert(glewIsSupported("GL_EXT_texture_filter_anisotropic GL_EXT_framebuffer_object") == 1); + } + +#ifdef REPORT_RESULT + int result = 1; + REPORT_RESULT(); +#endif + return 0; +} diff --git a/tests/math/lgamma.in b/tests/math/lgamma.in new file mode 100644 index 00000000..e96f5610 --- /dev/null +++ b/tests/math/lgamma.in @@ -0,0 +1,105 @@ +#define _BSD_SOURCE 1 +#define _XOPEN_SOURCE 700 +#include <stdint.h> +#include <stdio.h> +#include <fenv.h> +#include <float.h> +#include <math.h> + +#define RN 0 +#define T(...) {__FILE__, __LINE__, __VA_ARGS__}, +#define POS const char *file; int line; +struct f_fi {POS int r; float x; float y; float dy; long long i; int e; }; + +#define DIVBYZERO 0 +#define INEXACT 0 +#define INVALID 0 +#define OVERFLOW 0 +#define UNDERFLOW 0 + +#define inf INFINITY +#define nan NAN + +static struct f_fi t[] = { +T(RN, -0x1.02239f3c6a8f1p+3, -0x1.0120f61b63d5ep+3, 0x1.89ccc4p-6, -1, INEXACT) +T(RN, 0x1.161868e18bc67p+2, 0x1.1ef3b263fd60bp+1, -0x1.6d0264p-3, 1, INEXACT) +T(RN, -0x1.0c34b3e01e6e7p+3, -0x1.46d73255263d9p+3, 0x1.e0ec76p-3, -1, INEXACT) +T(RN, -0x1.a206f0a19dcc4p+2, -0x1.9c91f19ac48c5p+2, 0x1.c2a38cp-2, -1, INEXACT) +T(RN, 0x1.288bbb0d6a1e6p+3, 0x1.65c60768fcc11p+3, 0x1.2f22c2p-2, 1, INEXACT) +T(RN, 0x1.52efd0cd80497p-1, 0x1.3cc760be720b3p-2, 0x1.0527e2p-2, 1, INEXACT) +T(RN, -0x1.a05cc754481d1p-2, 0x1.4ef387fea1014p+0, -0x1.c3b036p-2, -1, INEXACT) +T(RN, 0x1.1f9ef934745cbp-1, 0x1.d6f0efacc5699p-2, 0x1.c0b0a8p-2, 1, INEXACT) +T(RN, 0x1.8c5db097f7442p-1, 0x1.6c1a14cf91533p-3, 0x1.16f4cap-5, 1, INEXACT) +T(RN, -0x1.5b86ea8118a0ep-1, 0x1.695b1e0a0a59ep+0, 0x1.ada69ep-2, -1, INEXACT) +T(RN, 0x0p+0, inf, 0x0p+0, 1, DIVBYZERO) +/* T(RN, -0x0p+0, inf, 0x0p+0, -1, DIVBYZERO) This one fails in native as well */ +T(RN, 0x1p+0, 0x0p+0, 0x0p+0, 1, 0) +T(RN, -0x1p+0, inf, 0x0p+0, 1, DIVBYZERO) +T(RN, 0x1p+1, 0x0p+0, 0x0p+0, 1, 0) +T(RN, -0x1p+1, inf, 0x0p+0, 1, DIVBYZERO) +T(RN, inf, inf, 0x0p+0, 1, 0) +T(RN, -inf, inf, 0x0p+0, -1, 0) +T(RN, nan, nan, 0x0p+0, 1, 0) +}; + +static int eulpf(float x) +{ + union { float f; uint32_t i; } u = { x }; + int e = u.i>>23 & 0xff; + + if (!e) + e++; + return e - 0x7f - 23; +} + +static int checkulp(float d, int r) +{ + // TODO: we only care about >=1.5 ulp errors for now, should be 1.0 + if (r == RN) + return fabsf(d) < 1.5; + return 1; +} + +static float ulperrf(float got, float want, float dwant) +{ + if (isnan(got) && isnan(want)) + return 0; + if (got == want) { + if (signbit(got) == signbit(want)) + return dwant; + return INFINITY; + } + if (isinf(got)) { + got = copysignf(0x1p127, got); + want *= 0.5; + } + return scalbn(got - want, -eulpf(want)) + dwant; +} + +int main(void) +{ + int yi; + double y; + float d; + int e, i, err = 0; + struct f_fi *p; + + for (i = 0; i < sizeof t/sizeof *t; i++) { + p = t + i; + + if (p->r < 0) + continue; + y = lgammaf(p->x); + yi = signgam; + + printf("%g,%d\n", y, yi); + + d = ulperrf(y, p->y, p->dy); + if (!checkulp(d, p->r) || (!isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i)) { + /* printf("%s:%d: %d lgammaf(%g) want %g,%lld got %g,%d ulperr %.3f = %g + %g\n", + p->file, p->line, p->r, p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy); */ + err++; + } + } + return !!err; +} diff --git a/tests/math/lgamma.out b/tests/math/lgamma.out new file mode 100644 index 00000000..7412ffb6 --- /dev/null +++ b/tests/math/lgamma.out @@ -0,0 +1,18 @@ +-8.03528,-1 +2.24181,1 +-10.2138,-1 +-6.44641,-1 +11.1804,1 +0.309354,1 +1.3084,-1 +0.459903,1 +0.177784,1 +1.41155,-1 +inf,1 +0,1 +inf,1 +0,1 +inf,1 +inf,1 +inf,1 +nan,1 diff --git a/tests/openal_buffers.c b/tests/openal_buffers.c index 6f51a685..31104a33 100644 --- a/tests/openal_buffers.c +++ b/tests/openal_buffers.c @@ -26,7 +26,7 @@ unsigned int bits = 0; ALenum format = 0; ALuint source = 0; -void iter(void *arg) { +void iter() { ALuint buffer = 0; ALint buffersProcessed = 0; ALint buffersWereQueued = 0; @@ -180,7 +180,7 @@ int main(int argc, char* argv[]) { emscripten_set_main_loop(iter, 0, 0); #else while (1) { - iter(NULL); + iter(); usleep(16); } #endif diff --git a/tests/poppler/configure b/tests/poppler/configure index 75813bc9..ab650a30 100755 --- a/tests/poppler/configure +++ b/tests/poppler/configure @@ -23051,12 +23051,12 @@ if test "x$GCC" != xyes; then fi case "$enable_compile_warnings" in no) ;; - yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-check-new -fno-common $CXXFLAGS" ;; + yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-common $CXXFLAGS" ;; kde) CXXFLAGS="-Wnon-virtual-dtor -Wno-long-long -Wundef \ -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align \ -Wconversion -Wall -W -Wpointer-arith \ -Wwrite-strings -O2 -Wformat-security \ - -Wmissing-format-attribute -fno-exceptions -fno-check-new \ + -Wmissing-format-attribute -fno-exceptions \ -fno-common $CXXFLAGS" ;; esac diff --git a/tests/poppler/configure.ac b/tests/poppler/configure.ac index f1217c8e..e492fe4b 100644 --- a/tests/poppler/configure.ac +++ b/tests/poppler/configure.ac @@ -610,12 +610,12 @@ if test "x$GCC" != xyes; then fi case "$enable_compile_warnings" in no) ;; - yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-check-new -fno-common $CXXFLAGS" ;; + yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-common $CXXFLAGS" ;; kde) CXXFLAGS="-Wnon-virtual-dtor -Wno-long-long -Wundef \ -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align \ -Wconversion -Wall -W -Wpointer-arith \ -Wwrite-strings -O2 -Wformat-security \ - -Wmissing-format-attribute -fno-exceptions -fno-check-new \ + -Wmissing-format-attribute -fno-exceptions \ -fno-common $CXXFLAGS" ;; esac diff --git a/tests/printf/output.txt b/tests/printf/output.txt index 0155f0da..a3baed28 100644 --- a/tests/printf/output.txt +++ b/tests/printf/output.txt @@ -8280,4 +8280,5 @@ ffffff8000000000 1 1 +1.234568E+04 no_new_line diff --git a/tests/printf/output_i64_1.txt b/tests/printf/output_i64_1.txt index e38fb78f..ea85d302 100644 --- a/tests/printf/output_i64_1.txt +++ b/tests/printf/output_i64_1.txt @@ -8280,4 +8280,5 @@ ffffff8000000000 1 1 +1.234568E+04 no_new_line diff --git a/tests/printf/test.c b/tests/printf/test.c index 1c8ad9f7..adeb69db 100644 --- a/tests/printf/test.c +++ b/tests/printf/test.c @@ -8285,6 +8285,7 @@ int main() { printf("%hx\n", -0xFFFF); printf("%x\n", -0xFFFFFFFF); printf("\n"); + printf("%*.*E\n", 10, -1, 12345.6789123); printf("no_new_line"); return 0; } diff --git a/tests/runner.py b/tests/runner.py index 37e307e9..7f0cbaed 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -342,7 +342,7 @@ process(sys.argv[1]) if self.library_cache is not None: if cache and self.library_cache.get(cache_name): - print >> sys.stderr, '<load %s from cache> ' % cache_name, + print >> sys.stderr, '<load %s from cache> ' % cache_name generated_libs = [] for basename, contents in self.library_cache[cache_name]: bc_file = os.path.join(build_dir, cache_name + '_' + basename) @@ -352,7 +352,7 @@ process(sys.argv[1]) generated_libs.append(bc_file) return generated_libs - print >> sys.stderr, '<building and saving %s into cache> ' % cache_name, + print >> sys.stderr, '<building and saving %s into cache> ' % cache_name return Building.build_library(name, build_dir, output_dir, generated_libs, configure, configure_args, make, make_args, self |