1414#define AUDIO_STACK_SIZE 2048
1515
1616// Define DISABLE_LOCKS to run the test without locking, which should statistically always fail
17- // #define DISABLE_LOCKS
17+ #define DISABLE_LOCKS
1818
1919// Internal, found in 'system/lib/pthread/threading_internal.h' (and requires building with -pthread)
2020int _emscripten_thread_supports_atomics_wait (void );
@@ -53,13 +53,13 @@ typedef struct {
5353
5454// Start values
5555void initDummy (Dummy * dummy ) {
56- dummy -> val0 = 4 ;
56+ dummy -> val0 = 1 ;
5757 dummy -> val1 = 1 ;
58- dummy -> val2 = 2 ;
58+ dummy -> val2 = 1 ;
5959}
6060
6161void printDummy (Dummy * dummy ) {
62- emscripten_outf ("Values: %u, %u, %u " , dummy -> val0 , dummy -> val1 , dummy -> val2 );
62+ emscripten_outf ("Values: 0x%08X, 0x%08X, 0x%08X " , dummy -> val0 , dummy -> val1 , dummy -> val2 );
6363}
6464
6565// Run a simple calculation that will only be stable *if* all values are atomically updated
@@ -70,18 +70,20 @@ void runCalcs(Dummy* dummy, int num) {
7070 int have = emscripten_lock_busyspin_wait_acquire (& testLock , 10 );
7171 assert (have );
7272#endif
73- dummy -> val0 += dummy -> val1 * dummy -> val2 ;
74- dummy -> val1 += dummy -> val2 * dummy -> val0 ;
75- dummy -> val2 += dummy -> val0 * dummy -> val1 ;
76- dummy -> val0 /= 4 ;
77- dummy -> val1 /= 3 ;
78- dummy -> val2 /= 2 ;
73+ dummy -> val0 += dummy -> val2 * 7 ;
74+ dummy -> val1 += dummy -> val0 * 7 ;
75+ dummy -> val2 += dummy -> val1 * 7 ;
76+ dummy -> val0 += dummy -> val2 / 3 ;
77+ dummy -> val1 += dummy -> val0 / 3 ;
78+ dummy -> val2 += dummy -> val1 / 3 ;
79+ #ifndef DISABLE_LOCKS
7980 emscripten_lock_release (& testLock );
81+ #endif
8082 }
8183}
8284
8385void stopping () {
84- emscripten_out ("Expect: 811100370, 759556424, 723197652 " );
86+ emscripten_out ("Expect: all values are equal " );
8587 emscripten_out ("Ending test" );
8688 emscripten_destroy_audio_context (context );
8789 emscripten_force_exit (0 );
@@ -132,10 +134,8 @@ bool mainLoop(double time, void* data) {
132134 break ;
133135 case TEST_DONE :
134136 printDummy ((Dummy * ) data );
135- // 32-bit maths with locks *should* result in these:
136- assert (((Dummy * ) data )-> val0 == 811100370
137- && ((Dummy * ) data )-> val1 == 759556424
138- && ((Dummy * ) data )-> val2 == 723197652 );
137+ assert (((Dummy * ) data )-> val0 == ((Dummy * ) data )-> val1
138+ && ((Dummy * ) data )-> val1 == ((Dummy * ) data )-> val2 );
139139 stopping ();
140140 return false;
141141 }
0 commit comments