static void test_ds_recursive(int count, int depth) { int i; test_begin("data-stack recursive"); for(i = 0; i < count; i++) T_BEGIN { int number=i_rand()%100+50; int size=i_rand()%100+50; test_ds_recurse(depth, number, size); } T_END; test_end(); }
static void test_ds_buffers(void) { test_begin("data-stack buffer growth"); T_BEGIN { size_t i; unsigned char *p; size_t left = t_get_bytes_available(); while (left < 10000) { t_malloc_no0(left); /* force a new block */ left = t_get_bytes_available(); } left -= 64; /* make room for the sentry if DEBUG */ p = t_buffer_get(1); p[0] = 1; for (i = 2; i <= left; i++) { /* grow it */ unsigned char *p2 = t_buffer_get(i); test_assert_idx(p == p2, i); p[i-1] = i; test_assert_idx(p[i-2] == (unsigned char)(i-1), i); } /* now fix it permanently */ t_buffer_alloc_last_full(); test_assert(t_get_bytes_available() < 64 + MEM_ALIGN(1)); } T_END; test_end(); test_begin("data-stack buffer interruption"); T_BEGIN { void *b = t_buffer_get(1000); void *a = t_malloc_no0(1); void *b2 = t_buffer_get(1001); test_assert(a == b); /* expected, not guaranteed */ test_assert(b2 != b); } T_END; test_end(); test_begin("data-stack buffer with reallocs"); T_BEGIN { size_t bigleft = t_get_bytes_available(); size_t i; for (i = 1; i < bigleft-64; i += i_rand()%32) T_BEGIN { unsigned char *p, *p2; size_t left; t_malloc_no0(i); left = t_get_bytes_available(); /* The most useful idx for the assert is 'left' */ test_assert_idx(left <= bigleft-i, left); p = t_buffer_get(left/2); p[0] = 'Z'; p[left/2 - 1] = 'Z'; p2 = t_buffer_get(left + left/2); test_assert_idx(p != p2, left); test_assert_idx(p[0] == 'Z', left); test_assert_idx(p[left/2 -1] == 'Z', left); } T_END; } T_END; test_end(); }
/*Da um update na tela criando uma nova linha, respeitando o tamanho maximo e minimo das margens, e inserindo ela no final da fila ao mesmo tempo que exclui a primeira linha da fila*/ void update_tela(){ int m_e; int m_d; m_e = (fila->fim)->margem_e + i_rand(-1, 1); m_d = (fila->fim)->margem_d + i_rand(-1, 1); if(m_e < MIN_MARGEM) m_e = (fila->fim)->margem_e + i_rand(0, 1); if(m_e > MAX_MARGEM) m_e = (fila->fim)->margem_e + i_rand(-1, 0); if(m_d < (T_LARG - MAX_MARGEM)) m_d = (fila->fim)->margem_d + i_rand(0, 1); if(m_d > (T_LARG - MIN_MARGEM)) m_d = (fila->fim)->margem_d + i_rand(-1, 0); remove_fila(); cria_linha(m_e, m_d); }
static void test_buffer_random(void) { #define BUF_TEST_SIZE (1024*2) #define BUF_TEST_COUNT 1000 buffer_t *buf; unsigned char *p, testdata[BUF_TEST_SIZE], shadowbuf[BUF_TEST_SIZE]; unsigned int i, shadowbuf_size; size_t pos, pos2, size; int test = -1; bool zero; buf = buffer_create_dynamic(default_pool, 1); for (i = 0; i < BUF_TEST_SIZE; i++) testdata[i] = i_rand(); memset(shadowbuf, 0, sizeof(shadowbuf)); shadowbuf_size = 0; for (i = 0; i < BUF_TEST_COUNT; i++) { if (buf->used == BUF_TEST_SIZE) { size = shadowbuf_size = i_rand_limit(buf->used - 1); buffer_set_used_size(buf, size); memset(shadowbuf + shadowbuf_size, 0, BUF_TEST_SIZE - shadowbuf_size); i_assert(buf->used < BUF_TEST_SIZE); } test = i_rand_limit(6); zero = i_rand_limit(10) == 0; switch (test) { case 0: pos = i_rand_limit(BUF_TEST_SIZE - 1); size = i_rand_limit(BUF_TEST_SIZE - pos); if (!zero) { buffer_write(buf, pos, testdata, size); memcpy(shadowbuf + pos, testdata, size); } else { buffer_write_zero(buf, pos, size); memset(shadowbuf + pos, 0, size); } if (pos + size > shadowbuf_size) shadowbuf_size = pos + size; break; case 1: size = i_rand_limit(BUF_TEST_SIZE - buf->used); if (!zero) { buffer_append(buf, testdata, size); memcpy(shadowbuf + shadowbuf_size, testdata, size); } else { buffer_append_zero(buf, size); memset(shadowbuf + shadowbuf_size, 0, size); } shadowbuf_size += size; break; case 2: pos = i_rand_limit(BUF_TEST_SIZE - 1); size = i_rand_limit(BUF_TEST_SIZE - I_MAX(buf->used, pos)); if (!zero) { buffer_insert(buf, pos, testdata, size); memmove(shadowbuf + pos + size, shadowbuf + pos, BUF_TEST_SIZE - (pos + size)); memcpy(shadowbuf + pos, testdata, size); } else { buffer_insert_zero(buf, pos, size); memmove(shadowbuf + pos + size, shadowbuf + pos, BUF_TEST_SIZE - (pos + size)); memset(shadowbuf + pos, 0, size); } if (pos < shadowbuf_size) shadowbuf_size += size; else shadowbuf_size = pos + size; break; case 3: pos = i_rand_limit(BUF_TEST_SIZE - 1); size = i_rand_limit(BUF_TEST_SIZE - pos); buffer_delete(buf, pos, size); if (pos < shadowbuf_size) { if (pos + size > shadowbuf_size) size = shadowbuf_size - pos; memmove(shadowbuf + pos, shadowbuf + pos + size, BUF_TEST_SIZE - (pos + size)); shadowbuf_size -= size; memset(shadowbuf + shadowbuf_size, 0, BUF_TEST_SIZE - shadowbuf_size); } break; case 4: if (shadowbuf_size <= 1) break; pos = i_rand_limit(shadowbuf_size - 1); /* dest */ pos2 = i_rand_limit(shadowbuf_size - 1); /* source */ size = i_rand_limit(shadowbuf_size - I_MAX(pos, pos2)); buffer_copy(buf, pos, buf, pos2, size); memmove(shadowbuf + pos, shadowbuf + pos2, size); if (pos > pos2 && pos + size > shadowbuf_size) shadowbuf_size = pos + size; break; case 5: pos = i_rand_limit(BUF_TEST_SIZE - 1); size = i_rand_limit(BUF_TEST_SIZE - pos); p = buffer_get_space_unsafe(buf, pos, size); memcpy(p, testdata, size); memcpy(shadowbuf + pos, testdata, size); if (pos + size > shadowbuf_size) shadowbuf_size = pos + size; break; } i_assert(shadowbuf_size <= BUF_TEST_SIZE); if (buf->used != shadowbuf_size || memcmp(buf->data, shadowbuf, buf->used) != 0) break; } if (i == BUF_TEST_COUNT) test_out("buffer", TRUE); else { test_out_reason("buffer", FALSE, t_strdup_printf("round %u test %d failed", i, test)); } buffer_free(&buf); }
pos++; dlen = be32_to_cpu_unaligned(&data[pos]); pos += 4; test_assert(dlen > 0 && dlen < N_ELEMENTS(msgs)); } } i_stream_skip(is, siz); } if (channel_counter[0] > 100 && channel_counter[1] > 100) io_loop_stop(current_ioloop); } static void test_ostream_multiplex_stream_write(struct ostream *channel ATTR_UNUSED) { size_t rounds = 1 + i_rand() % 10; for(size_t i = 0; i < rounds; i++) { if ((i_rand() % 2) != 0) o_stream_nsend_str(chan1, msgs[i_rand() % N_ELEMENTS(msgs)]); else o_stream_nsend_str(chan0, msgs[i_rand() % N_ELEMENTS(msgs)]); } } static void test_ostream_multiplex_stream(void) { test_begin("ostream multiplex (stream)"); struct ioloop *ioloop = io_loop_create(); io_loop_set_current(ioloop);
int main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ int i,j, n; double x; double xx[XRES]; double yy[6][XRES]; rspl *rss; /* incremental solution version */ datai low,high; int gres[MXDI]; double avgdev[MXDO]; double wweight = 1.0; /* Process the arguments */ for(fa = 1;fa < argc;fa++) { nfa = fa; /* skip to nfa if next argument is used */ if (argv[fa][0] == '-') { /* Look for any flags */ char *na = NULL; /* next argument after flag, null if none */ if (argv[fa][2] != '\000') na = &argv[fa][2]; /* next is directly after flag */ else { if ((fa+1) < argc) { if (argv[fa+1][0] != '-') { nfa = fa + 1; na = argv[nfa]; /* next is seperate non-flag argument */ } } } if (argv[fa][1] == '?') { usage(); } else if (argv[fa][1] == 'w' || argv[fa][1] == 'W') { fa = nfa; if (na == NULL) usage(); wweight = atof(na); } else usage(); } else break; } low[0] = 0.0; high[0] = 1.0; avgdev[0] = AVGDEV; error_program = "Curve1"; for (n = 0; n < TRIALS; n++) { double lrand = 0.0; /* Amount of level randomness */ int pnts; int fres; if (n == 0) { /* Standard versions */ pnts = PNTS; fres = GRES; for (i = 0; i < pnts; i++) { xa[i] = t1xa[i]; ya[i] = t1ya[i]; wa[i] = t1wa[i]; } printf("Trial %d, points = %d, res = %d, level randomness = %f\n",n,pnts,fres,lrand); } else { /* Random versions */ double xmx; lrand = d_rand(0.0,0.1); /* Amount of level randomness */ pnts = i_rand(MIN_PNTS,MAX_PNTS); fres = i_rand(MIN_RES,MAX_RES); printf("Trial %d, points = %d, res = %d, level randomness = %f\n",n,pnts,fres,lrand); /* Create X values */ xa[0] = d_rand(0.3, 0.5); for (i = 1; i < pnts; i++) xa[i] = xa[i-1] + d_rand(0.2,0.7); xmx = d_rand(0.6, 0.9); for (i = 0; i < pnts; i++) /* Divide out */ xa[i] *= (xmx/xa[pnts-1]); /* Create y values */ for (i = 0; i < pnts; i++) { ya[i] = xa[i] + d_rand(-lrand,lrand); wa[i] = 1.0; } } if (n < SKIP) continue; /* Create the object */ rss = new_rspl(RSPL_NOFLAGS, 1, /* di */ 1); /* fdi */ for (i = 0; i < pnts; i++) { test_points[i].p[0] = xa[i]; test_points[i].v[0] = ya[i]; test_points[i].w = wa[i]; } gres[0] = fres; #ifdef RES2 if (n != 0) { #endif /* Fit to scattered data */ rss->fit_rspl_w_df(rss, #ifdef EXTRAFIT RSPL_EXTRAFIT | /* Extra fit flag */ #endif 0, test_points, /* Test points */ pnts, /* Number of test points */ low, high, gres, /* Low, high, resolution of grid */ low, high, /* Data scale */ SMOOTH, /* Smoothing */ avgdev, /* Average deviation */ NULL, /* iwidth */ wweight, /* weak function weight */ NULL, /* No context */ wfunc /* Weak function */ ); /* Display the result */ for (i = 0; i < XRES; i++) { co tp; /* Test point */ x = i/(double)(XRES-1); xx[i] = x; yy[0][i] = lin(x,xa,ya,pnts); tp.p[0] = x; rss->interp(rss, &tp); yy[1][i] = tp.v[0]; if (yy[1][i] < -0.2) yy[1][i] = -0.2; else if (yy[1][i] > 1.2) yy[1][i] = 1.2; } do_plot(xx,yy[0],yy[1],NULL,XRES); #ifdef RES2 } else { /* Multiple resolution version */ int gresses[5]; for (j = 0; j < 5; j++) { #ifndef NEVER if (j == 0) gres[0] = fres/8; else if (j == 1) gres[0] = fres/4; else if (j == 2) gres[0] = fres/2; else if (j == 3) gres[0] = fres; else gres[0] = fres * 2; #else /* Check sensitivity to griding of data points */ if (j == 0) gres[0] = 192; else if (j == 1) gres[0] = 193; else if (j == 2) gres[0] = 194; else if (j == 3) gres[0] = 195; else gres[0] = 196; #endif gresses[j] = gres[0]; rss->fit_rspl_w_df(rss, #ifdef EXTRAFIT RSPL_EXTRAFIT | /* Extra fit flag */ #endif 0, test_points, /* Test points */ pnts, /* Number of test points */ low, high, gres, /* Low, high, resolution of grid */ low, high, /* Data scale */ SMOOTH, /* Smoothing */ avgdev, /* Average deviation */ NULL, /* iwidth */ wweight, /* weak function weight */ NULL, /* No context */ wfunc /* Weak function */ ); /* Get the result */ for (i = 0; i < XRES; i++) { co tp; /* Test point */ x = i/(double)(XRES-1); xx[i] = x; yy[0][i] = lin(x,xa,ya,pnts); tp.p[0] = x; rss->interp(rss, &tp); yy[1+j][i] = tp.v[0]; if (yy[1+j][i] < -0.2) yy[1+j][i] = -0.2; else if (yy[1+j][i] > 1.2) yy[1+j][i] = 1.2; } } printf("Black = lin, Red = %d, Green = %d, Blue = %d, Yellow = %d, Purple = %d\n", gresses[0], gresses[1], gresses[2], gresses[3], gresses[4]); do_plot6(xx,yy[0],yy[1],yy[2],yy[3],yy[4],yy[5],XRES); } #endif /* RES2 */ } /* next trial */ return 0; }