Mercurial > hg > Members > shoshi > jungle > jungle-core
diff src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorAttributeTest.java @ 308:201cc75a9984
change Red Black Tree Edit Path Extends
author | tatsuki |
---|---|
date | Thu, 26 Jan 2017 15:23:25 +0900 |
parents | 67ff36237722 |
children | f8e75ef7ac5d |
line wrap: on
line diff
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorAttributeTest.java Thu Jan 26 03:44:21 2017 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorAttributeTest.java Thu Jan 26 15:23:25 2017 +0900 @@ -2,11 +2,13 @@ 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.InterfaceTraverser; 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.traverser.DefaultTraverser; 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; @@ -14,13 +16,15 @@ import org.junit.Test; import java.nio.ByteBuffer; +import java.util.Iterator; public class RedBlackTreeEditorAttributeTest { @Test public void RedBlackTreeEditorAttribute(){ String balanceKey = "balanceKey"; String key = "key"; - Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser()); + ByteBuffer testPutValue = ByteBuffer.wrap("test".getBytes()); + Jungle jungle = new DefaultJungle(null, "hogehoge"); JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey"); NodePath path = new DefaultNodePath(); @@ -36,8 +40,8 @@ JungleTreeEditor editor = tree.getJungleTreeEditor(); path = path.add(1); - ByteBuffer value = ByteBuffer.wrap(path.toString().getBytes()); - Either<Error, JungleTreeEditor> either = editor.putAttribute(path, key, value); + NodePath rbtPath = new RedBlackTreeNodePath(balanceKey,ByteBuffer.wrap(("value6".getBytes()))); + Either<Error, JungleTreeEditor> either = editor.putAttribute(rbtPath, key, testPutValue); Assert.assertFalse(either.isA()); //AttributeのPutが成功したかどうか調べる editor = either.b(); either = editor.success(); @@ -46,26 +50,47 @@ JungleTree oldTree = tree.getOldTree(tree.revision() - 1).b(); TreeNode oldRoot = oldTree.getRootNode(); TreeNode attributePutedTreeRoot = tree.getRootNode(); - Assert.assertNotEquals(attributePutedTreeRoot,oldRoot);// とりあえずルートがちゃんと入れ替えられているかを調べる + Assert.assertNotEquals(attributePutedTreeRoot,oldRoot);//// とりあえずルートがちゃんと入れ替えられているかを調べる + + TreeNode editedNode = tree.getNodeOfPath(path).b(); - TreeNode editedOldNode = oldTree.getNodeOfPath(path).b(); - String putValue = editedNode.getAttributes().getString(key);//編集したノードからputしたAttributeを取得 - Assert.assertEquals(putValue,path.toString()); - ByteBuffer nullValue = editedOldNode.getAttributes().get(key);//編集前のノードから値を取得 nullが取れる - Assert.assertNull(nullValue); + InterfaceTraverser traverser = tree.getTraverser(true); + Iterator<TreeNode> nodeIterator = traverser.find((TreeNode n) -> { + Attributes attributes = n.getAttributes(); + ByteBuffer v = attributes.get(key); + return v != null && v.equals(testPutValue); + },balanceKey,"value6"); + Assert.assertTrue(nodeIterator.hasNext());//PutAttributeの成功を確認 + + + InterfaceTraverser oldTreeTraverser = oldTree.getTraverser(true); + nodeIterator = oldTreeTraverser.find((TreeNode n) -> { + Attributes attributes = n.getAttributes(); + ByteBuffer v = attributes.get(key); + return v != null && v.equals(testPutValue); + },balanceKey,"value6"); + Assert.assertFalse(nodeIterator.hasNext());//過去の木に値が入っていないことを確認 + + + ByteBuffer oldRootValue = oldRoot.getAttributes().get(balanceKey); ByteBuffer newRootValue = attributePutedTreeRoot.getAttributes().get(balanceKey);//rootとかがちゃんと複製されているかを調べる Assert.assertEquals(oldRootValue,newRootValue); editor = tree.getJungleTreeEditor(); - either = editor.deleteAttribute(path,key); + either = editor.deleteAttribute(rbtPath,key); Assert.assertFalse(either.isA()); //Attributeのdeleteが成功したかどうか調べる editor = either.b(); either = editor.success(); Assert.assertFalse(either.isA()); - TreeNode AttributeDeletedNode = tree.getNodeOfPath(path).b();//Attributeがちゃんと削除できたかを調べる - nullValue = AttributeDeletedNode.getAttributes().get(key); - Assert.assertNull(nullValue); + + InterfaceTraverser valueDeletedTraverser = tree.getTraverser(true); + nodeIterator = valueDeletedTraverser.find((TreeNode n) -> { + Attributes attributes = n.getAttributes(); + ByteBuffer v = attributes.get(key); + return v != null && v.equals(testPutValue); + },balanceKey,"value6"); + Assert.assertFalse(nodeIterator.hasNext());//Attributeがちゃんと削除できたかを調べる } }