ON Semiconductor / mbed-os

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
group-onsemi
Date:
Wed Jan 25 20:34:15 2017 +0000
Revision:
0:098463de4c5d
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 /*
group-onsemi 0:098463de4c5d 2 * Testing framework for the events library
group-onsemi 0:098463de4c5d 3 *
group-onsemi 0:098463de4c5d 4 * Copyright (c) 2016 Christopher Haster
group-onsemi 0:098463de4c5d 5 *
group-onsemi 0:098463de4c5d 6 * Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 7 * you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 8 * You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 9 *
group-onsemi 0:098463de4c5d 10 * http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 11 *
group-onsemi 0:098463de4c5d 12 * Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 13 * distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 15 * See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 16 * limitations under the License.
group-onsemi 0:098463de4c5d 17 */
group-onsemi 0:098463de4c5d 18 #include "equeue.h"
group-onsemi 0:098463de4c5d 19 #include <unistd.h>
group-onsemi 0:098463de4c5d 20 #include <stdio.h>
group-onsemi 0:098463de4c5d 21 #include <setjmp.h>
group-onsemi 0:098463de4c5d 22 #include <stdint.h>
group-onsemi 0:098463de4c5d 23 #include <stdlib.h>
group-onsemi 0:098463de4c5d 24 #include <pthread.h>
group-onsemi 0:098463de4c5d 25
group-onsemi 0:098463de4c5d 26
group-onsemi 0:098463de4c5d 27 // Testing setup
group-onsemi 0:098463de4c5d 28 static jmp_buf test_buf;
group-onsemi 0:098463de4c5d 29 static int test_line;
group-onsemi 0:098463de4c5d 30 static int test_failure;
group-onsemi 0:098463de4c5d 31
group-onsemi 0:098463de4c5d 32 #define test_assert(test) ({ \
group-onsemi 0:098463de4c5d 33 if (!(test)) { \
group-onsemi 0:098463de4c5d 34 test_line = __LINE__; \
group-onsemi 0:098463de4c5d 35 longjmp(test_buf, 1); \
group-onsemi 0:098463de4c5d 36 } \
group-onsemi 0:098463de4c5d 37 })
group-onsemi 0:098463de4c5d 38
group-onsemi 0:098463de4c5d 39 #define test_run(func, ...) ({ \
group-onsemi 0:098463de4c5d 40 printf("%s: ...", #func); \
group-onsemi 0:098463de4c5d 41 fflush(stdout); \
group-onsemi 0:098463de4c5d 42 \
group-onsemi 0:098463de4c5d 43 if (!setjmp(test_buf)) { \
group-onsemi 0:098463de4c5d 44 func(__VA_ARGS__); \
group-onsemi 0:098463de4c5d 45 printf("\r%s: \e[32mpassed\e[0m\n", #func); \
group-onsemi 0:098463de4c5d 46 } else { \
group-onsemi 0:098463de4c5d 47 printf("\r%s: \e[31mfailed\e[0m at line %d\n", #func, test_line); \
group-onsemi 0:098463de4c5d 48 test_failure = true; \
group-onsemi 0:098463de4c5d 49 } \
group-onsemi 0:098463de4c5d 50 })
group-onsemi 0:098463de4c5d 51
group-onsemi 0:098463de4c5d 52
group-onsemi 0:098463de4c5d 53 // Test functions
group-onsemi 0:098463de4c5d 54 void pass_func(void *eh) {
group-onsemi 0:098463de4c5d 55 }
group-onsemi 0:098463de4c5d 56
group-onsemi 0:098463de4c5d 57 void simple_func(void *p) {
group-onsemi 0:098463de4c5d 58 (*(int *)p)++;
group-onsemi 0:098463de4c5d 59 }
group-onsemi 0:098463de4c5d 60
group-onsemi 0:098463de4c5d 61 void sloth_func(void *p) {
group-onsemi 0:098463de4c5d 62 usleep(10000);
group-onsemi 0:098463de4c5d 63 (*(int *)p)++;
group-onsemi 0:098463de4c5d 64 }
group-onsemi 0:098463de4c5d 65
group-onsemi 0:098463de4c5d 66 struct indirect {
group-onsemi 0:098463de4c5d 67 int *touched;
group-onsemi 0:098463de4c5d 68 uint8_t buffer[7];
group-onsemi 0:098463de4c5d 69 };
group-onsemi 0:098463de4c5d 70
group-onsemi 0:098463de4c5d 71 void indirect_func(void *p) {
group-onsemi 0:098463de4c5d 72 struct indirect *i = (struct indirect*)p;
group-onsemi 0:098463de4c5d 73 (*i->touched)++;
group-onsemi 0:098463de4c5d 74 }
group-onsemi 0:098463de4c5d 75
group-onsemi 0:098463de4c5d 76 struct timing {
group-onsemi 0:098463de4c5d 77 unsigned tick;
group-onsemi 0:098463de4c5d 78 unsigned delay;
group-onsemi 0:098463de4c5d 79 };
group-onsemi 0:098463de4c5d 80
group-onsemi 0:098463de4c5d 81 void timing_func(void *p) {
group-onsemi 0:098463de4c5d 82 struct timing *timing = (struct timing*)p;
group-onsemi 0:098463de4c5d 83 unsigned tick = equeue_tick();
group-onsemi 0:098463de4c5d 84
group-onsemi 0:098463de4c5d 85 unsigned t1 = timing->delay;
group-onsemi 0:098463de4c5d 86 unsigned t2 = tick - timing->tick;
group-onsemi 0:098463de4c5d 87 test_assert(t1 > t2 - 10 && t1 < t2 + 10);
group-onsemi 0:098463de4c5d 88
group-onsemi 0:098463de4c5d 89 timing->tick = tick;
group-onsemi 0:098463de4c5d 90 }
group-onsemi 0:098463de4c5d 91
group-onsemi 0:098463de4c5d 92 struct fragment {
group-onsemi 0:098463de4c5d 93 equeue_t *q;
group-onsemi 0:098463de4c5d 94 size_t size;
group-onsemi 0:098463de4c5d 95 struct timing timing;
group-onsemi 0:098463de4c5d 96 };
group-onsemi 0:098463de4c5d 97
group-onsemi 0:098463de4c5d 98 void fragment_func(void *p) {
group-onsemi 0:098463de4c5d 99 struct fragment *fragment = (struct fragment*)p;
group-onsemi 0:098463de4c5d 100 timing_func(&fragment->timing);
group-onsemi 0:098463de4c5d 101
group-onsemi 0:098463de4c5d 102 struct fragment *nfragment = equeue_alloc(fragment->q, fragment->size);
group-onsemi 0:098463de4c5d 103 test_assert(nfragment);
group-onsemi 0:098463de4c5d 104
group-onsemi 0:098463de4c5d 105 *nfragment = *fragment;
group-onsemi 0:098463de4c5d 106 equeue_event_delay(nfragment, fragment->timing.delay);
group-onsemi 0:098463de4c5d 107
group-onsemi 0:098463de4c5d 108 int id = equeue_post(nfragment->q, fragment_func, nfragment);
group-onsemi 0:098463de4c5d 109 test_assert(id);
group-onsemi 0:098463de4c5d 110 }
group-onsemi 0:098463de4c5d 111
group-onsemi 0:098463de4c5d 112 struct cancel {
group-onsemi 0:098463de4c5d 113 equeue_t *q;
group-onsemi 0:098463de4c5d 114 int id;
group-onsemi 0:098463de4c5d 115 };
group-onsemi 0:098463de4c5d 116
group-onsemi 0:098463de4c5d 117 void cancel_func(void *p) {
group-onsemi 0:098463de4c5d 118 struct cancel *cancel = (struct cancel *)p;
group-onsemi 0:098463de4c5d 119 equeue_cancel(cancel->q, cancel->id);
group-onsemi 0:098463de4c5d 120 }
group-onsemi 0:098463de4c5d 121
group-onsemi 0:098463de4c5d 122 struct nest {
group-onsemi 0:098463de4c5d 123 equeue_t *q;
group-onsemi 0:098463de4c5d 124 void (*cb)(void *);
group-onsemi 0:098463de4c5d 125 void *data;
group-onsemi 0:098463de4c5d 126 };
group-onsemi 0:098463de4c5d 127
group-onsemi 0:098463de4c5d 128 void nest_func(void *p) {
group-onsemi 0:098463de4c5d 129 struct nest *nest = (struct nest *)p;
group-onsemi 0:098463de4c5d 130 equeue_call(nest->q, nest->cb, nest->data);
group-onsemi 0:098463de4c5d 131
group-onsemi 0:098463de4c5d 132 usleep(10000);
group-onsemi 0:098463de4c5d 133 }
group-onsemi 0:098463de4c5d 134
group-onsemi 0:098463de4c5d 135
group-onsemi 0:098463de4c5d 136 // Simple call tests
group-onsemi 0:098463de4c5d 137 void simple_call_test(void) {
group-onsemi 0:098463de4c5d 138 equeue_t q;
group-onsemi 0:098463de4c5d 139 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 140 test_assert(!err);
group-onsemi 0:098463de4c5d 141
group-onsemi 0:098463de4c5d 142 bool touched = false;
group-onsemi 0:098463de4c5d 143 equeue_call(&q, simple_func, &touched);
group-onsemi 0:098463de4c5d 144 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 145 test_assert(touched);
group-onsemi 0:098463de4c5d 146
group-onsemi 0:098463de4c5d 147 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 148 }
group-onsemi 0:098463de4c5d 149
group-onsemi 0:098463de4c5d 150 void simple_call_in_test(void) {
group-onsemi 0:098463de4c5d 151 equeue_t q;
group-onsemi 0:098463de4c5d 152 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 153 test_assert(!err);
group-onsemi 0:098463de4c5d 154
group-onsemi 0:098463de4c5d 155 bool touched = false;
group-onsemi 0:098463de4c5d 156 int id = equeue_call_in(&q, 10, simple_func, &touched);
group-onsemi 0:098463de4c5d 157 test_assert(id);
group-onsemi 0:098463de4c5d 158
group-onsemi 0:098463de4c5d 159 equeue_dispatch(&q, 15);
group-onsemi 0:098463de4c5d 160 test_assert(touched);
group-onsemi 0:098463de4c5d 161
group-onsemi 0:098463de4c5d 162 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 163 }
group-onsemi 0:098463de4c5d 164
group-onsemi 0:098463de4c5d 165 void simple_call_every_test(void) {
group-onsemi 0:098463de4c5d 166 equeue_t q;
group-onsemi 0:098463de4c5d 167 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 168 test_assert(!err);
group-onsemi 0:098463de4c5d 169
group-onsemi 0:098463de4c5d 170 bool touched = false;
group-onsemi 0:098463de4c5d 171 int id = equeue_call_every(&q, 10, simple_func, &touched);
group-onsemi 0:098463de4c5d 172 test_assert(id);
group-onsemi 0:098463de4c5d 173
group-onsemi 0:098463de4c5d 174 equeue_dispatch(&q, 15);
group-onsemi 0:098463de4c5d 175 test_assert(touched);
group-onsemi 0:098463de4c5d 176
group-onsemi 0:098463de4c5d 177 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 178 }
group-onsemi 0:098463de4c5d 179
group-onsemi 0:098463de4c5d 180 void simple_post_test(void) {
group-onsemi 0:098463de4c5d 181 equeue_t q;
group-onsemi 0:098463de4c5d 182 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 183 test_assert(!err);
group-onsemi 0:098463de4c5d 184
group-onsemi 0:098463de4c5d 185 int touched = false;
group-onsemi 0:098463de4c5d 186 struct indirect *i = equeue_alloc(&q, sizeof(struct indirect));
group-onsemi 0:098463de4c5d 187 test_assert(i);
group-onsemi 0:098463de4c5d 188
group-onsemi 0:098463de4c5d 189 i->touched = &touched;
group-onsemi 0:098463de4c5d 190 int id = equeue_post(&q, indirect_func, i);
group-onsemi 0:098463de4c5d 191 test_assert(id);
group-onsemi 0:098463de4c5d 192
group-onsemi 0:098463de4c5d 193 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 194 test_assert(*i->touched);
group-onsemi 0:098463de4c5d 195
group-onsemi 0:098463de4c5d 196 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 197 }
group-onsemi 0:098463de4c5d 198
group-onsemi 0:098463de4c5d 199 // Misc tests
group-onsemi 0:098463de4c5d 200 void destructor_test(void) {
group-onsemi 0:098463de4c5d 201 equeue_t q;
group-onsemi 0:098463de4c5d 202 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 203 test_assert(!err);
group-onsemi 0:098463de4c5d 204
group-onsemi 0:098463de4c5d 205 int touched;
group-onsemi 0:098463de4c5d 206 struct indirect *e;
group-onsemi 0:098463de4c5d 207 int ids[3];
group-onsemi 0:098463de4c5d 208
group-onsemi 0:098463de4c5d 209 touched = 0;
group-onsemi 0:098463de4c5d 210 for (int i = 0; i < 3; i++) {
group-onsemi 0:098463de4c5d 211 e = equeue_alloc(&q, sizeof(struct indirect));
group-onsemi 0:098463de4c5d 212 test_assert(e);
group-onsemi 0:098463de4c5d 213
group-onsemi 0:098463de4c5d 214 e->touched = &touched;
group-onsemi 0:098463de4c5d 215 equeue_event_dtor(e, indirect_func);
group-onsemi 0:098463de4c5d 216 int id = equeue_post(&q, pass_func, e);
group-onsemi 0:098463de4c5d 217 test_assert(id);
group-onsemi 0:098463de4c5d 218 }
group-onsemi 0:098463de4c5d 219
group-onsemi 0:098463de4c5d 220 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 221 test_assert(touched == 3);
group-onsemi 0:098463de4c5d 222
group-onsemi 0:098463de4c5d 223 touched = 0;
group-onsemi 0:098463de4c5d 224 for (int i = 0; i < 3; i++) {
group-onsemi 0:098463de4c5d 225 e = equeue_alloc(&q, sizeof(struct indirect));
group-onsemi 0:098463de4c5d 226 test_assert(e);
group-onsemi 0:098463de4c5d 227
group-onsemi 0:098463de4c5d 228 e->touched = &touched;
group-onsemi 0:098463de4c5d 229 equeue_event_dtor(e, indirect_func);
group-onsemi 0:098463de4c5d 230 ids[i] = equeue_post(&q, pass_func, e);
group-onsemi 0:098463de4c5d 231 test_assert(ids[i]);
group-onsemi 0:098463de4c5d 232 }
group-onsemi 0:098463de4c5d 233
group-onsemi 0:098463de4c5d 234 for (int i = 0; i < 3; i++) {
group-onsemi 0:098463de4c5d 235 equeue_cancel(&q, ids[i]);
group-onsemi 0:098463de4c5d 236 }
group-onsemi 0:098463de4c5d 237
group-onsemi 0:098463de4c5d 238 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 239 test_assert(touched == 3);
group-onsemi 0:098463de4c5d 240
group-onsemi 0:098463de4c5d 241 touched = 0;
group-onsemi 0:098463de4c5d 242 for (int i = 0; i < 3; i++) {
group-onsemi 0:098463de4c5d 243 e = equeue_alloc(&q, sizeof(struct indirect));
group-onsemi 0:098463de4c5d 244 test_assert(e);
group-onsemi 0:098463de4c5d 245
group-onsemi 0:098463de4c5d 246 e->touched = &touched;
group-onsemi 0:098463de4c5d 247 equeue_event_dtor(e, indirect_func);
group-onsemi 0:098463de4c5d 248 int id = equeue_post(&q, pass_func, e);
group-onsemi 0:098463de4c5d 249 test_assert(id);
group-onsemi 0:098463de4c5d 250 }
group-onsemi 0:098463de4c5d 251
group-onsemi 0:098463de4c5d 252 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 253 test_assert(touched == 3);
group-onsemi 0:098463de4c5d 254 }
group-onsemi 0:098463de4c5d 255
group-onsemi 0:098463de4c5d 256 void allocation_failure_test(void) {
group-onsemi 0:098463de4c5d 257 equeue_t q;
group-onsemi 0:098463de4c5d 258 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 259 test_assert(!err);
group-onsemi 0:098463de4c5d 260
group-onsemi 0:098463de4c5d 261 void *p = equeue_alloc(&q, 4096);
group-onsemi 0:098463de4c5d 262 test_assert(!p);
group-onsemi 0:098463de4c5d 263
group-onsemi 0:098463de4c5d 264 for (int i = 0; i < 100; i++) {
group-onsemi 0:098463de4c5d 265 p = equeue_alloc(&q, 0);
group-onsemi 0:098463de4c5d 266 }
group-onsemi 0:098463de4c5d 267 test_assert(!p);
group-onsemi 0:098463de4c5d 268
group-onsemi 0:098463de4c5d 269 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 270 }
group-onsemi 0:098463de4c5d 271
group-onsemi 0:098463de4c5d 272 void cancel_test(int N) {
group-onsemi 0:098463de4c5d 273 equeue_t q;
group-onsemi 0:098463de4c5d 274 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 275 test_assert(!err);
group-onsemi 0:098463de4c5d 276
group-onsemi 0:098463de4c5d 277 bool touched = false;
group-onsemi 0:098463de4c5d 278 int *ids = malloc(N*sizeof(int));
group-onsemi 0:098463de4c5d 279
group-onsemi 0:098463de4c5d 280 for (int i = 0; i < N; i++) {
group-onsemi 0:098463de4c5d 281 ids[i] = equeue_call(&q, simple_func, &touched);
group-onsemi 0:098463de4c5d 282 }
group-onsemi 0:098463de4c5d 283
group-onsemi 0:098463de4c5d 284 for (int i = N-1; i >= 0; i--) {
group-onsemi 0:098463de4c5d 285 equeue_cancel(&q, ids[i]);
group-onsemi 0:098463de4c5d 286 }
group-onsemi 0:098463de4c5d 287
group-onsemi 0:098463de4c5d 288 free(ids);
group-onsemi 0:098463de4c5d 289
group-onsemi 0:098463de4c5d 290 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 291 test_assert(!touched);
group-onsemi 0:098463de4c5d 292
group-onsemi 0:098463de4c5d 293 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 294 }
group-onsemi 0:098463de4c5d 295
group-onsemi 0:098463de4c5d 296 void cancel_inflight_test(void) {
group-onsemi 0:098463de4c5d 297 equeue_t q;
group-onsemi 0:098463de4c5d 298 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 299 test_assert(!err);
group-onsemi 0:098463de4c5d 300
group-onsemi 0:098463de4c5d 301 bool touched = false;
group-onsemi 0:098463de4c5d 302
group-onsemi 0:098463de4c5d 303 int id = equeue_call(&q, simple_func, &touched);
group-onsemi 0:098463de4c5d 304 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 305
group-onsemi 0:098463de4c5d 306 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 307 test_assert(!touched);
group-onsemi 0:098463de4c5d 308
group-onsemi 0:098463de4c5d 309 id = equeue_call(&q, simple_func, &touched);
group-onsemi 0:098463de4c5d 310 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 311
group-onsemi 0:098463de4c5d 312 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 313 test_assert(!touched);
group-onsemi 0:098463de4c5d 314
group-onsemi 0:098463de4c5d 315 struct cancel *cancel = equeue_alloc(&q, sizeof(struct cancel));
group-onsemi 0:098463de4c5d 316 test_assert(cancel);
group-onsemi 0:098463de4c5d 317 cancel->q = &q;
group-onsemi 0:098463de4c5d 318 cancel->id = 0;
group-onsemi 0:098463de4c5d 319
group-onsemi 0:098463de4c5d 320 id = equeue_post(&q, cancel_func, cancel);
group-onsemi 0:098463de4c5d 321 test_assert(id);
group-onsemi 0:098463de4c5d 322
group-onsemi 0:098463de4c5d 323 cancel->id = equeue_call(&q, simple_func, &touched);
group-onsemi 0:098463de4c5d 324
group-onsemi 0:098463de4c5d 325 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 326 test_assert(!touched);
group-onsemi 0:098463de4c5d 327
group-onsemi 0:098463de4c5d 328 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 329 }
group-onsemi 0:098463de4c5d 330
group-onsemi 0:098463de4c5d 331 void cancel_unnecessarily_test(void) {
group-onsemi 0:098463de4c5d 332 equeue_t q;
group-onsemi 0:098463de4c5d 333 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 334 test_assert(!err);
group-onsemi 0:098463de4c5d 335
group-onsemi 0:098463de4c5d 336 int id = equeue_call(&q, pass_func, 0);
group-onsemi 0:098463de4c5d 337 for (int i = 0; i < 5; i++) {
group-onsemi 0:098463de4c5d 338 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 339 }
group-onsemi 0:098463de4c5d 340
group-onsemi 0:098463de4c5d 341 id = equeue_call(&q, pass_func, 0);
group-onsemi 0:098463de4c5d 342 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 343 for (int i = 0; i < 5; i++) {
group-onsemi 0:098463de4c5d 344 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 345 }
group-onsemi 0:098463de4c5d 346
group-onsemi 0:098463de4c5d 347 bool touched = false;
group-onsemi 0:098463de4c5d 348 equeue_call(&q, simple_func, &touched);
group-onsemi 0:098463de4c5d 349 for (int i = 0; i < 5; i++) {
group-onsemi 0:098463de4c5d 350 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 351 }
group-onsemi 0:098463de4c5d 352
group-onsemi 0:098463de4c5d 353 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 354 test_assert(touched);
group-onsemi 0:098463de4c5d 355
group-onsemi 0:098463de4c5d 356 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 357 }
group-onsemi 0:098463de4c5d 358
group-onsemi 0:098463de4c5d 359 void loop_protect_test(void) {
group-onsemi 0:098463de4c5d 360 equeue_t q;
group-onsemi 0:098463de4c5d 361 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 362 test_assert(!err);
group-onsemi 0:098463de4c5d 363
group-onsemi 0:098463de4c5d 364 bool touched = false;
group-onsemi 0:098463de4c5d 365 equeue_call_every(&q, 0, simple_func, &touched);
group-onsemi 0:098463de4c5d 366
group-onsemi 0:098463de4c5d 367 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 368 test_assert(touched);
group-onsemi 0:098463de4c5d 369
group-onsemi 0:098463de4c5d 370 touched = false;
group-onsemi 0:098463de4c5d 371 equeue_call_every(&q, 1, simple_func, &touched);
group-onsemi 0:098463de4c5d 372
group-onsemi 0:098463de4c5d 373 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 374 test_assert(touched);
group-onsemi 0:098463de4c5d 375
group-onsemi 0:098463de4c5d 376 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 377 }
group-onsemi 0:098463de4c5d 378
group-onsemi 0:098463de4c5d 379 void break_test(void) {
group-onsemi 0:098463de4c5d 380 equeue_t q;
group-onsemi 0:098463de4c5d 381 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 382 test_assert(!err);
group-onsemi 0:098463de4c5d 383
group-onsemi 0:098463de4c5d 384 bool touched = false;
group-onsemi 0:098463de4c5d 385 equeue_call_every(&q, 0, simple_func, &touched);
group-onsemi 0:098463de4c5d 386
group-onsemi 0:098463de4c5d 387 equeue_break(&q);
group-onsemi 0:098463de4c5d 388 equeue_dispatch(&q, -1);
group-onsemi 0:098463de4c5d 389 test_assert(touched);
group-onsemi 0:098463de4c5d 390
group-onsemi 0:098463de4c5d 391 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 392 }
group-onsemi 0:098463de4c5d 393
group-onsemi 0:098463de4c5d 394 void period_test(void) {
group-onsemi 0:098463de4c5d 395 equeue_t q;
group-onsemi 0:098463de4c5d 396 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 397 test_assert(!err);
group-onsemi 0:098463de4c5d 398
group-onsemi 0:098463de4c5d 399 int count = 0;
group-onsemi 0:098463de4c5d 400 equeue_call_every(&q, 10, simple_func, &count);
group-onsemi 0:098463de4c5d 401
group-onsemi 0:098463de4c5d 402 equeue_dispatch(&q, 55);
group-onsemi 0:098463de4c5d 403 test_assert(count == 5);
group-onsemi 0:098463de4c5d 404
group-onsemi 0:098463de4c5d 405 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 406 }
group-onsemi 0:098463de4c5d 407
group-onsemi 0:098463de4c5d 408 void nested_test(void) {
group-onsemi 0:098463de4c5d 409 equeue_t q;
group-onsemi 0:098463de4c5d 410 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 411 test_assert(!err);
group-onsemi 0:098463de4c5d 412
group-onsemi 0:098463de4c5d 413 int touched = 0;
group-onsemi 0:098463de4c5d 414 struct nest *nest = equeue_alloc(&q, sizeof(struct nest));
group-onsemi 0:098463de4c5d 415 test_assert(nest);
group-onsemi 0:098463de4c5d 416 nest->q = &q;
group-onsemi 0:098463de4c5d 417 nest->cb = simple_func;
group-onsemi 0:098463de4c5d 418 nest->data = &touched;
group-onsemi 0:098463de4c5d 419
group-onsemi 0:098463de4c5d 420 int id = equeue_post(&q, nest_func, nest);
group-onsemi 0:098463de4c5d 421 test_assert(id);
group-onsemi 0:098463de4c5d 422
group-onsemi 0:098463de4c5d 423 equeue_dispatch(&q, 5);
group-onsemi 0:098463de4c5d 424 test_assert(touched == 0);
group-onsemi 0:098463de4c5d 425
group-onsemi 0:098463de4c5d 426 equeue_dispatch(&q, 5);
group-onsemi 0:098463de4c5d 427 test_assert(touched == 1);
group-onsemi 0:098463de4c5d 428
group-onsemi 0:098463de4c5d 429 touched = 0;
group-onsemi 0:098463de4c5d 430 nest = equeue_alloc(&q, sizeof(struct nest));
group-onsemi 0:098463de4c5d 431 test_assert(nest);
group-onsemi 0:098463de4c5d 432 nest->q = &q;
group-onsemi 0:098463de4c5d 433 nest->cb = simple_func;
group-onsemi 0:098463de4c5d 434 nest->data = &touched;
group-onsemi 0:098463de4c5d 435
group-onsemi 0:098463de4c5d 436 id = equeue_post(&q, nest_func, nest);
group-onsemi 0:098463de4c5d 437 test_assert(id);
group-onsemi 0:098463de4c5d 438
group-onsemi 0:098463de4c5d 439 equeue_dispatch(&q, 20);
group-onsemi 0:098463de4c5d 440 test_assert(touched == 1);
group-onsemi 0:098463de4c5d 441
group-onsemi 0:098463de4c5d 442 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 443 }
group-onsemi 0:098463de4c5d 444
group-onsemi 0:098463de4c5d 445 void sloth_test(void) {
group-onsemi 0:098463de4c5d 446 equeue_t q;
group-onsemi 0:098463de4c5d 447 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 448 test_assert(!err);
group-onsemi 0:098463de4c5d 449
group-onsemi 0:098463de4c5d 450 int touched = 0;
group-onsemi 0:098463de4c5d 451 int id = equeue_call(&q, sloth_func, &touched);
group-onsemi 0:098463de4c5d 452 test_assert(id);
group-onsemi 0:098463de4c5d 453
group-onsemi 0:098463de4c5d 454 id = equeue_call_in(&q, 5, simple_func, &touched);
group-onsemi 0:098463de4c5d 455 test_assert(id);
group-onsemi 0:098463de4c5d 456
group-onsemi 0:098463de4c5d 457 id = equeue_call_in(&q, 15, simple_func, &touched);
group-onsemi 0:098463de4c5d 458 test_assert(id);
group-onsemi 0:098463de4c5d 459
group-onsemi 0:098463de4c5d 460 equeue_dispatch(&q, 20);
group-onsemi 0:098463de4c5d 461 test_assert(touched == 3);
group-onsemi 0:098463de4c5d 462
group-onsemi 0:098463de4c5d 463 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 464 }
group-onsemi 0:098463de4c5d 465
group-onsemi 0:098463de4c5d 466 void *multithread_thread(void *p) {
group-onsemi 0:098463de4c5d 467 equeue_t *q = (equeue_t *)p;
group-onsemi 0:098463de4c5d 468 equeue_dispatch(q, -1);
group-onsemi 0:098463de4c5d 469 return 0;
group-onsemi 0:098463de4c5d 470 }
group-onsemi 0:098463de4c5d 471
group-onsemi 0:098463de4c5d 472 void multithread_test(void) {
group-onsemi 0:098463de4c5d 473 equeue_t q;
group-onsemi 0:098463de4c5d 474 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 475 test_assert(!err);
group-onsemi 0:098463de4c5d 476
group-onsemi 0:098463de4c5d 477 int touched = 0;
group-onsemi 0:098463de4c5d 478 equeue_call_every(&q, 1, simple_func, &touched);
group-onsemi 0:098463de4c5d 479
group-onsemi 0:098463de4c5d 480 pthread_t thread;
group-onsemi 0:098463de4c5d 481 err = pthread_create(&thread, 0, multithread_thread, &q);
group-onsemi 0:098463de4c5d 482 test_assert(!err);
group-onsemi 0:098463de4c5d 483
group-onsemi 0:098463de4c5d 484 usleep(10000);
group-onsemi 0:098463de4c5d 485 equeue_break(&q);
group-onsemi 0:098463de4c5d 486 err = pthread_join(thread, 0);
group-onsemi 0:098463de4c5d 487 test_assert(!err);
group-onsemi 0:098463de4c5d 488
group-onsemi 0:098463de4c5d 489 test_assert(touched);
group-onsemi 0:098463de4c5d 490
group-onsemi 0:098463de4c5d 491 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 492 }
group-onsemi 0:098463de4c5d 493
group-onsemi 0:098463de4c5d 494 void background_func(void *p, int ms) {
group-onsemi 0:098463de4c5d 495 *(unsigned *)p = ms;
group-onsemi 0:098463de4c5d 496 }
group-onsemi 0:098463de4c5d 497
group-onsemi 0:098463de4c5d 498 void background_test(void) {
group-onsemi 0:098463de4c5d 499 equeue_t q;
group-onsemi 0:098463de4c5d 500 int err = equeue_create(&q, 2048);
group-onsemi 0:098463de4c5d 501 test_assert(!err);
group-onsemi 0:098463de4c5d 502
group-onsemi 0:098463de4c5d 503 int id = equeue_call_in(&q, 20, pass_func, 0);
group-onsemi 0:098463de4c5d 504 test_assert(id);
group-onsemi 0:098463de4c5d 505
group-onsemi 0:098463de4c5d 506 unsigned ms;
group-onsemi 0:098463de4c5d 507 equeue_background(&q, background_func, &ms);
group-onsemi 0:098463de4c5d 508 test_assert(ms == 20);
group-onsemi 0:098463de4c5d 509
group-onsemi 0:098463de4c5d 510 id = equeue_call_in(&q, 10, pass_func, 0);
group-onsemi 0:098463de4c5d 511 test_assert(id);
group-onsemi 0:098463de4c5d 512 test_assert(ms == 10);
group-onsemi 0:098463de4c5d 513
group-onsemi 0:098463de4c5d 514 id = equeue_call(&q, pass_func, 0);
group-onsemi 0:098463de4c5d 515 test_assert(id);
group-onsemi 0:098463de4c5d 516 test_assert(ms == 0);
group-onsemi 0:098463de4c5d 517
group-onsemi 0:098463de4c5d 518 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 519 test_assert(ms == 10);
group-onsemi 0:098463de4c5d 520
group-onsemi 0:098463de4c5d 521 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 522 test_assert(ms == -1);
group-onsemi 0:098463de4c5d 523 }
group-onsemi 0:098463de4c5d 524
group-onsemi 0:098463de4c5d 525 void chain_test(void) {
group-onsemi 0:098463de4c5d 526 equeue_t q1;
group-onsemi 0:098463de4c5d 527 int err = equeue_create(&q1, 2048);
group-onsemi 0:098463de4c5d 528 test_assert(!err);
group-onsemi 0:098463de4c5d 529
group-onsemi 0:098463de4c5d 530 equeue_t q2;
group-onsemi 0:098463de4c5d 531 err = equeue_create(&q2, 2048);
group-onsemi 0:098463de4c5d 532 test_assert(!err);
group-onsemi 0:098463de4c5d 533
group-onsemi 0:098463de4c5d 534 equeue_chain(&q2, &q1);
group-onsemi 0:098463de4c5d 535
group-onsemi 0:098463de4c5d 536 int touched = 0;
group-onsemi 0:098463de4c5d 537
group-onsemi 0:098463de4c5d 538 int id1 = equeue_call_in(&q1, 20, simple_func, &touched);
group-onsemi 0:098463de4c5d 539 int id2 = equeue_call_in(&q2, 20, simple_func, &touched);
group-onsemi 0:098463de4c5d 540 test_assert(id1 && id2);
group-onsemi 0:098463de4c5d 541
group-onsemi 0:098463de4c5d 542 id1 = equeue_call(&q1, simple_func, &touched);
group-onsemi 0:098463de4c5d 543 id2 = equeue_call(&q2, simple_func, &touched);
group-onsemi 0:098463de4c5d 544 test_assert(id1 && id2);
group-onsemi 0:098463de4c5d 545
group-onsemi 0:098463de4c5d 546 id1 = equeue_call_in(&q1, 5, simple_func, &touched);
group-onsemi 0:098463de4c5d 547 id2 = equeue_call_in(&q2, 5, simple_func, &touched);
group-onsemi 0:098463de4c5d 548 test_assert(id1 && id2);
group-onsemi 0:098463de4c5d 549
group-onsemi 0:098463de4c5d 550 equeue_cancel(&q1, id1);
group-onsemi 0:098463de4c5d 551 equeue_cancel(&q2, id2);
group-onsemi 0:098463de4c5d 552
group-onsemi 0:098463de4c5d 553 id1 = equeue_call_in(&q1, 10, simple_func, &touched);
group-onsemi 0:098463de4c5d 554 id2 = equeue_call_in(&q2, 10, simple_func, &touched);
group-onsemi 0:098463de4c5d 555 test_assert(id1 && id2);
group-onsemi 0:098463de4c5d 556
group-onsemi 0:098463de4c5d 557 equeue_dispatch(&q1, 30);
group-onsemi 0:098463de4c5d 558
group-onsemi 0:098463de4c5d 559 test_assert(touched == 6);
group-onsemi 0:098463de4c5d 560
group-onsemi 0:098463de4c5d 561 equeue_destroy(&q1);
group-onsemi 0:098463de4c5d 562 equeue_destroy(&q2);
group-onsemi 0:098463de4c5d 563 }
group-onsemi 0:098463de4c5d 564
group-onsemi 0:098463de4c5d 565 void unchain_test(void) {
group-onsemi 0:098463de4c5d 566 equeue_t q1;
group-onsemi 0:098463de4c5d 567 int err = equeue_create(&q1, 2048);
group-onsemi 0:098463de4c5d 568 test_assert(!err);
group-onsemi 0:098463de4c5d 569
group-onsemi 0:098463de4c5d 570 equeue_t q2;
group-onsemi 0:098463de4c5d 571 err = equeue_create(&q2, 2048);
group-onsemi 0:098463de4c5d 572 test_assert(!err);
group-onsemi 0:098463de4c5d 573
group-onsemi 0:098463de4c5d 574 equeue_chain(&q2, &q1);
group-onsemi 0:098463de4c5d 575
group-onsemi 0:098463de4c5d 576 int touched = 0;
group-onsemi 0:098463de4c5d 577 int id1 = equeue_call(&q1, simple_func, &touched);
group-onsemi 0:098463de4c5d 578 int id2 = equeue_call(&q2, simple_func, &touched);
group-onsemi 0:098463de4c5d 579 test_assert(id1 && id2);
group-onsemi 0:098463de4c5d 580
group-onsemi 0:098463de4c5d 581 equeue_dispatch(&q1, 0);
group-onsemi 0:098463de4c5d 582 test_assert(touched == 2);
group-onsemi 0:098463de4c5d 583
group-onsemi 0:098463de4c5d 584 equeue_chain(&q2, 0);
group-onsemi 0:098463de4c5d 585 equeue_chain(&q1, &q2);
group-onsemi 0:098463de4c5d 586
group-onsemi 0:098463de4c5d 587 id1 = equeue_call(&q1, simple_func, &touched);
group-onsemi 0:098463de4c5d 588 id2 = equeue_call(&q2, simple_func, &touched);
group-onsemi 0:098463de4c5d 589 test_assert(id1 && id2);
group-onsemi 0:098463de4c5d 590
group-onsemi 0:098463de4c5d 591 equeue_dispatch(&q2, 0);
group-onsemi 0:098463de4c5d 592 test_assert(touched == 4);
group-onsemi 0:098463de4c5d 593
group-onsemi 0:098463de4c5d 594 equeue_destroy(&q1);
group-onsemi 0:098463de4c5d 595 equeue_destroy(&q2);
group-onsemi 0:098463de4c5d 596 }
group-onsemi 0:098463de4c5d 597
group-onsemi 0:098463de4c5d 598 // Barrage tests
group-onsemi 0:098463de4c5d 599 void simple_barrage_test(int N) {
group-onsemi 0:098463de4c5d 600 equeue_t q;
group-onsemi 0:098463de4c5d 601 int err = equeue_create(&q, N*(EQUEUE_EVENT_SIZE+sizeof(struct timing)));
group-onsemi 0:098463de4c5d 602 test_assert(!err);
group-onsemi 0:098463de4c5d 603
group-onsemi 0:098463de4c5d 604 for (int i = 0; i < N; i++) {
group-onsemi 0:098463de4c5d 605 struct timing *timing = equeue_alloc(&q, sizeof(struct timing));
group-onsemi 0:098463de4c5d 606 test_assert(timing);
group-onsemi 0:098463de4c5d 607
group-onsemi 0:098463de4c5d 608 timing->tick = equeue_tick();
group-onsemi 0:098463de4c5d 609 timing->delay = (i+1)*100;
group-onsemi 0:098463de4c5d 610 equeue_event_delay(timing, timing->delay);
group-onsemi 0:098463de4c5d 611 equeue_event_period(timing, timing->delay);
group-onsemi 0:098463de4c5d 612
group-onsemi 0:098463de4c5d 613 int id = equeue_post(&q, timing_func, timing);
group-onsemi 0:098463de4c5d 614 test_assert(id);
group-onsemi 0:098463de4c5d 615 }
group-onsemi 0:098463de4c5d 616
group-onsemi 0:098463de4c5d 617 equeue_dispatch(&q, N*100);
group-onsemi 0:098463de4c5d 618
group-onsemi 0:098463de4c5d 619 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 620 }
group-onsemi 0:098463de4c5d 621
group-onsemi 0:098463de4c5d 622 void fragmenting_barrage_test(int N) {
group-onsemi 0:098463de4c5d 623 equeue_t q;
group-onsemi 0:098463de4c5d 624 int err = equeue_create(&q,
group-onsemi 0:098463de4c5d 625 2*N*(EQUEUE_EVENT_SIZE+sizeof(struct fragment)+N*sizeof(int)));
group-onsemi 0:098463de4c5d 626 test_assert(!err);
group-onsemi 0:098463de4c5d 627
group-onsemi 0:098463de4c5d 628 for (int i = 0; i < N; i++) {
group-onsemi 0:098463de4c5d 629 size_t size = sizeof(struct fragment) + i*sizeof(int);
group-onsemi 0:098463de4c5d 630 struct fragment *fragment = equeue_alloc(&q, size);
group-onsemi 0:098463de4c5d 631 test_assert(fragment);
group-onsemi 0:098463de4c5d 632
group-onsemi 0:098463de4c5d 633 fragment->q = &q;
group-onsemi 0:098463de4c5d 634 fragment->size = size;
group-onsemi 0:098463de4c5d 635 fragment->timing.tick = equeue_tick();
group-onsemi 0:098463de4c5d 636 fragment->timing.delay = (i+1)*100;
group-onsemi 0:098463de4c5d 637 equeue_event_delay(fragment, fragment->timing.delay);
group-onsemi 0:098463de4c5d 638
group-onsemi 0:098463de4c5d 639 int id = equeue_post(&q, fragment_func, fragment);
group-onsemi 0:098463de4c5d 640 test_assert(id);
group-onsemi 0:098463de4c5d 641 }
group-onsemi 0:098463de4c5d 642
group-onsemi 0:098463de4c5d 643 equeue_dispatch(&q, N*100);
group-onsemi 0:098463de4c5d 644
group-onsemi 0:098463de4c5d 645 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 646 }
group-onsemi 0:098463de4c5d 647
group-onsemi 0:098463de4c5d 648 struct ethread {
group-onsemi 0:098463de4c5d 649 pthread_t thread;
group-onsemi 0:098463de4c5d 650 equeue_t *q;
group-onsemi 0:098463de4c5d 651 int ms;
group-onsemi 0:098463de4c5d 652 };
group-onsemi 0:098463de4c5d 653
group-onsemi 0:098463de4c5d 654 static void *ethread_dispatch(void *p) {
group-onsemi 0:098463de4c5d 655 struct ethread *t = (struct ethread*)p;
group-onsemi 0:098463de4c5d 656 equeue_dispatch(t->q, t->ms);
group-onsemi 0:098463de4c5d 657 return 0;
group-onsemi 0:098463de4c5d 658 }
group-onsemi 0:098463de4c5d 659
group-onsemi 0:098463de4c5d 660 void multithreaded_barrage_test(int N) {
group-onsemi 0:098463de4c5d 661 equeue_t q;
group-onsemi 0:098463de4c5d 662 int err = equeue_create(&q, N*(EQUEUE_EVENT_SIZE+sizeof(struct timing)));
group-onsemi 0:098463de4c5d 663 test_assert(!err);
group-onsemi 0:098463de4c5d 664
group-onsemi 0:098463de4c5d 665 struct ethread t;
group-onsemi 0:098463de4c5d 666 t.q = &q;
group-onsemi 0:098463de4c5d 667 t.ms = N*100;
group-onsemi 0:098463de4c5d 668 err = pthread_create(&t.thread, 0, ethread_dispatch, &t);
group-onsemi 0:098463de4c5d 669 test_assert(!err);
group-onsemi 0:098463de4c5d 670
group-onsemi 0:098463de4c5d 671 for (int i = 0; i < N; i++) {
group-onsemi 0:098463de4c5d 672 struct timing *timing = equeue_alloc(&q, sizeof(struct timing));
group-onsemi 0:098463de4c5d 673 test_assert(timing);
group-onsemi 0:098463de4c5d 674
group-onsemi 0:098463de4c5d 675 timing->tick = equeue_tick();
group-onsemi 0:098463de4c5d 676 timing->delay = (i+1)*100;
group-onsemi 0:098463de4c5d 677 equeue_event_delay(timing, timing->delay);
group-onsemi 0:098463de4c5d 678 equeue_event_period(timing, timing->delay);
group-onsemi 0:098463de4c5d 679
group-onsemi 0:098463de4c5d 680 int id = equeue_post(&q, timing_func, timing);
group-onsemi 0:098463de4c5d 681 test_assert(id);
group-onsemi 0:098463de4c5d 682 }
group-onsemi 0:098463de4c5d 683
group-onsemi 0:098463de4c5d 684 err = pthread_join(t.thread, 0);
group-onsemi 0:098463de4c5d 685 test_assert(!err);
group-onsemi 0:098463de4c5d 686
group-onsemi 0:098463de4c5d 687 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 688 }
group-onsemi 0:098463de4c5d 689
group-onsemi 0:098463de4c5d 690
group-onsemi 0:098463de4c5d 691 int main() {
group-onsemi 0:098463de4c5d 692 printf("beginning tests...\n");
group-onsemi 0:098463de4c5d 693
group-onsemi 0:098463de4c5d 694 test_run(simple_call_test);
group-onsemi 0:098463de4c5d 695 test_run(simple_call_in_test);
group-onsemi 0:098463de4c5d 696 test_run(simple_call_every_test);
group-onsemi 0:098463de4c5d 697 test_run(simple_post_test);
group-onsemi 0:098463de4c5d 698 test_run(destructor_test);
group-onsemi 0:098463de4c5d 699 test_run(allocation_failure_test);
group-onsemi 0:098463de4c5d 700 test_run(cancel_test, 20);
group-onsemi 0:098463de4c5d 701 test_run(cancel_inflight_test);
group-onsemi 0:098463de4c5d 702 test_run(cancel_unnecessarily_test);
group-onsemi 0:098463de4c5d 703 test_run(loop_protect_test);
group-onsemi 0:098463de4c5d 704 test_run(break_test);
group-onsemi 0:098463de4c5d 705 test_run(period_test);
group-onsemi 0:098463de4c5d 706 test_run(nested_test);
group-onsemi 0:098463de4c5d 707 test_run(sloth_test);
group-onsemi 0:098463de4c5d 708 test_run(background_test);
group-onsemi 0:098463de4c5d 709 test_run(chain_test);
group-onsemi 0:098463de4c5d 710 test_run(unchain_test);
group-onsemi 0:098463de4c5d 711 test_run(multithread_test);
group-onsemi 0:098463de4c5d 712 test_run(simple_barrage_test, 20);
group-onsemi 0:098463de4c5d 713 test_run(fragmenting_barrage_test, 20);
group-onsemi 0:098463de4c5d 714 test_run(multithreaded_barrage_test, 20);
group-onsemi 0:098463de4c5d 715
group-onsemi 0:098463de4c5d 716 printf("done!\n");
group-onsemi 0:098463de4c5d 717 return test_failure;
group-onsemi 0:098463de4c5d 718 }