diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cases/bigdouble.ll | 17 | ||||
-rw-r--r-- | tests/cases/bigdouble.txt | 1 | ||||
-rw-r--r-- | tests/codemods.cpp | 21 | ||||
-rw-r--r-- | tests/core/test_memcpy3.c | 51 | ||||
-rw-r--r-- | tests/core/test_memcpy3.out | 81 | ||||
-rw-r--r-- | tests/core/test_memset.c | 51 | ||||
-rw-r--r-- | tests/core/test_memset.out | 81 | ||||
-rw-r--r-- | tests/core/test_sscanf.in | 1 | ||||
-rw-r--r-- | tests/core/test_strcmp_uni.out | 6 | ||||
-rw-r--r-- | tests/cubegeom_proc.c | 331 | ||||
-rwxr-xr-x | tests/fuzz/csmith_driver.py | 2 | ||||
-rw-r--r-- | tests/hello_world_gles_deriv.c | 1 | ||||
-rw-r--r-- | tests/netinet/in.cpp | 14 | ||||
-rw-r--r-- | tests/netinet/in.out | 1 | ||||
-rwxr-xr-x | tests/runner.py | 24 | ||||
-rw-r--r-- | tests/sdlglshader.c | 5 | ||||
-rw-r--r-- | tests/test_browser.py | 56 | ||||
-rw-r--r-- | tests/test_core.py | 72 | ||||
-rw-r--r-- | tests/test_egl.c | 5 | ||||
-rw-r--r-- | tests/test_minmax.c | 89 | ||||
-rw-r--r-- | tests/test_other.py | 24 |
21 files changed, 897 insertions, 37 deletions
diff --git a/tests/cases/bigdouble.ll b/tests/cases/bigdouble.ll new file mode 100644 index 00000000..cd58c08b --- /dev/null +++ b/tests/cases/bigdouble.ll @@ -0,0 +1,17 @@ +; ModuleID = '/tmp/tmpijH2sB/a.out.bc' +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 unnamed_addr constant [4 x i8] c"%f\0A\00", align 1 + +; Function Attrs: nounwind +define i32 @main() #0 { + %1 = fmul double 0x370000000000000, 1.0e+300 + %2 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str, i32 0, i32 0), double %1) + ret i32 0 +} + +; Function Attrs: nounwind +declare i32 @printf(i8* nocapture, ...) #0 + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } diff --git a/tests/cases/bigdouble.txt b/tests/cases/bigdouble.txt new file mode 100644 index 00000000..689709cd --- /dev/null +++ b/tests/cases/bigdouble.txt @@ -0,0 +1 @@ +400833672.001795 diff --git a/tests/codemods.cpp b/tests/codemods.cpp new file mode 100644 index 00000000..26712339 --- /dev/null +++ b/tests/codemods.cpp @@ -0,0 +1,21 @@ +#include <stdio.h> +#include <math.h> +#include <emscripten.h> + +int main() { + volatile int x = 10; + float y = 123456789.123456789; + while (x-- > 0) { + y = (sqrtf(y) + y)/2; + } + double d = y; + double diff = fabs(d - 121376.4609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000); + int ok = fabs(diff) < 0.000001; + printf("%.20f : %d\n", diff, ok); + + int result; + if (ok) result = 1; + else result = diff+2; // add two to this >= number to avoid conflicts with 1 + REPORT_RESULT(); +} + diff --git a/tests/core/test_memcpy3.c b/tests/core/test_memcpy3.c new file mode 100644 index 00000000..1bf47be6 --- /dev/null +++ b/tests/core/test_memcpy3.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <string.h> +#include <assert.h> + +#define TOTAL 10240 + +#define TEST(size, type) { \ + for (int i = 0; i < TOTAL; i++) { \ + buffer[i] = i*seed; \ + } \ + memcpy(buffer, buffer+size+1, size*sizeof(type)); \ + int v = 0; \ + for (int i = 0; i < TOTAL; i++) { \ + v += buffer[i]; \ + } \ + printf("final %d:%d\n", size, v); \ +} + +int main() { + #define RUN(type) \ + { \ + type buffer[TOTAL]; \ + volatile int seed = 123; \ + TEST(1, type); \ + TEST(2, type); \ + TEST(3, type); \ + TEST(4, type); \ + TEST(5, type); \ + TEST(6, type); \ + TEST(7, type); \ + TEST(8, type); \ + TEST(9, type); \ + TEST(10, type); \ + TEST(16, type); \ + TEST(32, type); \ + TEST(64, type); \ + TEST(128, type); \ + TEST(256, type); \ + TEST(512, type); \ + TEST(1024, type); \ + for (int x = 10; x < 100; x += 10) { TEST(x, type) }; \ + } + printf("8\n"); + RUN(unsigned char); + printf("16\n"); + RUN(unsigned short); + printf("32\n"); + RUN(unsigned); + return 1; +} + diff --git a/tests/core/test_memcpy3.out b/tests/core/test_memcpy3.out new file mode 100644 index 00000000..6f39e709 --- /dev/null +++ b/tests/core/test_memcpy3.out @@ -0,0 +1,81 @@ +8 +final 1:1305846 +final 2:1305826 +final 3:1305796 +final 4:1305756 +final 5:1305706 +final 6:1305646 +final 7:1305576 +final 8:1305496 +final 9:1305406 +final 10:1305306 +final 16:1305264 +final 32:1305696 +final 64:1305024 +final 128:1305728 +final 256:1305600 +final 512:1305600 +final 1024:1305600 +final 10:1305306 +final 20:1305548 +final 30:1305814 +final 40:1305336 +final 50:1305906 +final 60:1305476 +final 70:1305582 +final 80:1305712 +final 90:1304842 +16 +final 1:332555510 +final 2:332556002 +final 3:332556740 +final 4:332557724 +final 5:332558954 +final 6:332560430 +final 7:332562152 +final 8:332564120 +final 9:332566334 +final 10:332568794 +final 16:332588720 +final 32:332685152 +final 64:333066944 +final 128:334586240 +final 256:340647680 +final 512:332618240 +final 1024:332812288 +final 10:332568794 +final 20:332606924 +final 30:332669654 +final 40:332756984 +final 50:332868914 +final 60:333005444 +final 70:333166574 +final 80:333352304 +final 90:333562634 +32 +final 1:-2141821706 +final 2:-2141821214 +final 3:-2141820476 +final 4:-2141819492 +final 5:-2141818262 +final 6:-2141816786 +final 7:-2141815064 +final 8:-2141813096 +final 9:-2141810882 +final 10:-2141808422 +final 16:-2141788496 +final 32:-2141692064 +final 64:-2141310272 +final 128:-2139790976 +final 256:-2133729536 +final 512:-2109515264 +final 1024:-2012721152 +final 10:-2141808422 +final 20:-2141770292 +final 30:-2141707562 +final 40:-2141620232 +final 50:-2141508302 +final 60:-2141371772 +final 70:-2141210642 +final 80:-2141024912 +final 90:-2140814582 diff --git a/tests/core/test_memset.c b/tests/core/test_memset.c new file mode 100644 index 00000000..747765f2 --- /dev/null +++ b/tests/core/test_memset.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <string.h> +#include <assert.h> + +#define TOTAL 10240 + +#define TEST(size, type) { \ + for (int i = 0; i < TOTAL; i++) { \ + buffer[i] = i*seed; \ + } \ + memset(buffer+size%17, 0xA5, size); \ + int v = 0; \ + for (int i = 0; i < TOTAL; i++) { \ + v += buffer[i]; \ + } \ + printf("final %d:%d\n", size, v); \ +} + +int main() { + #define RUN(type) \ + { \ + type buffer[TOTAL]; \ + volatile int seed = 123; \ + TEST(1, type); \ + TEST(2, type); \ + TEST(3, type); \ + TEST(4, type); \ + TEST(5, type); \ + TEST(6, type); \ + TEST(7, type); \ + TEST(8, type); \ + TEST(9, type); \ + TEST(10, type); \ + TEST(16, type); \ + TEST(32, type); \ + TEST(64, type); \ + TEST(128, type); \ + TEST(256, type); \ + TEST(512, type); \ + TEST(1024, type); \ + for (int x = 10; x < 100; x += 10) { TEST(x, type) }; \ + } + printf("8\n"); + RUN(unsigned char); + printf("16\n"); + RUN(unsigned short); + printf("32\n"); + RUN(unsigned); + return 1; +} + diff --git a/tests/core/test_memset.out b/tests/core/test_memset.out new file mode 100644 index 00000000..7517e6ba --- /dev/null +++ b/tests/core/test_memset.out @@ -0,0 +1,81 @@ +8 +final 1:1305642 +final 2:1305571 +final 3:1305643 +final 4:1305602 +final 5:1305704 +final 6:1305693 +final 7:1305825 +final 8:1305844 +final 9:1306006 +final 10:1306055 +final 16:1306280 +final 32:1307056 +final 64:1308384 +final 128:1310400 +final 256:1315200 +final 512:1324800 +final 1024:1344000 +final 10:1306055 +final 20:1306310 +final 30:1306867 +final 40:1307060 +final 50:1307463 +final 60:1307850 +final 70:1308037 +final 80:1308424 +final 90:1308805 +16 +final 1:332555306 +final 2:332597423 +final 3:332597229 +final 4:332638967 +final 5:332638793 +final 6:332679896 +final 7:332679486 +final 8:332720210 +final 9:332719820 +final 10:332759909 +final 16:332875316 +final 32:333189464 +final 64:333800048 +final 128:334950368 +final 256:336967616 +final 512:339333248 +final 1024:337924352 +final 10:332759909 +final 20:332970089 +final 30:333154439 +final 40:333365234 +final 50:333529289 +final 60:333740699 +final 70:333957644 +final 80:334096484 +final 90:334314044 +32 +final 1:-2141821910 +final 2:-2141779793 +final 3:-2130966476 +final 4:637274041 +final 5:637273857 +final 6:637315339 +final 7:648128533 +final 8:-878598369 +final 9:-878598523 +final 10:-878557932 +final 16:384620786 +final 32:-1383904756 +final 64:-625991496 +final 128:889823216 +final 256:-373561888 +final 512:1394178624 +final 1024:633133696 +final 10:-878557932 +final 20:-1131244490 +final 30:132010428 +final 40:-120673793 +final 50:1142572023 +final 60:889890139 +final 70:-2141802805 +final 80:1900447306 +final 90:-1131244285 diff --git a/tests/core/test_sscanf.in b/tests/core/test_sscanf.in index d5289fe5..55a310c5 100644 --- a/tests/core/test_sscanf.in +++ b/tests/core/test_sscanf.in @@ -64,6 +64,7 @@ int main() { } char buf1[100], buf2[100], buf3[100], buf4[100]; + memset(buf4, 0, 100); int numItems = sscanf("level=4:ref=3", "%255[^:=]=%255[^:]:%255[^=]=%255c", buf1, buf2, buf3, buf4); diff --git a/tests/core/test_strcmp_uni.out b/tests/core/test_strcmp_uni.out index 58e237d7..ebfe2c8e 100644 --- a/tests/core/test_strcmp_uni.out +++ b/tests/core/test_strcmp_uni.out @@ -1,3 +1,3 @@ -Compare value strncmp is -1 -Compare value strncasecmp is -1 -Compare value memcmp is -1 +Compare value strncmp is -108 +Compare value strncasecmp is -76 +Compare value memcmp is -108 diff --git a/tests/cubegeom_proc.c b/tests/cubegeom_proc.c new file mode 100644 index 00000000..e80b9b31 --- /dev/null +++ b/tests/cubegeom_proc.c @@ -0,0 +1,331 @@ +/* +THIS WORK, INCLUDING THE SOURCE CODE, DOCUMENTATION +AND RELATED MEDIA AND DATA, IS PLACED INTO THE PUBLIC DOMAIN. + +THE ORIGINAL AUTHOR IS KYLE FOLEY. + +THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY +OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF +MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE, +ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE +RESULTING FROM THE USE, MODIFICATION, OR +REDISTRIBUTION OF THIS SOFTWARE. +*/ + +#if !EMSCRIPTEN +#define USE_GLEW 1 +#endif + +#if USE_GLEW +#include "GL/glew.h" +#endif + +#include "SDL/SDL.h" +#if !USE_GLEW +#include "SDL/SDL_opengl.h" +#endif + +#include <stdio.h> +#include <string.h> +#include <assert.h> + +extern void *getBindBuffer(); + +void (*_glBindBuffer)(unsigned, unsigned) = NULL; + +int main(int argc, char *argv[]) +{ + _glBindBuffer = (void (*)(unsigned, unsigned))getBindBuffer(); + // testing + GLint tempInt; + GLboolean tempBool; + void *tempPtr; + + SDL_Surface *screen; + if ( SDL_Init(SDL_INIT_VIDEO) != 0 ) { + printf("Unable to initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); + screen = SDL_SetVideoMode( 640, 480, 24, SDL_OPENGL ); + if ( !screen ) { + printf("Unable to set video mode: %s\n", SDL_GetError()); + return 1; + } + + glClearColor( 0, 0, 0, 0 ); + glClear( GL_COLOR_BUFFER_BIT ); + + // Create a texture + + GLuint boundTex = 123; + assert(!glGetError()); + glGetIntegerv(GL_TEXTURE_BINDING_2D, &boundTex); + assert(!glGetError()); + assert(boundTex == 0); + + GLuint texture; + glGenTextures( 1, &texture ); + glBindTexture( GL_TEXTURE_2D, texture ); + + assert(!glGetError()); + glGetIntegerv(GL_TEXTURE_BINDING_2D, &boundTex); + assert(!glGetError()); + assert(boundTex == texture); + + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + GLubyte textureData[16*16*4]; + for (int x = 0; x < 16; x++) { + for (int y = 0; y < 16; y++) { + *((int*)&textureData[(x*16 + y) * 4]) = x*16 + ((y*16) << 8); + } + } + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, + GL_RGBA, GL_UNSIGNED_BYTE, textureData ); + + // Create a second texture + + GLuint texture2; + glGenTextures( 1, &texture2 ); + glBindTexture( GL_TEXTURE_2D, texture2 ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + GLubyte texture2Data[] = { 0xff, 0, 0, 0xff, + 0, 0xff, 0, 0xaa, + 0, 0, 0xff, 0x55, + 0x80, 0x90, 0x70, 0 }; + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, + GL_RGBA, GL_UNSIGNED_BYTE, texture2Data ); + + // BEGIN + +#if USE_GLEW + glewInit(); +#endif + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + // original: glFrustum(-0.6435469817188064, 0.6435469817188064 ,-0.48266022190470925, 0.48266022190470925 ,0.5400000214576721, 2048); + glFrustum(-0.6435469817188064, 0.1435469817188064 ,-0.48266022190470925, 0.88266022190470925 ,0.5400000214576721, 2048); + glRotatef(-30, 1, 1, 1); + //GLfloat pm[] = { 1.372136116027832, 0, 0, 0, 0, 0.7910231351852417, 0, 0, -0.6352481842041016, 0.29297152161598206, -1.0005275011062622, -1, 0, 0, -1.080284833908081, 0 }; + //glLoadMatrixf(pm); + + glMatrixMode(GL_MODELVIEW); + GLfloat matrixData[] = { -1, 0, 0, 0, + 0, 0,-1, 0, + 0, 1, 0, 0, + 0, 0, 0, 1 }; + glLoadMatrixf(matrixData); + //glTranslated(-512,-512,-527); // XXX this should be uncommented, but if it is then nothing is shown + + glEnable(GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); + + glClear(GL_DEPTH_BUFFER_BIT); + + glEnableClientState(GL_NORMAL_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + glActiveTexture(GL_TEXTURE0); + + glGetBooleanv(GL_VERTEX_ARRAY, &tempBool); assert(!tempBool); + glEnableClientState(GL_VERTEX_ARRAY); + glGetBooleanv(GL_VERTEX_ARRAY, &tempBool); assert(tempBool); + + GLuint arrayBuffer, elementBuffer; + glGenBuffers(1, &arrayBuffer); + glGenBuffers(1, &elementBuffer); + + GLubyte arrayData[] = { +/* +[0, 0, 0, 67] ==> 128 float +[0, 0, 128, 67] ==> 256 float +[0, 0, 0, 68] ==> 512 float +[0, 0, 128, 68] ==> 1024 float + +[vertex x ] [vertex y ] [vertex z ] [nr] [texture u ] [texture v ] [lm u ] [lm v ] [color r,g,b,a ] */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, // 0 + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, // 1 + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 2 + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 3 + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, // 4 + 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 128, 67, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, // 5 + 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 128, 67, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 6 + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 7 + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 8 + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 9 + 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 128, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 10 + 0, 0, 0, 0, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 11 + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 12 + 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 128, 67, 0, 0, 0, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 13 + 0, 0, 128, 68, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 128, 67, 0, 0, 128, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 14 + 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 128, 67, 0, 0, 0, 0, 128, 128, 128, 128, // 15 + + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 128, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, + 0, 0, 128, 68, 0, 0, 128, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128 + }; + assert(sizeof(arrayData) == 1408); + _glBindBuffer(GL_ARRAY_BUFFER, arrayBuffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(arrayData), arrayData, GL_STATIC_DRAW); + _glBindBuffer(GL_ARRAY_BUFFER, 0); + + GLushort elementData[] = { 1, 2, 0, 2, 3, 0, 5, 6, 4, 6, 7, 4, 9, 10, 8, 10, 11, 8, 13, 14, 12, 14, 15, 12 }; + assert(sizeof(elementData) == 48); + _glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elementData), elementData, GL_STATIC_DRAW); + _glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + _glBindBuffer(GL_ARRAY_BUFFER, arrayBuffer); + _glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer); + + // sauer vertex data is apparently 0-12: V3F, 12: N1B, 16-24: T2F, 24-28: T2S, 28-32: C4B + glVertexPointer(3, GL_FLOAT, 32, (void*)0); // all these apply to the ARRAY_BUFFER that is bound + glTexCoordPointer(2, GL_FLOAT, 32, (void*)16); + + glClientActiveTexture(GL_TEXTURE1); // XXX seems to be ignored in native build + glTexCoordPointer(2, GL_SHORT, 32, (void*)24); + glGetIntegerv(GL_TEXTURE_COORD_ARRAY_SIZE, &tempInt); assert(tempInt == 2); + glGetIntegerv(GL_TEXTURE_COORD_ARRAY_TYPE, &tempInt); assert(tempInt == GL_SHORT); + glGetIntegerv(GL_TEXTURE_COORD_ARRAY_STRIDE, &tempInt); assert(tempInt == 32); + glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &tempPtr); assert(tempPtr == (void *)24); + + glClientActiveTexture(GL_TEXTURE0); // likely not needed, it is a cleanup + glNormalPointer(GL_BYTE, 32, (void*)12); + glColorPointer(4, GL_UNSIGNED_BYTE, 32, (void*)28); + + glGetPointerv(GL_VERTEX_ARRAY_POINTER, &tempPtr); assert(tempPtr == (void *)0); + glGetPointerv(GL_COLOR_ARRAY_POINTER, &tempPtr); assert(tempPtr == (void *)28); + glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &tempPtr); assert(tempPtr == (void *)16); + glGetIntegerv(GL_VERTEX_ARRAY_SIZE, &tempInt); assert(tempInt == 3); + glGetIntegerv(GL_VERTEX_ARRAY_TYPE, &tempInt); assert(tempInt == GL_FLOAT); + glGetIntegerv(GL_VERTEX_ARRAY_STRIDE, &tempInt); assert(tempInt == 32); + glGetIntegerv(GL_COLOR_ARRAY_SIZE, &tempInt); assert(tempInt == 4); + glGetIntegerv(GL_COLOR_ARRAY_TYPE, &tempInt); assert(tempInt == GL_UNSIGNED_BYTE); + glGetIntegerv(GL_COLOR_ARRAY_STRIDE, &tempInt); assert(tempInt == 32); + glGetIntegerv(GL_TEXTURE_COORD_ARRAY_SIZE, &tempInt); assert(tempInt == 2); + glGetIntegerv(GL_TEXTURE_COORD_ARRAY_TYPE, &tempInt); assert(tempInt == GL_FLOAT); + glGetIntegerv(GL_TEXTURE_COORD_ARRAY_STRIDE, &tempInt); assert(tempInt == 32); + glGetBooleanv(GL_VERTEX_ARRAY, &tempBool); assert(tempBool); + + glBindTexture(GL_TEXTURE_2D, texture); // diffuse? + glActiveTexture(GL_TEXTURE0); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, texture2); // lightmap? + glActiveTexture(GL_TEXTURE0); + + GLint ok; + + const char *vertexShader = "uniform vec4 texgenscroll;\n" + "void main(void)\n" + "{\n" + " gl_Position = ftransform();\n" + " gl_TexCoord[0].xy = gl_MultiTexCoord0.xy/100.0 + texgenscroll.xy;\n" // added /100 here + " gl_TexCoord[1].xy = gl_MultiTexCoord1.xy/100.0 * 3.051851e-05;\n" + "}\n"; + const char *fragmentShader = "uniform vec4 colorparams;\n" + "uniform sampler2D diffusemap, lightmap;\n" + "void main(void)\n" + "{\n" + " vec4 diffuse = texture2D(diffusemap, gl_TexCoord[0].xy);\n" + " vec4 lm = texture2D(lightmap, gl_TexCoord[1].xy);\n" + " diffuse *= colorparams;\n" + " gl_FragColor = diffuse * lm;\n" + "}\n"; + + GLuint vs = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vs, 1, &vertexShader, NULL); + glCompileShader(vs); + glGetShaderiv(vs, GL_COMPILE_STATUS, &ok); + assert(ok); + + GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fs, 1, &fragmentShader, NULL); + glCompileShader(fs); + glGetShaderiv(fs, GL_COMPILE_STATUS, &ok); + assert(ok); + + GLuint program = glCreateProgram(); + + glAttachShader(program, vs); + glAttachShader(program, fs); + glLinkProgram(program); + glGetProgramiv(program, GL_LINK_STATUS, &ok); + assert(ok); + + glUseProgram(program); + + GLint lightmapLocation = glGetUniformLocation(program, "lightmap"); + assert(lightmapLocation >= 0); + assert(lightmapLocation == glGetUniformLocation(program, "lightmap")); // must get identical ids + glLinkProgram(program); + glGetProgramiv(program, GL_LINK_STATUS, &ok); + assert(ok); + assert(lightmapLocation != glGetUniformLocation(program, "lightmap")); // must NOT get identical ids, we re-linked! + lightmapLocation = glGetUniformLocation(program, "lightmap"); + assert(lightmapLocation == glGetUniformLocation(program, "lightmap")); // must get identical ids + + glUniform1i(lightmapLocation, 1); // sampler2D? Is it the texture unit? + + GLint diffusemapLocation = glGetUniformLocation(program, "diffusemap"); + assert(diffusemapLocation >= 0); + glUniform1i(diffusemapLocation, 0); + + GLint texgenscrollLocation = glGetUniformLocation(program, "texgenscroll"); + assert(texgenscrollLocation >= 0); + + GLint colorparamsLocation = glGetUniformLocation(program, "colorparams"); + assert(colorparamsLocation >= 0); + + GLfloat texgenscrollData[] = { 0, 0, 0, 0 }; + glUniform4fv(texgenscrollLocation, 1, texgenscrollData); + + GLfloat colorparamsData[] = { 2, 2, 2, 1 }; + glUniform4fv(colorparamsLocation, 1, colorparamsData); + + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (void*)12); + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (void*) 0); + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (void*)24); + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (void*)36); + + // END + + SDL_GL_SwapBuffers(); + +#if !EMSCRIPTEN + SDL_Delay(1500); +#endif + + SDL_Quit(); + + return 0; +} diff --git a/tests/fuzz/csmith_driver.py b/tests/fuzz/csmith_driver.py index f43ac60e..d7ed46e1 100755 --- a/tests/fuzz/csmith_driver.py +++ b/tests/fuzz/csmith_driver.py @@ -35,7 +35,7 @@ notes = { 'invalid': 0, 'unaligned': 0, 'embug': 0 } fails = 0 while 1: - opts = '-O' + str(random.randint(0, 2)) + opts = '-O' + str(random.randint(0, 3)) print 'opt level:', opts print 'Tried %d, notes: %s' % (tried, notes) diff --git a/tests/hello_world_gles_deriv.c b/tests/hello_world_gles_deriv.c index c5354d4e..592078ed 100644 --- a/tests/hello_world_gles_deriv.c +++ b/tests/hello_world_gles_deriv.c @@ -645,6 +645,7 @@ static const char vertex_shader[] = static const char fragment_shader[] = "#ifdef GL_ES\n" +"#extension GL_OES_standard_derivatives : enable\n" "precision mediump float;\n" "#endif\n" "varying vec4 Color;\n" diff --git a/tests/netinet/in.cpp b/tests/netinet/in.cpp new file mode 100644 index 00000000..eaadfba2 --- /dev/null +++ b/tests/netinet/in.cpp @@ -0,0 +1,14 @@ +#include <netinet/in.h> +extern "C" int puts(const char *); +int main() { + struct in6_addr in6any = IN6ADDR_ANY_INIT; + struct in6_addr in6loopback = IN6ADDR_LOOPBACK_INIT; + int i; + for (i = 0; i < 16; ++i) + if (in6any.s6_addr[i] != in6addr_any.s6_addr[i]) + return puts("in6addr_any != IN6ADDR_ANY_INIT\n"); + for (i = 0; i < 16; ++i) + if (in6loopback.s6_addr[i] != in6addr_loopback.s6_addr[i]) + return puts("in6addr_loopback != IN6ADDR_LOOPBACK_INIT\n"); + return puts("pass"); +} diff --git a/tests/netinet/in.out b/tests/netinet/in.out new file mode 100644 index 00000000..2ae28399 --- /dev/null +++ b/tests/netinet/in.out @@ -0,0 +1 @@ +pass diff --git a/tests/runner.py b/tests/runner.py index f59d5cb9..501299c7 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -36,7 +36,10 @@ except: # Core test runner class, shared between normal tests and benchmarks checked_sanity = False -test_modes = ['default', 'o1', 'o2', 'asm1', 'asm2', 'asm3', 'asm2f', 'asm2g', 'asm2x86', 's_0_0', 's_0_1'] +if os.environ.get('EMCC_FAST_COMPILER') == '1': + test_modes = ['default', 'asm1', 'asm2', 'asm3', 'asm2f', 'asm2g'] +else: + test_modes = ['default', 'o1', 'o2', 'asm1', 'asm2', 'asm3', 'asm2f', 'asm2g', 'asm2x86', 's_0_0', 's_0_1'] test_index = 0 class RunnerCore(unittest.TestCase): @@ -138,7 +141,11 @@ class RunnerCore(unittest.TestCase): post1 = post_build post2 = None - if self.emcc_args is None: + emcc_args = self.emcc_args + if emcc_args is None: + emcc_args = [] + + if emcc_args is None: # legacy testing mode, no longer used Building.emscripten(filename, append_ext=True, extra_args=extra_emscripten_args) if post1: exec post1 in locals() @@ -160,7 +167,7 @@ process(sys.argv[1]) ''') transform.close() transform_args = ['--js-transform', "%s %s" % (PYTHON, transform_filename)] - Building.emcc(filename + '.o.ll', Settings.serialize() + self.emcc_args + transform_args + Building.COMPILER_TEST_OPTS, filename + '.o.js') + Building.emcc(filename + '.o.ll', Settings.serialize() + emcc_args + transform_args + Building.COMPILER_TEST_OPTS, filename + '.o.js') if post2: post2(filename + '.o.js') # Build JavaScript code from source code @@ -649,7 +656,6 @@ class BrowserCore(RunnerCore): def btest(self, filename, expected=None, reference=None, force_c=False, reference_slack=0, manual_reference=False, post_build=None, args=[], outfile='test.html', message='.'): # TODO: use in all other tests - if os.environ.get('EMCC_FAST_COMPILER') == '1' and 'LEGACY_GL_EMULATION=1' in args: return self.skip('no legacy gl emulation in fastcomp') # if we are provided the source and not a path, use that filename_is_src = '\n' in filename src = filename if filename_is_src else '' @@ -792,6 +798,16 @@ an individual test with |