Mercurial > hg > Members > shoshi > jungle > jungle-core
view src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorNodeTest.java @ 308:201cc75a9984
change Red Black Tree Edit Path Extends
author | tatsuki |
---|---|
date | Thu, 26 Jan 2017 15:23:25 +0900 |
parents | 0767620e6f5f |
children | 9e9a15fb6e92 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.jungle.core.treeeditor.RedBlack; import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; import jp.ac.u_ryukyu.ie.cr.jungle.core.Attributes; import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.nodeiterator.DefaultNodeIterator; import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath; import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.RedBlackTreeNodePath; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.redBlackTree.ColorlessTreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; import org.junit.Assert; import org.junit.Test; import java.nio.ByteBuffer; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class RedBlackTreeEditorNodeTest { int testCount = 10; @Test public void RedBlackTreeEditorNode() { String key = "balanceKey"; Jungle jungle = new DefaultJungle(null, "hogehoge"); JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey"); NodePath path = new DefaultNodePath(); for (int count = 1; count <= testCount; count++) { JungleTreeEditor editor = tree.getJungleTreeEditor(); ByteBuffer value = ByteBuffer.wrap(("value" + count).getBytes()); Either<Error, JungleTreeEditor> either = editor.addNewChildAndPutAttribute(path, 0, key, value); Assert.assertFalse(either.isA()); editor = either.b(); either = editor.success(); Assert.assertFalse(either.isA()); TreeNode rootNode = tree.getRootNode(); DefaultNodeIterator iterator = new DefaultNodeIterator(rootNode); int nodeCount = 0; List<String> list = new LinkedList<>(); for (int i = 1; i <= count; i++) { list.add(("value" + i)); } while (iterator.hasNext()) { //ちゃんとノードの追加ができているか、全てのノードが木にあるかをを調べる nodeCount++; TreeNode n = iterator.next(); Attributes attribute = n.getAttributes(); String str = attribute.getString(key); int index = list.indexOf(str); list.remove(index); } Assert.assertEquals(list.size(), 0); int expectCount = count; Assert.assertEquals(expectCount, nodeCount); ColorlessTreeNode rootNode2 = (ColorlessTreeNode) rootNode; //test用methodを使うためにcastしている rootNode2.checkDepth(0, 0); //赤黒木のバランスが取れているかを調べる } System.out.println("------------------------------------------- delete -----------------------------------------------------------------------------------"); for (int count = 1; count <= testCount; count++) { JungleTreeEditor editor = tree.getJungleTreeEditor(); ByteBuffer value = ByteBuffer.wrap(("value" + count).getBytes()); NodePath redBlackTreeNodePath = new RedBlackTreeNodePath(key,value); Either<Error, JungleTreeEditor> either = editor.deleteChildAt(redBlackTreeNodePath, 0); Assert.assertFalse(either.isA()); editor = either.b(); either = editor.success(); Assert.assertFalse(either.isA()); ColorlessTreeNode rootNode = (ColorlessTreeNode) tree.getRootNode(); Iterator<TreeNode> iterator = new DefaultNodeIterator(rootNode); int nodeCount = 0; while (iterator.hasNext() && rootNode.getAttributes().get(key) != null) { //削除時間違えて他のノードを消してないかを調べる ColorlessTreeNode node = (ColorlessTreeNode) iterator.next(); ByteBuffer seach = node.getAttributes().get(key); Assert.assertTrue(rootNode.get(seach)); nodeCount++; } int expectCount = testCount - count; Assert.assertEquals(expectCount, nodeCount); } } }