void test_fast_read_set04(CuTest *tc){ short int i, j; fast_read_set set; printf("\nFast-read-set test#04 - elements 0-19: unique_insert\nmarked: 0-14 repeated 50 times\narray read by is_marked:\n"); construct_fast_read_set(&set, 20); for(j = 0; j < 50; ++j){ for(i = 0; i < 15; ++i){ set_mark(&set, i); } } for(i = 0; i < 20; ++i){ printf("%d ", (int)is_marked(&set, i)); } printf("\n\tThere should be no repetitions in the tree;\t"); RB_display_keys_in_order(&set.tree); reset_marks(&set); printf("Now all cells should be reset:\n"); for(i = 0; i < 20; ++i){ printf("%d ", (int)is_marked(&set, i)); } printf("\n"); RB_display_keys_in_order(&set.tree); destroy_fast_read_set(&set); }
void test_fast_read_set03(CuTest *tc){ short int i; fast_read_set set; printf("\nFast-read-set test#03 - elements 0-19: reset\nmarked: 0-9, 12, 15, 17, 19\narray read by is_marked:\n"); construct_fast_read_set(&set, 20); for(i = 0; i < 10; ++i){ set_mark(&set, i); } set_mark(&set, 12); set_mark(&set, 19); set_mark(&set, 17); set_mark(&set, 15); for(i = 0; i < 20; ++i){ printf("%d ", (int)is_marked(&set, i)); } printf("\n"); RB_display_keys_in_order(&set.tree); reset_marks(&set); printf("\tNow all cells should be reset:\n"); for(i = 0; i < 20; ++i){ printf("%d ", (int)is_marked(&set, i)); } printf("\n"); RB_display_keys_in_order(&set.tree); destroy_fast_read_set(&set); }
void find_next_collision(level_data *level, short int index, fast_read_set *primitive_done, fast_read_set *movable_done, long double time_passed){ collision_data new_coll; int i, j, k; level->movable_objects[index].coll_with_fixed.time = EMPTY_COLLISION_TIME; for(i = level->movable_objects[index].zones[0]; i <= level->movable_objects[index].zones[2]; ++i){ for(j = level->movable_objects[index].zones[1]; j <= level->movable_objects[index].zones[3]; ++j){ for(k = 0; k < level->zones[i][j].number_of_primitives; ++k){ if(!is_marked(primitive_done, level->zones[i][j].primitives[k])){ set_mark(primitive_done, level->zones[i][j].primitives[k]); new_coll = get_collision_with_primitive(&level->movable_objects[index], &level->primitive_objects[level->zones[i][j].primitives[k]]); new_coll.time += time_passed; if(new_coll.time >= 0 && new_coll.time <= 1){ if(new_coll.time < level->movable_objects[index].coll_with_fixed.time){ new_coll.who = index; new_coll.with = level->zones[i][j].primitives[k]; level->movable_objects[index].coll_with_fixed = new_coll; } } } } } } reset_marks(primitive_done); set_mark(movable_done, index); for(i = level->movable_objects[index].zones[0]; i <= level->movable_objects[index].zones[2]; ++i){ for(j = level->movable_objects[index].zones[1]; j <= level->movable_objects[index].zones[3]; ++j){ in_order_check_collision(level, movable_done, index, level->zones[i][j].movable.root, level->zones[i][j].movable.nil, time_passed); } } reset_marks(movable_done); collision_min_for_object(level, index); //push on queue //heap checks if who < with and does necessary exchanges if(level->movable_objects[index].next_collision->time <= 1 && level->movable_objects[index].next_collision->time >= 0){ heap_insert(&level->collision_queue, level->movable_objects[index].next_collision); } }
int main(int argc, char **argv) { populate_device(argc, argv); reset_marks(TOTAL_MARKS); int ret; int pid = fork(); if (pid == 0) { printv("Child sleeping for 3 seconds\n"); sleep(3); printv("Child creating buffer\n"); ret = create_buffer(1); printv("Child finished, exiting with status %d\n", ret); _exit(ret); } else { printv("Parent creating buffer\n"); ret = create_buffer(0); if (ret == 0) { update_marks(1); } if (ret != 4) { device_dirty = true; } int status; wait(&status); if (WIFEXITED(status)) { int child_ret = WEXITSTATUS(status); printv("Child returned status %d\n", child_ret); if (child_ret == 0) { update_marks(1); } if (ret != 4) { device_dirty = true; } } } /* only the parent gets here */ return end_marks(); }
int main(int argc, char **argv) { populate_device(argc, argv); reset_marks(TOTAL_MARKS); /* 1 mark: open. Device must be able to be opened for reading, writing and * reading/writing to get this mark. */ int fd = open_rdrw(); if (fd < 0) { try_close(fd, false); goto end; } fd = open_rdonly(); if (fd < 0) { try_close(fd, false); goto end; } fd = open_wronly(); if (fd < 0) { try_close(fd, false); goto end; } /* fork another process and try the opens again */ char *arg0 = "./test_1a_open_close"; printv("Now forking to run %s\n", arg0); int pid = fork(); if (pid == 0) { /* get rid of stdout */ int null_fd = open("/dev/null", O_WRONLY); if (null_fd < 0) { printe("open(\"/dev/null\")"); _exit(ERR_EXEC); } if (dup2(null_fd, STDOUT_FILENO) < 0) { printe("dup2()"); _exit(ERR_EXEC); } /* execute the single open/close test */ execl(arg0, arg0, device_node, NULL); printe("execl()"); _exit(ERR_EXEC); } else { int status; wait(&status); if (WIFEXITED(status)) { int ret = WEXITSTATUS(status); if (ret == 0) { printv("Child returned success\n"); update_marks(1); } else { printv("Child returned non-zero status (%d)\n", ret); } } try_close(fd, true); goto end; } end: return end_marks(); }