view src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/IndexCommitTest.java @ 157:f98f2704b154 untilIndex

minnerChange
author one
date Sun, 07 Dec 2014 18:43:32 +0900
parents 20af7f25ef32
children
line wrap: on
line source

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.IndexTreeEditor;
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 jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index;

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(true);

		 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
		Index index = ifTraverser.getIndex();
		index.get(key,"<-1,0,1>");
    ifTraverser.commit();

    JungleTree newTree = jungle.getTreeByName("tree");
    InterfaceTraverser newIfTraverser = newTree.getTraverser(true);
    Index newIndex = newIfTraverser.getIndex();
    newIndex.get(key,"<-1,0,1>");
		JungleTreeEditor editor = tree.getTreeEditor();
		Either<Error, JungleTreeEditor> either = editor.addNewChildAt(new DefaultNodePath(), 0);
		editor = either.b();
		editor.success();
		
		ifTraverser.commit();
//		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.commit();
//		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();
	}
}