1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
#include "salad/rope.h"
#include <time.h>
#include "unit.h"
#include "rope_common.h"
static char *data[] = {"a", "bc", "def", "ghij", "klmno"};
static void
test_rope_stress_small()
{
header();
struct rope *rope = rope_new(str_getn, NULL, mem_alloc, mem_free, NULL);
const int iterations = 500;
int i = 0;
for (i = 0; i < iterations; ++i) {
char *d = data[((rope_size_t) rand())%5];
int len = strlen(d);
rope_size_t size = rope_size(rope);
rope_size_t offset = ((rope_size_t) rand()) % (size + 1);
rope_insert(rope, offset, d, len);
fail_unless(size + len == rope_size(rope));
rope_check(rope);
size = rope_size(rope);
offset = ((rope_size_t) rand()) % size;
if (offset == size)
offset--;
rope_erase(rope, offset);
fail_unless(size == rope_size(rope) + 1);
rope_check(rope);
}
rope_delete(rope);
footer();
}
static void
test_rope_stress_large()
{
header();
struct rope *rope = rope_new(str_getn, NULL, mem_alloc, mem_free, NULL);
const int iterations = 50000;
int i = 0;
for (i = 0; i < iterations; ++i) {
char *d = data[((rope_size_t) rand())%5];
int len = strlen(d);
rope_size_t size = rope_size(rope);
rope_size_t offset = ((rope_size_t) rand()) % (size + 1);
rope_insert(rope, offset, d, len);
fail_unless(size + len == rope_size(rope));
size = rope_size(rope);
offset = ((rope_size_t) rand()) % size;
if (offset == size)
offset--;
rope_erase(rope, offset);
fail_unless(size == rope_size(rope) + 1);
if (i % 1000 == 0)
rope_check(rope);
}
rope_delete(rope);
footer();
}
int
main()
{
srand(time(NULL));
test_rope_stress_small();
test_rope_stress_large();
return 0;
}
|