blob: 9c6c5d7e2e3b54844a5feecea5e6fb042bbbba9c (
plain)
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
73
74
75
76
77
78
|
#include "../rust_internal.h"
#define COUNT 1000
#define LARGE_COUNT 10000
#define THREADS 10
bool
rust_array_list_test::run() {
array_list<int> list;
for (int i = 0; i < COUNT; i++) {
list.append(i);
}
for (int i = 0; i < COUNT; i++) {
CHECK (list[i] == i);
}
for (int i = 0; i < COUNT; i++) {
CHECK (list.index_of(i) == i);
}
for (int i = 0; i < COUNT; i++) {
CHECK (list.replace(i, -i));
CHECK (list.replace(-i, i));
CHECK (list.index_of(i) == i);
}
for (int i = COUNT - 1; i >= 0; i--) {
CHECK (list.pop(NULL));
}
return true;
}
bool
rust_synchronized_indexed_list_test::run() {
array_list<worker*> workers;
for (int i = 0; i < THREADS; i++) {
worker *worker =
new rust_synchronized_indexed_list_test::worker(this);
workers.append(worker);
}
for (uint32_t i = 0; i < workers.size(); i++) {
workers[i]->start();
}
while(workers.is_empty() == false) {
worker *worker;
workers.pop(&worker);
worker->join();
delete worker;
}
size_t expected_items = LARGE_COUNT * THREADS;
CHECK(list.length() == expected_items);
long long sum = 0;
for (size_t i = 0; i < list.length(); i++) {
sum += list[i]->value;
}
long long expected_sum = LARGE_COUNT;
expected_sum = expected_sum * (expected_sum - 1) / 2 * THREADS;
CHECK (sum == expected_sum);
return true;
}
void
rust_synchronized_indexed_list_test::worker::run() {
for (int i = 0; i < LARGE_COUNT; i++) {
parent->list.append(new indexed_list_element<int>(i));
}
return;
}
|