diff src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/IndexCommitTest.java @ 134:f46a6e0e4594

add deleteIndexEditor
author one
date Tue, 21 Oct 2014 19:47:25 +0900
parents
children afbe19c98f53 72f454eb04ec
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/IndexCommitTest.java	Tue Oct 21 19:47:25 2014 +0900
@@ -0,0 +1,139 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.index;
+
+import java.util.Iterator;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
+import junit.framework.Assert;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
+import java.nio.ByteBuffer;
+
+
+import org.junit.Test;
+
+import fj.data.List;
+import fj.data.Option;
+import fj.data.TreeMap;
+
+public class IndexCommitTest {
+
+	@Test
+	public void IndexCommitTest() throws InterruptedException {
+		
+		Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTreeEditor(new DefaultTraverser()));
+		jungle.createNewTree("tree");
+		JungleTree tree = jungle.getTreeByName("tree");
+		createTree(tree);
+		tree.getRootNode();
+		InterfaceTraverser ifTraverser = tree.getTraverser();
+
+		 ifTraverser.find((TreeNode node) -> {
+			ByteBuffer attribute = node.getAttributes().get(key);
+			if (attribute != null) {
+				byte[] byteAttribute = attribute.array();
+				String str = new String(byteAttribute);
+				System.out.println("attribute = " + str);
+				return str.equals("<-1,0,1>");
+			}
+			return false;
+		}, key, "<-1,0,1>");
+
+		//check index
+		TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index = ifTraverser.getIndex();
+		Option<TreeMap<String, List<Pair<TreeNode, NodePath>>>> opIndex = index.get(key);
+		Assert.assertTrue(!opIndex.isNone());
+		TreeMap<String, List<Pair<TreeNode, NodePath>>> innerIndex = opIndex.some();
+		Assert.assertTrue(!innerIndex.get("<-1,0,0>").isNone());
+
+		JungleTreeEditor editor = tree.getTreeEditor();
+		Either<Error, JungleTreeEditor> either = editor.addNewChildAt(new DefaultNodePath(), 0);
+		editor = either.b();
+		editor.success();
+		
+		ifTraverser.commitIndex();
+		JungleTree newTree = jungle.getTreeByName("tree");
+		InterfaceTraverser newIfTraverser = newTree.getTraverser();
+		TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> newIndex = newIfTraverser.getIndex();
+		Assert.assertTrue(newIndex.isEmpty());
+		
+		InterfaceTraverser ifTraverser1= tree.getTraverser();
+
+		 ifTraverser1.find((TreeNode node) -> {
+			ByteBuffer attribute = node.getAttributes().get(key);
+			if (attribute != null) {
+				byte[] byteAttribute = attribute.array();
+				String str = new String(byteAttribute);
+				System.out.println("attribute = " + str);
+				return str.equals("<-1,0,1>");
+			}
+			return false;
+		}, key, "<-1,0,1>");
+		 
+		ifTraverser1.commitIndex();
+		JungleTree newTree2 = jungle.getTreeByName("tree");
+		InterfaceTraverser newIfTraverser2 = newTree2.getTraverser();
+		TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> newIndex1 = newIfTraverser2.getIndex();
+		Assert.assertFalse(newIndex1.isEmpty());
+
+	}
+
+	public boolean compare(TreeNode compareNode, String compareAttribute) {
+		String labName = compareNode.getAttributes().getString(key);
+		if (labName.equals(compareAttribute))
+			return true;
+		return false;
+	}
+
+	public static String key = "KEY";
+	public static DefaultTreeNode factory = new DefaultTreeNode();
+
+	public void createTree(JungleTree tree) {
+		NodePath root = new DefaultNodePath();
+		createChildren(tree, root, 0);
+
+		for (int x = 0; x < 2; x++) {
+			createChildren(tree, root.add(0), x);
+			for (int y = 0; y < 2; y++) {
+				createChildren(tree, root.add(0).add(x), y);
+			}
+		}
+
+	}
+
+	public void createChildren(JungleTree tree, NodePath root, int num) {
+		JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成
+		Either<Error, JungleTreeEditor> either = editor
+				.addNewChildAt(root, num); // 新しく入れるところへのパス
+		if (either.isA()) {
+			Assert.fail();
+		}
+		editor = either.b();
+		either = editor.success();
+		if (either.isA()) {
+			Assert.fail();
+		}
+		NodePath childPath = root.add(num);
+		editor = tree.getTreeEditor();
+		NodePath attribute = root.add(num);
+		System.out.println(attribute.toString());
+		either = editor.putAttribute(childPath, key,
+				ByteBuffer.wrap(attribute.toString().getBytes()));
+		if (either.isA()) {
+			Assert.fail();
+		}
+		editor = either.b();
+		either = editor.success();
+	}
+}