Mercurial > hg > Members > shoshi > jungle > jungle-core
view src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorAttributeTest.java @ 329:2a0cb1f0ba4e
rename Error package
author | kono |
---|---|
date | Sat, 08 Jul 2017 21:05:55 +0900 |
parents | 474728dcfdb8 |
children |
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.InterfaceTraverser; 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.tree.JungleTree; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error; import org.junit.Assert; 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"; ByteBuffer testPutValue = ByteBuffer.wrap("test".getBytes()); Jungle jungle = new DefaultJungle(null, "hogehoge"); JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey"); NodePath path = new RedBlackTreeNodePath(); for (int count = 1; count <= 10; count++) { //とりあえず木構造の構築 JungleTreeEditor editor = tree.getJungleTreeEditor(); ByteBuffer value = ByteBuffer.wrap(("value" + count).getBytes()); Either<Error, JungleTreeEditor> either = editor.addNewChildAndPutAttribute(path, 0, balanceKey, value); Assert.assertFalse(either.isA()); editor = either.b(); either = editor.success(); Assert.assertFalse(either.isA()); } JungleTreeEditor editor = tree.getJungleTreeEditor(); 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(); Assert.assertFalse(either.isA()); JungleTree oldTree = tree.getOldTree(tree.revision() - 1).b(); TreeNode oldRoot = oldTree.getRootNode(); TreeNode attributePutedTreeRoot = tree.getRootNode(); Assert.assertNotEquals(attributePutedTreeRoot,oldRoot);//// とりあえずルートがちゃんと入れ替えられているかを調べる 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(rbtPath,key); Assert.assertFalse(either.isA()); //Attributeのdeleteが成功したかどうか調べる editor = either.b(); either = editor.success(); Assert.assertFalse(either.isA()); 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がちゃんと削除できたかを調べる } }