veilidchat/packages/veilid_support/example/integration_test/test_dht_short_array.dart

125 lines
3.8 KiB
Dart
Raw Normal View History

2024-04-29 17:41:19 +00:00
import 'dart:convert';
2024-05-21 19:19:27 +00:00
import 'package:test/test.dart';
2024-04-29 17:41:19 +00:00
import 'package:veilid_support/veilid_support.dart';
2024-05-09 15:54:52 +00:00
Future<void> Function() makeTestDHTShortArrayCreateDelete(
{required int stride}) =>
() async {
// Close before delete
{
final arr = await DHTShortArray.create(
debugName: 'sa_create_delete 1 stride $stride', stride: stride);
expect(await arr.operate((r) async => r.length), isZero);
expect(arr.isOpen, isTrue);
await arr.close();
expect(arr.isOpen, isFalse);
await arr.delete();
// Operate should fail
await expectLater(() async => arr.operate((r) async => r.length),
throwsA(isA<StateError>()));
}
// Close after delete
{
final arr = await DHTShortArray.create(
debugName: 'sa_create_delete 2 stride $stride', stride: stride);
await arr.delete();
// Operate should still succeed because things aren't closed
expect(await arr.operate((r) async => r.length), isZero);
await arr.close();
// Operate should fail
await expectLater(() async => arr.operate((r) async => r.length),
throwsA(isA<StateError>()));
}
// Close after delete multiple
// Okay to request delete multiple times before close
{
final arr = await DHTShortArray.create(
debugName: 'sa_create_delete 3 stride $stride', stride: stride);
await arr.delete();
await arr.delete();
// Operate should still succeed because things aren't closed
expect(await arr.operate((r) async => r.length), isZero);
await arr.close();
2024-05-16 18:07:25 +00:00
await expectLater(() async => arr.close(), throwsA(isA<StateError>()));
2024-05-09 15:54:52 +00:00
// Operate should fail
await expectLater(() async => arr.operate((r) async => r.length),
throwsA(isA<StateError>()));
}
};
2024-05-09 15:54:52 +00:00
Future<void> Function() makeTestDHTShortArrayAdd({required int stride}) =>
() async {
final arr = await DHTShortArray.create(
debugName: 'sa_add 1 stride $stride', stride: stride);
2024-05-09 15:54:52 +00:00
final dataset = Iterable<int>.generate(256)
.map((n) => utf8.encode('elem $n'))
.toList();
2024-05-16 02:45:50 +00:00
print('adding singles\n');
2024-05-09 15:54:52 +00:00
{
2024-06-08 01:38:19 +00:00
for (var n = 4; n < 8; n++) {
await arr.operateWriteEventual((w) async {
2024-05-09 15:54:52 +00:00
print('$n ');
2024-06-09 18:43:28 +00:00
await w.add(dataset[n]);
2024-06-08 01:38:19 +00:00
});
}
2024-05-09 15:54:52 +00:00
}
2024-05-16 02:45:50 +00:00
print('adding batch\n');
{
2024-06-08 01:38:19 +00:00
await arr.operateWriteEventual((w) async {
2024-05-16 02:45:50 +00:00
print('${dataset.length ~/ 2}-${dataset.length}');
2024-06-09 18:43:28 +00:00
await w.addAll(dataset.sublist(dataset.length ~/ 2, dataset.length));
2024-05-16 02:45:50 +00:00
});
}
print('inserting singles\n');
{
2024-06-08 01:38:19 +00:00
for (var n = 0; n < 4; n++) {
await arr.operateWriteEventual((w) async {
2024-05-16 02:45:50 +00:00
print('$n ');
2024-06-09 18:43:28 +00:00
await w.insert(n, dataset[n]);
2024-06-08 01:38:19 +00:00
});
}
2024-05-16 02:45:50 +00:00
}
print('inserting batch\n');
{
2024-06-08 01:38:19 +00:00
await arr.operateWriteEventual((w) async {
2024-05-16 02:45:50 +00:00
print('8-${dataset.length ~/ 2}');
2024-06-09 18:43:28 +00:00
await w.insertAll(8, dataset.sublist(8, dataset.length ~/ 2));
2024-05-16 02:45:50 +00:00
});
}
2024-05-09 15:54:52 +00:00
//print('get all\n');
{
2024-05-29 02:01:50 +00:00
final dataset2 = await arr.operate((r) async => r.getRange(0));
2024-05-09 15:54:52 +00:00
expect(dataset2, equals(dataset));
}
2024-05-13 14:03:25 +00:00
{
final dataset3 =
2024-05-29 02:01:50 +00:00
await arr.operate((r) async => r.getRange(64, length: 128));
2024-05-13 14:03:25 +00:00
expect(dataset3, equals(dataset.sublist(64, 64 + 128)));
}
2024-05-09 15:54:52 +00:00
//print('clear\n');
{
2024-05-21 19:19:27 +00:00
await arr.operateWriteEventual((w) async {
await w.clear();
});
2024-05-09 15:54:52 +00:00
}
2024-05-09 15:54:52 +00:00
//print('get all\n');
{
2024-05-29 02:01:50 +00:00
final dataset4 = await arr.operate((r) async => r.getRange(0));
2024-05-13 14:03:25 +00:00
expect(dataset4, isEmpty);
2024-05-09 15:54:52 +00:00
}
2024-05-09 15:54:52 +00:00
await arr.delete();
await arr.close();
};