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がちゃんと削除できたかを調べる
     }
 }