3 /* dynar_double: A test case for the dynar using doubles as content */
5 /* Copyright (c) 2003,2004 Martin Quinson. All rights reserved. */
7 /* This program is free software; you can redistribute it and/or modify it
8 * under the terms of the license (GNU LGPL) which comes with this package. */
12 XBT_LOG_NEW_DEFAULT_CATEGORY(test,"Logging specific to this test");
14 int main(int argc,char *argv[]) {
20 xbt_init_defaultlog(&argc,argv,"dynar.thresh=debug");
22 INFO0("==== Traverse the empty dynar");
23 d=xbt_dynar_new(sizeof(int),NULL);
24 xbt_dynar_foreach(d,cursor,cpt){
26 "Damnit, there is something in the empty dynar");
31 INFO0("==== Push/shift 5000 doubles");
32 d=xbt_dynar_new(sizeof(double),NULL);
33 for (cpt=0; cpt< 5000; cpt++) {
35 xbt_dynar_push(d,&d1);
37 xbt_dynar_foreach(d,cursor,d2){
40 "The retrieved value is not the same than the injected one (%f!=%f)",
43 for (cpt=0; cpt< 5000; cpt++) {
45 xbt_dynar_shift(d,&d2);
47 "The retrieved value is not the same than the injected one (%f!=%f)",
54 INFO0("==== Unshift/pop 5000 doubles");
55 d=xbt_dynar_new(sizeof(double),NULL);
56 for (cpt=0; cpt< 5000; cpt++) {
58 xbt_dynar_unshift(d,&d1);
60 for (cpt=0; cpt< 5000; cpt++) {
63 xbt_assert2 (d1 == d2,
64 "The retrieved value is not the same than the injected one (%f!=%f)",
72 INFO0("==== Push 5000 doubles, insert 1000 doubles in the middle, shift everything");
73 d=xbt_dynar_new(sizeof(double),NULL);
74 for (cpt=0; cpt< 5000; cpt++) {
76 xbt_dynar_push(d,&d1);
78 for (cpt=0; cpt< 1000; cpt++) {
80 xbt_dynar_insert_at(d,2500,&d1);
83 for (cpt=0; cpt< 2500; cpt++) {
85 xbt_dynar_shift(d,&d2);
87 "The retrieved value is not the same than the injected one at the begining (%f!=%f)",
89 DEBUG2("Pop %d, length=%lu",cpt, xbt_dynar_length(d));
91 for (cpt=999; cpt>=0; cpt--) {
93 xbt_dynar_shift(d,&d2);
94 xbt_assert2 (d1 == d2,
95 "The retrieved value is not the same than the injected one in the middle (%f!=%f)",
98 for (cpt=2500; cpt< 5000; cpt++) {
100 xbt_dynar_shift(d,&d2);
101 xbt_assert2 (d1 == d2,
102 "The retrieved value is not the same than the injected one at the end (%f!=%f)",
109 INFO0("==== Push 5000 double, remove 2000-4000. free the rest");
110 d=xbt_dynar_new(sizeof(double),NULL);
111 for (cpt=0; cpt< 5000; cpt++) {
113 xbt_dynar_push(d,&d1);
115 for (cpt=2000; cpt< 4000; cpt++) {
117 xbt_dynar_remove_at(d,2000,&d2);
118 xbt_assert2 (d1 == d2,
119 "Remove a bad value. Got %f, expected %f",