Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Unified Diff: pkg/analysis_server/test/index/page_node_manager_test.dart

Issue 365193004: Move Index and IndexStore implementations into Engine. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/index/page_node_manager_test.dart
diff --git a/pkg/analysis_server/test/index/page_node_manager_test.dart b/pkg/analysis_server/test/index/page_node_manager_test.dart
deleted file mode 100644
index 56dab610d0480f8f3c5fcaa3f28ce75351002c6a..0000000000000000000000000000000000000000
--- a/pkg/analysis_server/test/index/page_node_manager_test.dart
+++ /dev/null
@@ -1,434 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library test.index.page_node_manager;
-
-import 'dart:math';
-import 'dart:typed_data';
-
-import 'package:analysis_server/src/index/b_plus_tree.dart';
-import 'package:analysis_server/src/index/page_node_manager.dart';
-import 'package:typed_mock/typed_mock.dart';
-import 'package:unittest/unittest.dart';
-
-import '../reflective_tests.dart';
-
-
-main() {
- groupSep = ' | ';
- group('_CachingNodeManagerTest', () {
- runReflectiveTests(_CachingNodeManagerTest);
- });
- group('FixedStringCodecTest', () {
- runReflectiveTests(_FixedStringCodecTest);
- });
- group('MemoryPageManager', () {
- runReflectiveTests(_MemoryPageManagerTest);
- });
- group('PageNodeManager', () {
- runReflectiveTests(_PageNodeManagerTest);
- });
- group('Uint32CodecTest', () {
- runReflectiveTests(_Uint32CodecTest);
- });
- test('B+ tree with PageNodeManager', _treeWithPageNodeManager);
-}
-
-
-int _intComparator(int a, int b) => a - b;
-
-
-/**
- * A stress test for [BPlusTree] using [PageNodeManager].
- */
-_treeWithPageNodeManager() {
- int pageSize = 256;
- MemoryPageManager pageManager = new MemoryPageManager(pageSize);
- NodeManager<int, String, int> nodeManager = new PageNodeManager<int, String>(
- pageManager, Uint32Codec.INSTANCE, new FixedStringCodec(7));
-// NodeManager<int, String, int> nodeManager = new MemoryNodeManager();
- BPlusTree<int, String, int> tree = new BPlusTree(_intComparator, nodeManager);
- int maxKey = 1000000;
- int tryCount = 1000;
- Set<int> keys = new Set<int>();
- {
- Random random = new Random(37);
- for (int i = 0; i < tryCount; i++) {
- int key = random.nextInt(maxKey);
- keys.add(key);
- tree.insert(key, 'V$key');
- }
- }
- // find every
- for (int key in keys) {
- expect(tree.find(key), 'V$key');
- }
- // remove random keys
- {
- Random random = new Random(37);
- for (int key in new Set<int>.from(keys)) {
- if (random.nextBool()) {
- keys.remove(key);
- expect(tree.remove(key), 'V$key');
- }
- }
- }
- // find every remaining key
- for (int key in keys) {
- expect(tree.find(key), 'V$key');
- }
-}
-
-
-@ReflectiveTestCase()
-class _CachingNodeManagerTest {
- _NodeManagerMock<int, String, int> delegate = new _NodeManagerMock<int,
- String, int>();
- NodeManager<int, String, int> manager;
-
- void setUp() {
- when(delegate.writeIndex).thenReturn((key, value) {
- delegate.writeIndex(key, value);
- });
- when(delegate.writeLeaf).thenReturn((key, value) {
- delegate.writeLeaf(key, value);
- });
- manager = new CachingNodeManager<int, String, int>(delegate, 4, 4);
- resetInteractions(delegate);
- }
-
- void test_createIndex() {
- when(delegate.createIndex()).thenReturn(77);
- expect(manager.createIndex(), 77);
- }
-
- void test_createLeaf() {
- when(delegate.createLeaf()).thenReturn(99);
- expect(manager.createLeaf(), 99);
- }
-
- void test_delete() {
- manager.delete(42);
- verify(delegate.delete(42)).once();
- }
-
- void test_isIndex() {
- when(delegate.isIndex(1)).thenReturn(true);
- when(delegate.isIndex(2)).thenReturn(false);
- expect(manager.isIndex(1), isTrue);
- expect(manager.isIndex(2), isFalse);
- }
-
- void test_maxIndexKeys() {
- when(delegate.maxIndexKeys).thenReturn(42);
- expect(manager.maxIndexKeys, 42);
- }
-
- void test_maxLeafKeys() {
- when(delegate.maxLeafKeys).thenReturn(42);
- expect(manager.maxLeafKeys, 42);
- }
-
- void test_readIndex_cache_whenRead() {
- var data = new IndexNodeData<int, int>([1, 2], [10, 20, 30]);
- when(delegate.readIndex(2)).thenReturn(data);
- expect(manager.readIndex(2), data);
- verify(delegate.readIndex(2)).once();
- resetInteractions(delegate);
- // we just read "2", so it should be cached
- manager.readIndex(2);
- verify(delegate.readIndex(2)).never();
- }
-
- void test_readIndex_cache_whenWrite() {
- var data = new IndexNodeData<int, int>([1, 2], [10, 20, 30]);
- manager.writeIndex(2, data);
- expect(manager.readIndex(2), data);
- verify(delegate.readLeaf(2)).never();
- // delete, forces request to the delegate
- manager.delete(2);
- manager.readIndex(2);
- verify(delegate.readIndex(2)).once();
- }
-
- void test_readIndex_delegate() {
- var data = new IndexNodeData<int, int>([1, 2], [10, 20, 30]);
- when(delegate.readIndex(2)).thenReturn(data);
- expect(manager.readIndex(2), data);
- }
-
- void test_readLeaf_cache_whenRead() {
- var data = new LeafNodeData<int, String>([1, 2, 3], ['A', 'B', 'C']);
- when(delegate.readLeaf(2)).thenReturn(data);
- expect(manager.readLeaf(2), data);
- verify(delegate.readLeaf(2)).once();
- resetInteractions(delegate);
- // we just read "2", so it should be cached
- manager.readLeaf(2);
- verify(delegate.readLeaf(2)).never();
- }
-
- void test_readLeaf_cache_whenWrite() {
- var data = new LeafNodeData<int, String>([1, 2, 3], ['A', 'B', 'C']);
- manager.writeLeaf(2, data);
- expect(manager.readLeaf(2), data);
- verify(delegate.readLeaf(2)).never();
- // delete, forces request to the delegate
- manager.delete(2);
- manager.readLeaf(2);
- verify(delegate.readLeaf(2)).once();
- }
-
- void test_readLeaf_delegate() {
- var data = new LeafNodeData<int, String>([1, 2, 3], ['A', 'B', 'C']);
- when(delegate.readLeaf(2)).thenReturn(data);
- expect(manager.readLeaf(2), data);
- }
-
- void test_writeIndex() {
- var data = new IndexNodeData<int, int>([1], [10, 20]);
- manager.writeIndex(1, data);
- manager.writeIndex(2, data);
- manager.writeIndex(3, data);
- manager.writeIndex(4, data);
- manager.writeIndex(1, data);
- verifyZeroInteractions(delegate);
- // only 4 nodes can be cached, 5-th one cause write to the delegate
- manager.writeIndex(5, data);
- verify(delegate.writeIndex(2, data)).once();
- }
-
- void test_writeLeaf() {
- var data = new LeafNodeData<int, String>([1, 2], ['A', 'B']);
- manager.writeLeaf(1, data);
- manager.writeLeaf(2, data);
- manager.writeLeaf(3, data);
- manager.writeLeaf(4, data);
- manager.writeLeaf(1, data);
- verifyZeroInteractions(delegate);
- // only 4 nodes can be cached, 5-th one cause write to the delegate
- manager.writeLeaf(5, data);
- verify(delegate.writeLeaf(2, data)).once();
- }
-}
-
-
-@ReflectiveTestCase()
-class _FixedStringCodecTest {
- ByteData buffer;
- Uint8List bytes = new Uint8List(2 + 2 * 4);
- FixedStringCodec codec = new FixedStringCodec(4);
-
- void setUp() {
- buffer = new ByteData.view(bytes.buffer);
- }
-
- test_empty() {
- // encode
- codec.encode(buffer, '');
- expect(bytes, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
- // decode
- expect(codec.decode(buffer), '');
- }
-
- test_fourChars() {
- // encode
- codec.encode(buffer, 'ABCD');
- expect(bytes, [0, 4, 0, 65, 0, 66, 0, 67, 0, 68]);
- // decode
- expect(codec.decode(buffer), 'ABCD');
- }
-
- test_russian() {
- // encode
- codec.encode(buffer, 'ЩУКА');
- expect(bytes, [0, 4, 4, 41, 4, 35, 4, 26, 4, 16]);
- // decode
- expect(codec.decode(buffer), 'ЩУКА');
- }
-
- test_tooManyChars() {
- expect(() {
- codec.encode(buffer, 'ABCDE');
- }, throws);
- }
-
- test_twoChars() {
- // encode
- codec.encode(buffer, 'AB');
- expect(bytes, [0, 2, 0, 65, 0, 66, 0, 0, 0, 0]);
- // decode
- expect(codec.decode(buffer), 'AB');
- }
-}
-
-
-@ReflectiveTestCase()
-class _MemoryPageManagerTest {
- static const PAGE_SIZE = 8;
- MemoryPageManager manager = new MemoryPageManager(PAGE_SIZE);
-
- test_alloc() {
- int idA = manager.alloc();
- int idB = manager.alloc();
- expect(idB, isNot(idA));
- }
-
- test_free() {
- int id = manager.alloc();
- manager.free(id);
- // double free
- expect(() {
- manager.free(id);
- }, throws);
- }
-
- test_read() {
- int id = manager.alloc();
- Uint8List page = manager.read(id);
- expect(page.length, PAGE_SIZE);
- }
-
- test_read_doesNotExist() {
- expect(() {
- manager.read(0);
- }, throws);
- }
-
- test_write() {
- int id = manager.alloc();
- // do write
- {
- Uint8List page = new Uint8List(PAGE_SIZE);
- page[3] = 42;
- manager.write(id, page);
- }
- // now read
- {
- Uint8List page = manager.read(id);
- expect(page.length, PAGE_SIZE);
- expect(page[3], 42);
- }
- }
-
- test_write_doesNotExist() {
- expect(() {
- Uint8List page = new Uint8List(PAGE_SIZE);
- manager.write(42, page);
- }, throws);
- }
-
- test_write_invalidLength() {
- int id = manager.alloc();
- Uint8List page = new Uint8List(0);
- expect(() {
- manager.write(id, page);
- }, throws);
- }
-}
-
-
-
-class _NodeManagerMock<K, V, N> extends TypedMock implements NodeManager<K, V,
- N> {
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-
-@ReflectiveTestCase()
-class _PageNodeManagerTest {
- static const Codec KEY_CODEC = Uint32Codec.INSTANCE;
- static const int PAGE_SIZE = 128;
- static const Codec VALUE_CODEC = const FixedStringCodec(4);
-
- PageNodeManager<int, String> nodeManager;
- MemoryPageManager pageManager = new MemoryPageManager(PAGE_SIZE);
-
- setUp() {
- nodeManager = new PageNodeManager<int, String>(pageManager, KEY_CODEC,
- VALUE_CODEC);
- }
-
- test_index_createDelete() {
- int id = nodeManager.createIndex();
- expect(nodeManager.isIndex(id), isTrue);
- // do delete
- nodeManager.delete(id);
- expect(nodeManager.isIndex(id), isFalse);
- }
-
- test_index_readWrite() {
- int id = nodeManager.createIndex();
- expect(nodeManager.isIndex(id), isTrue);
- // write
- {
- var keys = [1, 2];
- var children = [10, 20, 30];
- nodeManager.writeIndex(id, new IndexNodeData<int, int>(keys, children));
- }
- // check the page
- {
- Uint8List page = pageManager.read(id);
- expect(page, [0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0,
- 2, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0]);
- }
- // read
- {
- IndexNodeData<int, int> data = nodeManager.readIndex(id);
- expect(data.keys, [1, 2]);
- expect(data.children, [10, 20, 30]);
- }
- }
-
- test_leaf_readWrite() {
- int id = nodeManager.createLeaf();
- expect(nodeManager.isIndex(id), isFalse);
- // write
- {
- var keys = [1, 2, 3];
- var children = ['A', 'BB', 'CCC'];
- nodeManager.writeLeaf(id, new LeafNodeData<int, String>(keys, children));
- }
- // check the page
- {
- Uint8List page = pageManager.read(id);
- expect(page, [0, 0, 0, 3, 0, 0, 0, 1, 0, 1, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 2, 0, 66, 0, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 67, 0, 67, 0, 67, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0]);
- }
- // read
- {
- LeafNodeData<int, String> data = nodeManager.readLeaf(id);
- expect(data.keys, [1, 2, 3]);
- expect(data.values, ['A', 'BB', 'CCC']);
- }
- }
-}
-
-@ReflectiveTestCase()
-class _Uint32CodecTest {
- ByteData buffer;
- Uint8List bytes = new Uint8List(4);
- Uint32Codec codec = Uint32Codec.INSTANCE;
-
- void setUp() {
- buffer = new ByteData.view(bytes.buffer);
- }
-
- test_all() {
- // encode
- codec.encode(buffer, 42);
- expect(bytes, [0, 0, 0, 42]);
- // decode
- expect(codec.decode(buffer), 42);
- }
-}

Powered by Google App Engine
This is Rietveld 408576698