diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cases/atomicrmw_unaligned.emcc | 1 | ||||
-rw-r--r-- | tests/cases/atomicrmw_unaligned.ll | 21 | ||||
-rw-r--r-- | tests/cases/atomicrmw_unaligned.txt | 1 | ||||
-rw-r--r-- | tests/cases/switch64_ta2.ll | 55 | ||||
-rw-r--r-- | tests/cmake/target_js/CMakeLists.txt | 26 | ||||
-rw-r--r-- | tests/cmake/target_js/jslibrary.js | 7 | ||||
-rw-r--r-- | tests/cmake/target_js/jslibrary2.js | 7 | ||||
-rw-r--r-- | tests/cmake/target_js/main.cpp | 10 | ||||
-rw-r--r-- | tests/cmake/target_js/out.txt | 4 | ||||
-rw-r--r-- | tests/cmake/target_js/postjs.js | 1 | ||||
-rw-r--r-- | tests/cmake/target_js/prejs.js | 1 | ||||
-rw-r--r-- | tests/emscripten_api_browser2.cpp | 53 | ||||
-rw-r--r-- | tests/enet/unix.c | 4 | ||||
-rw-r--r-- | tests/python/readme.md | 59 | ||||
-rw-r--r-- | tests/python/readme.txt | 46 | ||||
-rw-r--r-- | tests/sockets/test_gethostbyname.c | 9 | ||||
-rw-r--r-- | tests/test_browser.py | 15 | ||||
-rw-r--r-- | tests/test_core.py | 54 | ||||
-rw-r--r-- | tests/test_other.py | 12 | ||||
-rw-r--r-- | tests/test_sanity.py | 2 | ||||
-rw-r--r-- | tests/unistd/io.c | 6 | ||||
-rw-r--r-- | tests/unistd/io.out | 4 | ||||
-rw-r--r-- | tests/unistd/login.out | 2 | ||||
-rw-r--r-- | tests/unistd/misc.out | 8 |
24 files changed, 338 insertions, 70 deletions
diff --git a/tests/cases/atomicrmw_unaligned.emcc b/tests/cases/atomicrmw_unaligned.emcc new file mode 100644 index 00000000..9faeda24 --- /dev/null +++ b/tests/cases/atomicrmw_unaligned.emcc @@ -0,0 +1 @@ +["-s", "UNALIGNED_MEMORY=1"] diff --git a/tests/cases/atomicrmw_unaligned.ll b/tests/cases/atomicrmw_unaligned.ll new file mode 100644 index 00000000..fe479dce --- /dev/null +++ b/tests/cases/atomicrmw_unaligned.ll @@ -0,0 +1,21 @@ +; ModuleID = 'tests/hello_world.bc' +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128" +target triple = "i386-pc-linux-gnu" + +@.str = private unnamed_addr constant [15 x i8] c"hello, %d,%d!\0A\00", align 1 ; [#uses=1 type=[15 x i8]*] + +; [#uses=0] +define i32 @main() { +entry: + %t = alloca i32, align 4 ; [#uses=2 type=i32**] + store i32 50, i32* %t, align 4 + %0 = load i32* %t + %1 = atomicrmw add i32* %t, i32 3 seq_cst, ; [#uses=0 type=i32] [debug line = 21:12] + %2 = load i32* %t + %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0), i32 %0, i32 %2) ; [#uses=0 type=i32] + %3 = atomicrmw volatile add i32* %t, i32 3 seq_cst, ; [#uses=0 type=i32] [debug line = 21:12] + ret i32 1 +} + +; [#uses=1] +declare i32 @printf(i8*, ...) diff --git a/tests/cases/atomicrmw_unaligned.txt b/tests/cases/atomicrmw_unaligned.txt new file mode 100644 index 00000000..45d16fb1 --- /dev/null +++ b/tests/cases/atomicrmw_unaligned.txt @@ -0,0 +1 @@ +hello, 50,53! diff --git a/tests/cases/switch64_ta2.ll b/tests/cases/switch64_ta2.ll new file mode 100644 index 00000000..e56ccfba --- /dev/null +++ b/tests/cases/switch64_ta2.ll @@ -0,0 +1,55 @@ +@.str = private constant [15 x i8] c"hello, world!\0A\00", align 1 ; [#uses=1] + +define linkonce_odr i32 @main() align 2 { + %333 = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0] + %444 = zext i32 %333 to i64 + %199 = trunc i8 1 to i1 ; [#uses=1] + switch i64 %444, label %label999 [ + i64 1000, label %label9950 + i64 1001, label %label9951 + i64 1002, label %label9952 + i64 1003, label %label9953 + i64 1004, label %label9954 + i64 1005, label %label9955 + i64 1006, label %label9956 + 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: + %333b = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0] + br label %label999 + +label9951: + br label %label999 +label9952: + br label %label999 +label9953: + br label %label999 +label9954: + br label %label999 +label9955: + br label %label999 +label9956: + br label %label999 +label9957: + br label %label999 +label9958: + br label %label999 +label9959: + br label %label999 + +label999: ; preds = %555 + ret i32 0 +} + +declare i32 @printf(i8*) +declare i32 @__gxx_personality_v0(...) + diff --git a/tests/cmake/target_js/CMakeLists.txt b/tests/cmake/target_js/CMakeLists.txt index cee5fc42..244cc70a 100644 --- a/tests/cmake/target_js/CMakeLists.txt +++ b/tests/cmake/target_js/CMakeLists.txt @@ -1,11 +1,15 @@ cmake_minimum_required(VERSION 2.8) -project(hello_world) +project(test_cmake) -file(GLOB sourceFiles ../../hello_world.cpp) +file(GLOB sourceFiles main.cpp) + +file(GLOB preJsFiles pre*.js) +file(GLOB postJsFiles post*.js) +file(GLOB libraryJsFiles jslibrary*.js) if (CMAKE_BUILD_TYPE STREQUAL Debug) - SET(linkFlags "") + SET(linkFlags "-g4") else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimizations enabled. SET(linkFlags "-O2") endif() @@ -28,5 +32,17 @@ if (NOT CMAKE_C_SIZEOF_DATA_PTR) message(FATAL_ERROR "CMAKE_C_SIZEOF_DATA_PTR was not defined!") endif() -add_executable(hello_world ${sourceFiles}) -set_target_properties(hello_world PROPERTIES LINK_FLAGS "${linkFlags}") +add_executable(test_cmake ${sourceFiles}) + +# GOTCHA: If your project has custom link flags, these must be set *before* calling any of the em_link_xxx functions! +set_target_properties(test_cmake PROPERTIES LINK_FLAGS "${linkFlags}") + +message(STATUS "js libs '${libraryJsFiles}'") +# To link .js files using the --js-library flag, use the following helper function. +em_link_js_library(test_cmake ${libraryJsFiles}) + +# To link .js files using the --pre-js flag, use the following helper function. +em_link_pre_js(test_cmake ${preJsFiles}) + +# To link .js files using the --post-js flag, use the following helper function. +em_link_post_js(test_cmake ${postJsFiles}) diff --git a/tests/cmake/target_js/jslibrary.js b/tests/cmake/target_js/jslibrary.js new file mode 100644 index 00000000..63375d8f --- /dev/null +++ b/tests/cmake/target_js/jslibrary.js @@ -0,0 +1,7 @@ +var mylib = {}; + +mylib.lib_function = function() { + console.log('lib_function'); +} + +mergeInto(LibraryManager.library, mylib); diff --git a/tests/cmake/target_js/jslibrary2.js b/tests/cmake/target_js/jslibrary2.js new file mode 100644 index 00000000..5d322e2d --- /dev/null +++ b/tests/cmake/target_js/jslibrary2.js @@ -0,0 +1,7 @@ +var mylib = {}; + +mylib.lib_function2 = function() { + console.log('lib_function2'); +} + +mergeInto(LibraryManager.library, mylib); diff --git a/tests/cmake/target_js/main.cpp b/tests/cmake/target_js/main.cpp new file mode 100644 index 00000000..4b61dbf7 --- /dev/null +++ b/tests/cmake/target_js/main.cpp @@ -0,0 +1,10 @@ +extern "C" { + void lib_function(); + void lib_function2(); +} + +int main() +{ + lib_function(); + lib_function2(); +} diff --git a/tests/cmake/target_js/out.txt b/tests/cmake/target_js/out.txt new file mode 100644 index 00000000..76135df7 --- /dev/null +++ b/tests/cmake/target_js/out.txt @@ -0,0 +1,4 @@ +prejs executed +lib_function +lib_function2 +postjs executed
\ No newline at end of file diff --git a/tests/cmake/target_js/postjs.js b/tests/cmake/target_js/postjs.js new file mode 100644 index 00000000..5a1b44ce --- /dev/null +++ b/tests/cmake/target_js/postjs.js @@ -0,0 +1 @@ +console.log('postjs executed'); diff --git a/tests/cmake/target_js/prejs.js b/tests/cmake/target_js/prejs.js new file mode 100644 index 00000000..87beb770 --- /dev/null +++ b/tests/cmake/target_js/prejs.js @@ -0,0 +1 @@ +console.log('prejs executed'); diff --git a/tests/emscripten_api_browser2.cpp b/tests/emscripten_api_browser2.cpp new file mode 100644 index 00000000..569ed710 --- /dev/null +++ b/tests/emscripten_api_browser2.cpp @@ -0,0 +1,53 @@ +#include <stdio.h> +#include <string.h> +#include <assert.h> + +#include<emscripten.h> + +int value = 0; + +extern "C" { + void set(int x) { + printf("set! %d\n", x); + value = x; + } +} + +void load2() { + printf("load2\n"); + + char buffer[10]; + memset(buffer, 0, 10); + FILE *f = fopen("file1.txt", "r"); + fread(buffer, 1, 5, f); + fclose(f); + assert(strcmp(buffer, "first") == 0); + + memset(buffer, 0, 10); + f = fopen("file2.txt", "r"); + fread(buffer, 1, 6, f); + fclose(f); + assert(strcmp(buffer, "second") == 0); + + int result = 1; + REPORT_RESULT(); +} +void error2() { + printf("fail2\n"); +} + +void load1() { + printf("load1\n"); + assert(value == 456); + emscripten_async_load_script("script2.js", load2, error2); +} +void error1() { + printf("fail1\n"); +} + +int main() { + emscripten_async_load_script("script1.js", load1, error1); + + return 1; +} + diff --git a/tests/enet/unix.c b/tests/enet/unix.c index a225b57d..292eb29b 100644 --- a/tests/enet/unix.c +++ b/tests/enet/unix.c @@ -80,7 +80,7 @@ enet_address_set_host (ENetAddress * address, const char * name) char buffer [2048]; int errnum; -#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__EMSCRIPTEN__) gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); #else hostEntry = gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & errnum); @@ -133,7 +133,7 @@ enet_address_get_host (const ENetAddress * address, char * name, size_t nameLeng in.s_addr = address -> host; -#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__EMSCRIPTEN__) gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); #else hostEntry = gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & errnum); diff --git a/tests/python/readme.md b/tests/python/readme.md new file mode 100644 index 00000000..e728dce3 --- /dev/null +++ b/tests/python/readme.md @@ -0,0 +1,59 @@ +Building Python with Emscripten +=============================== + +These directions should work for Python 2.7.x (last tested with 2.7.5). + +First, uncompress Python into two separate directories, one for native +and one for JavaScript. + +In the JavaScript directory, do: + +```` + EMCONFIGURE_JS=1 emconfigure ./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6 +```` + +If you are on Mac OS X, you will also want ``disable-toolbox-glue``. +If you are on an older version of Python (such as 2.7.2), you may +not need the ``--disable-ipv6`` option. + +If you are on Python 2.7.4 or later, you will need to edit the +``Makefile`` generated and remove the ``MULTIARCH=`` line(s). +You will also need to edit ``pyconfig.h`` and remove defines +for ``DOUBLE_IS_BIG_ENDIAN_IEEE754``, ``DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754``, +and ``HAVE_GCC_ASM_FOR_X87``. + +On Python 2.7.2, you will need to edit ``pyconfig.h`` and remove +``HAVE_GCC_ASM_FOR_X87``, ``HAVE_SIG*`` except for ``SIGNAL_H`` +and *add* ``#define PY_NO_SHORT_FLOAT_REPR``. + +Now, you can run ``make``. It will fail trying to run ``pgen``. + +At this point, go to your native directory and run: + +```` +./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6 +```` + +Now, run ``make`` in the native directory and then copy the generated ``Parser/pgen`` +to your JavaScript directory. Back in your JavaScript directory, be sure to flag +the ``pgen`` executable as executable: + +```` +chmod +x Parser/pgen +```` + +Now, run ``make`` again. + +You will get an error about trying to run ``python`` or ``python.exe``. This +can be ignored. + +Now, you can link the bitcode file that you need: + +```` +llvm-link libpython2.7.so Modules/python.o -o python.bc +```` + +If you are on Mac OS X, you will want to look for ``libpython2.7.dylib`` +instead of ``libpython2.7.so``. + +Thanks to rasjidw and everyone else who has helped with this! diff --git a/tests/python/readme.txt b/tests/python/readme.txt deleted file mode 100644 index 31b0ff45..00000000 --- a/tests/python/readme.txt +++ /dev/null @@ -1,46 +0,0 @@ -Updates to Python 2.7.4 and emscripten of Arp 29 2013 with le32 - -Go to js dir, run EMCONFIGURE_JS=1 ~/Dev/emscripten/emconfigure ./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6 -clean out MULTIARCH= in Makefile -make, until error on pgen -Go to native, run ./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6 -cp Parser/pgen ../JS_DIR/Parser -return to JS -chmod +x Parser/pgen -remove #defines of DOUBLE_IS_BIG_ENDIAN_IEEE754 and DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 and HAVE_GCC_ASM_FOR_X87 in pyconfig.h -make -link libpython2.7.so with Modules/python.o to get the bitcode file you want - -========================= - - -This is Python 2.7.2, compiled to .bc as follows: - -Uncompress Python into two separate directories, one for native and one for JS. - -In the JS one, do - emconfigure ./configure --without-threads --without-pymalloc --enable-shared - EDIT pyconfig.h, remove - HAVE_GCC_ASM_FOR_X87 - HAVE_SIG* except SIGNAL_H - and *add* - #define PY_NO_SHORT_FLOAT_REPR - make -It will fail on lack of permissions to run Parser/pgen. - -Go to the native one, do - ./configure --without-threads --without-pymalloc - make - (Note: you don't need to let it complete, just enough for Parse/pgen is sufficient.) - cp Parser/pgen ../YOUR_JS_DIR/Parser/ - -Return to the JS one, do - chmod +x Parser/pgen - make -You will get an error on lack of permissions to run ./python. Ignore that, and do - llvm-link libpython2.7.so python -o python.bc - -That's it! - -Thanks to rasjidw for helping with this! - diff --git a/tests/sockets/test_gethostbyname.c b/tests/sockets/test_gethostbyname.c index de7da706..459c6b98 100644 --- a/tests/sockets/test_gethostbyname.c +++ b/tests/sockets/test_gethostbyname.c @@ -13,12 +13,17 @@ int main() { char str[INET_ADDRSTRLEN]; + struct hostent *host = NULL; + struct hostent hostData; struct in_addr addr; const char *res; + char buffer[2048]; int err; - // resolve the hostname ot an actual address - struct hostent *host = gethostbyname("slashdot.org"); + // gethostbyname_r calls the same stuff as gethostbyname, so we'll test the + // more complicated one. + // resolve the hostname to an actual address + gethostbyname_r("slashdot.org", &hostData, buffer, sizeof(buffer), &host, &err); assert(host->h_addrtype == AF_INET); assert(host->h_length == sizeof(uint32_t)); diff --git a/tests/test_browser.py b/tests/test_browser.py index e6fd6544..a3b9a1c3 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -1230,6 +1230,17 @@ keydown(100);keyup(100); // trigger the end def test_emscripten_api(self): self.btest('emscripten_api_browser.cpp', '1', args=['-s', '''EXPORTED_FUNCTIONS=['_main', '_third']''']) + def test_emscripten_api2(self): + open('script1.js', 'w').write(''' + Module._set(456); + ''') + + open('file1.txt', 'w').write('first'); + open('file2.txt', 'w').write('second'); + Popen([PYTHON, FILE_PACKAGER, 'test.data', '--preload', 'file1.txt', 'file2.txt'], stdout=open('script2.js', 'w')).communicate() + + self.btest('emscripten_api_browser2.cpp', '1', args=['-s', '''EXPORTED_FUNCTIONS=['_main', '_set']''']) + def test_emscripten_api_infloop(self): self.btest('emscripten_api_browser_infloop.cpp', '7') @@ -1466,7 +1477,9 @@ keydown(100);keyup(100); // trigger the end }, 2000); }; ''') - self.btest('pre_run_deps.cpp', expected='10', args=['--pre-js', 'pre.js']) + + for mem in [0, 1]: + self.btest('pre_run_deps.cpp', expected='10', args=['--pre-js', 'pre.js', '--memory-init-file', str(mem)]) def test_worker_api(self): Popen([PYTHON, EMCC, path_from_root('tests', 'worker_api_worker.cpp'), '-o', 'worker.js', '-s', 'BUILD_AS_WORKER=1', '-s', 'EXPORTED_FUNCTIONS=["_one"]']).communicate() diff --git a/tests/test_core.py b/tests/test_core.py index d02e6778..991f43a9 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1431,6 +1431,7 @@ Succeeded! self.do_run(src, 'BUG?\nDisplay: Vu=465.100000 Vv=465.200000 Wu=160.300000 Wv=111.400000') def test_math(self): + if Settings.USE_TYPED_ARRAYS != 2: return self.skip('requires ta2') src = ''' #include <stdio.h> #include <stdlib.h> @@ -5045,7 +5046,7 @@ The current type of b is: 9 src = r''' int main () { *(volatile char *)0 = 0; - return 0; + return *(volatile char *)0; } ''' self.do_run(src, 'fault on write to 0' if not Settings.ASM_JS else 'abort()') @@ -6907,6 +6908,29 @@ at function.:blag printf("%i\n", a); } + char buf1[100], buf2[100], buf3[100], buf4[100]; + + int numItems = sscanf("level=4:ref=3", "%255[^:=]=%255[^:]:%255[^=]=%255c", buf1, buf2, buf3, buf4); + printf("%d, %s, %s, %s, %s\n", numItems, buf1, buf2, buf3, buf4); + + numItems = sscanf("def|456", "%[a-z]|%[0-9]", buf1, buf2); + printf("%d, %s, %s\n", numItems, buf1, buf2); + + numItems = sscanf("3-4,-ab", "%[-0-9],%[ab-z-]", buf1, buf2); + printf("%d, %s, %s\n", numItems, buf1, buf2); + + numItems = sscanf("Hello,World", "%[A-Za-z],%[^0-9]", buf1, buf2); + printf("%d, %s, %s\n", numItems, buf1, buf2); + + numItems = sscanf("Hello4711", "%[^0-9],%[^0-9]", buf1, buf2); + printf("%d, %s\n", numItems, buf1); + + numItems = sscanf("JavaScript", "%4[A-Za-z]", buf1); + printf("%d, %s\n", numItems, buf1); + + numItems = sscanf("[]", "%1[[]%1[]]", buf1, buf2); + printf("%d, %s, %s\n", numItems, buf1, buf2); + return 0; } ''' @@ -6914,7 +6938,14 @@ at function.:blag '1\n1499\n' + '5\n87,0.481565,0.059481,0,1\n' + '3\n-123,4294966531,-34\n' + - '1\n') + '1\n' + + '4, level, 4, ref, 3\n' + + '2, def, 456\n' + + '2, 3-4, -ab\n' + + '2, Hello, World\n' + + '1, Hello\n' + + '1, Java\n' + + '2, [, ]') def test_sscanf_2(self): # doubles @@ -7170,6 +7201,18 @@ date: 18.07.2013w; day 18, month 7, year 2013, extra: 201, 3 ''' self.do_run(src, '10 1.1 1.1 1.1'); + def test_sscanf_hex(self): + src = r''' + #include "stdio.h" + + int main(){ + unsigned int a, b; + sscanf("0x12AB 12AB", "%x %x", &a, &b); + printf("%d %d\n", a, b); + } + ''' + self.do_run(src, '4779 4779') + def test_langinfo(self): src = open(path_from_root('tests', 'langinfo', 'test.c'), 'r').read() expected = open(path_from_root('tests', 'langinfo', 'output.txt'), 'r').read() @@ -8894,6 +8937,8 @@ def process(filename): def test_cases(self): if Building.LLVM_OPTS: return self.skip("Our code is not exactly 'normal' llvm assembly") + emcc_args = self.emcc_args + try: os.environ['EMCC_LEAVE_INPUTS_RAW'] = '1' Settings.CHECK_OVERFLOWS = 0 @@ -8907,6 +8952,10 @@ def process(filename): if '_noasm' in shortname and Settings.ASM_JS: print self.skip('case "%s" not relevant for asm.js' % shortname) continue + self.emcc_args = emcc_args + if os.path.exists(shortname + '.emcc'): + if not self.emcc_args: continue + self.emcc_args = self.emcc_args + json.loads(open(shortname + '.emcc').read()) print >> sys.stderr, "Testing case '%s'..." % shortname output_file = path_from_root('tests', 'cases', shortname + '.txt') if Settings.QUANTUM_SIZE == 1: @@ -8927,6 +8976,7 @@ def process(filename): finally: del os.environ['EMCC_LEAVE_INPUTS_RAW'] + self.emcc_args = emcc_args def test_fuzz(self): if Settings.USE_TYPED_ARRAYS != 2: return self.skip('needs ta2') diff --git a/tests/test_other.py b/tests/test_other.py index 64be60fa..9f331439 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -295,7 +295,7 @@ f.close() make = make_commands[generator] cmake_cases = ['target_js', 'target_html'] - cmake_outputs = ['hello_world.js', 'hello_world_gles.html'] + cmake_outputs = ['test_cmake.js', 'hello_world_gles.html'] for i in range(0, 2): for configuration in ['Debug', 'Release']: # CMake can be invoked in two ways, using 'emconfigure cmake', or by directly running 'cmake'. @@ -342,7 +342,7 @@ f.close() # Run through node, if CMake produced a .js file. if cmake_outputs[i].endswith('.js'): ret = Popen(listify(NODE_JS) + [tempdirname + '/' + cmake_outputs[i]], stdout=PIPE).communicate()[0] - assert 'hello, world!' in ret, 'Running cmake-based .js application failed!' + self.assertTextDataIdentical(open(cmakelistsdir + '/out.txt', 'r').read().strip(), ret.strip()) finally: os.chdir(path_from_root('tests')) # Move away from the directory we are about to remove. shutil.rmtree(tempdirname) @@ -1665,10 +1665,10 @@ f.close() if multiprocessing.cpu_count() < 2: return self.skip('need multiple cores') try: os.environ['EMCC_DEBUG'] = '1' - os.environ['EMCC_CORES'] = '2' + os.environ['EMCC_CORES'] = '2' # standardize over machines for asm, linkable, chunks, js_chunks in [ - (0, 0, 3, 2), (0, 1, 3, 4), - (1, 0, 3, 2), (1, 1, 3, 4) + (0, 0, 2, 2), (0, 1, 2, 4), + (1, 0, 2, 2), (1, 1, 2, 4) ]: print asm, linkable, chunks, js_chunks output, err = Popen([PYTHON, EMCC, path_from_root('tests', 'hello_libcxx.cpp'), '-O1', '-s', 'LINKABLE=%d' % linkable, '-s', 'ASM_JS=%d' % asm] + (['-O2'] if asm else []), stdout=PIPE, stderr=PIPE).communicate() @@ -1755,7 +1755,7 @@ $ other=ay file... seeked= file. ''', output[0]) - self.assertIdentical('texte\n', output[1]) + self.assertContained('texte\n', output[1]) def test_emconfig(self): output = Popen([PYTHON, EMCONFIG, 'LLVM_ROOT'], stdout=PIPE, stderr=PIPE).communicate()[0].strip() diff --git a/tests/test_sanity.py b/tests/test_sanity.py index 4188afff..6fdf5ddd 100644 --- a/tests/test_sanity.py +++ b/tests/test_sanity.py @@ -478,7 +478,7 @@ fi (['--jcache'], 'hello_malloc.cpp', False, True, False, True, False, True, []), ([], 'hello_malloc.cpp', False, False, False, False, False, False, []), # new, huge file - ([], 'hello_libcxx.cpp', False, False, False, False, False, False, ('3 chunks',)), + ([], 'hello_libcxx.cpp', False, False, False, False, False, False, ('4 chunks',)), (['--jcache'], 'hello_libcxx.cpp', True, False, True, False, True, False, []), (['--jcache'], 'hello_libcxx.cpp', False, True, False, True, False, True, []), ([], 'hello_libcxx.cpp', False, False, False, False, False, False, []), diff --git a/tests/unistd/io.c b/tests/unistd/io.c index 0ff5f4fb..6bf22593 100644 --- a/tests/unistd/io.c +++ b/tests/unistd/io.c @@ -104,6 +104,12 @@ int main() { printf("errno: %d\n\n", errno); errno = 0; + printf("pread past end of file: %d\n", pread(f, readBuffer, sizeof readBuffer, 99999999999)); + printf("data: %s\n", readBuffer); + memset(readBuffer, 0, sizeof readBuffer); + printf("errno: %d\n\n", errno); + errno = 0; + printf("seek: %d\n", lseek(f, 3, SEEK_SET)); printf("errno: %d\n\n", errno); printf("partial read from file: %d\n", read(f, readBuffer, 3)); diff --git a/tests/unistd/io.out b/tests/unistd/io.out index 037d0c34..c979557e 100644 --- a/tests/unistd/io.out +++ b/tests/unistd/io.out @@ -31,6 +31,10 @@ read from file: 10 data: 1234567890 errno: 0 +pread past end of file: 0 +data: +errno: 0 + seek: 3 errno: 0 diff --git a/tests/unistd/login.out b/tests/unistd/login.out index 50e850ae..c1919c3c 100644 --- a/tests/unistd/login.out +++ b/tests/unistd/login.out @@ -3,7 +3,7 @@ errno: 0 gethostname/2 ret: -1 gethostname/2: em------------------------ -errno: 91 +errno: 36 gethostname/256 ret: 0 gethostname/256: emscripten diff --git a/tests/unistd/misc.out b/tests/unistd/misc.out index 8f03f688..ae641d57 100644 --- a/tests/unistd/misc.out +++ b/tests/unistd/misc.out @@ -11,8 +11,8 @@ lockf(good): 0, errno: 0 lockf(bad): -1, errno: 9 nice: 0, errno: 1 pause: -1, errno: 4 -pipe(good): -1, errno: 88 -pipe(bad): -1, errno: 88 +pipe(good): -1, errno: 38 +pipe(bad): -1, errno: 38 execl: -1, errno: 8 execle: -1, errno: 8 execlp: -1, errno: 8 @@ -29,8 +29,8 @@ alarm: 0, errno: 0 ualarm: 0, errno: 0 fork: -1, errno: 11 vfork: -1, errno: 11 -crypt: (null), errno: 88 -encrypt, errno: 88 +crypt: (null), errno: 38 +encrypt, errno: 38 getgid: 0, errno: 0 getegid: 0, errno: 0 getuid: 0, errno: 0 |