78 lines
1.7 KiB
C++
78 lines
1.7 KiB
C++
#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;
|
|
}
|
|
|
|
long long 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;
|
|
}
|