| 68 | } |
| 69 | |
| 70 | void c1(char *data, int size, void *arg) { // tests copying + buffer enlargement |
| 71 | assert((long)arg == stage); |
| 72 | if (stage == 1) { |
| 73 | printf("wait 0? %d\n", emscripten_get_worker_queue_size(w1)); |
| 74 | assert(emscripten_get_worker_queue_size(w1) == 0); |
| 75 | } |
| 76 | Info *x2 = (Info*)data; |
| 77 | assert(x2 != x && x2 != x+1 && x2 != x+2); |
| 78 | for (int i = 0; i < size/sizeof(Info); i++) { |
| 79 | printf("c1-%d\n", i); |
| 80 | printf(" %d, %.2f, %d, %.2f\n", x2[i].i, x2[i].f, x2[i].c, x2[i].d); |
| 81 | printf(" %d, %.2f, %d, %.2f\n", x[i].i, x[i].f, x[i].c, x[i].d); |
| 82 | assert(x2[i].i == x[i].i); |
| 83 | assert(x2[i].f == x[i].f); |
| 84 | assert(x2[i].c == x[i].c); |
| 85 | assert(x2[i].d == x[i].d); |
| 86 | } |
| 87 | if (stage < 2) { |
| 88 | emscripten_call_worker(w1, "one", (char*)x, sizeof(Info)*3, c1, (void*)2); |
| 89 | } else { |
| 90 | printf("wait 1? %d\n", emscripten_get_worker_queue_size(w1)); |
| 91 | assert(emscripten_get_worker_queue_size(w1) == 0); |
| 92 | emscripten_call_worker(w1, "two", (char*)&x[0], sizeof(Info), c2, (void*)3); |
| 93 | emscripten_call_worker(w1, "two", (char*)&x[1], sizeof(Info), c2, (void*)4); |
| 94 | emscripten_call_worker(w1, "two", (char*)&x[2], sizeof(Info), c2, (void*)5); |
| 95 | printf("wait 2? %d\n", emscripten_get_worker_queue_size(w1)); |
| 96 | assert(emscripten_get_worker_queue_size(w1) == 3); |
| 97 | } |
| 98 | stage++; |
| 99 | } |
| 100 | |
| 101 | int main() { |
| 102 | w1 = emscripten_create_worker("worker.js"); |