3 /* dynar_string: A test case for the dynar using strings as content */
5 /* Authors: Martin Quinson */
6 /* Copyright (C) 2003 the OURAGAN project. */
8 /* This program is free software; you can redistribute it and/or modify it
9 under the terms of the license (GNU LGPL) which comes with this package. */
14 /* NB_ELEM HAS to be a multiple of 5 */
17 void free_string(void *d);
19 void free_string(void *d){
23 void parse_log_opt(int argc, char **argv,const char *deft);
25 int main(int argc,char *argv[]) {
32 parse_log_opt(argc,argv,"dynar.thresh=debug");
34 fprintf(stderr,"==== Traverse the empty dynar\n");
35 TRYFAIL(gras_dynar_new(&d,sizeof(char *),&free_string));
36 gras_dynar_foreach(d,cpt,i){
38 "Damnit, there is something in the empty dynar\n");
43 fprintf(stderr,"==== Push %d strings, set them again 3 times, shift them\n",NB_ELEM);
44 TRYFAIL(gras_dynar_new(&d,sizeof(char*),&free_string));
45 for (cpt=0; cpt< NB_ELEM; cpt++) {
46 sprintf(buf,"%d",cpt);
48 TRYFAIL(gras_dynar_push(d,&s1));
50 for (cpt=0; cpt< NB_ELEM; cpt++) {
51 sprintf(buf,"%d",cpt);
53 TRYFAIL(gras_dynar_remplace(d,cpt,&s1));
55 for (cpt=0; cpt< NB_ELEM; cpt++) {
56 sprintf(buf,"%d",cpt);
58 TRYFAIL(gras_dynar_remplace(d,cpt,&s1));
60 for (cpt=0; cpt< NB_ELEM; cpt++) {
61 sprintf(buf,"%d",cpt);
63 TRYFAIL(gras_dynar_remplace(d,cpt,&s1));
65 for (cpt=0; cpt< NB_ELEM; cpt++) {
66 sprintf(buf,"%d",cpt);
67 gras_dynar_shift(d,&s2);
70 "The retrieved value is not the same than the injected one (%s!=%s)\n",
79 fprintf(stderr,"==== Unshift/pop %d strings\n",NB_ELEM);
80 TRYFAIL(gras_dynar_new(&d,sizeof(char**),&free_string));
81 for (cpt=0; cpt< NB_ELEM; cpt++) {
82 sprintf(buf,"%d",cpt);
84 TRYFAIL(gras_dynar_unshift(d,&s1));
86 for (cpt=0; cpt< NB_ELEM; cpt++) {
87 sprintf(buf,"%d",cpt);
88 gras_dynar_pop(d,&s2);
91 "The retrieved value is not the same than the injected one (%s!=%s)\n",
101 fprintf(stderr,"==== Push %d strings, insert %d strings in the middle, shift everything\n",NB_ELEM,NB_ELEM/5);
102 TRYFAIL(gras_dynar_new(&d,sizeof(char*),&free_string));
103 for (cpt=0; cpt< NB_ELEM; cpt++) {
104 sprintf(buf,"%d",cpt);
106 TRYFAIL(gras_dynar_push(d,&s1));
108 for (cpt=0; cpt< NB_ELEM/5; cpt++) {
109 sprintf(buf,"%d",cpt);
111 TRYFAIL(gras_dynar_insert_at(d,NB_ELEM/2,&s1));
114 for (cpt=0; cpt< NB_ELEM/2; cpt++) {
115 sprintf(buf,"%d",cpt);
116 gras_dynar_shift(d,&s2);
117 if (strcmp(buf,s2)) {
119 "The retrieved value is not the same than the injected one at the begining (%s!=%s)\n",
125 for (cpt=(NB_ELEM/5)-1; cpt>=0; cpt--) {
126 sprintf(buf,"%d",cpt);
127 gras_dynar_shift(d,&s2);
128 if (strcmp(buf,s2)) {
130 "The retrieved value is not the same than the injected one in the middle (%s!=%s)\n",
136 for (cpt=NB_ELEM/2; cpt< NB_ELEM; cpt++) {
137 sprintf(buf,"%d",cpt);
138 gras_dynar_shift(d,&s2);
139 if (strcmp(buf,s2)) {
141 "The retrieved value is not the same than the injected one at the end (%s!=%s)\n",
150 fprintf(stderr,"==== Push %d strings, remove %d-%d. free the rest\n",NB_ELEM,2*(NB_ELEM/5),4*(NB_ELEM/5));
151 TRYFAIL(gras_dynar_new(&d,sizeof(char*),&free_string));
152 for (cpt=0; cpt< NB_ELEM; cpt++) {
153 sprintf(buf,"%d",cpt);
155 TRYFAIL(gras_dynar_push(d,&s1));
157 for (cpt=2*(NB_ELEM/5); cpt< 4*(NB_ELEM/5); cpt++) {
158 sprintf(buf,"%d",cpt);
159 gras_dynar_remove_at(d,2*(NB_ELEM/5),&s2);
160 if (strcmp(buf,s2)) {
162 "Remove a bad value. Got %s, expected %s\n",