view src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/AttributeIndexTest.java @ 143:afbe19c98f53

change Index form TreeMap<String,TreeMap<String<List<Pair<TreeNode,NodePath>>>> → TreeMap<String,TreeMap<String<List<NodePath>>> bag
author one
date Sat, 15 Nov 2014 17:48:07 +0900
parents f46a6e0e4594
children 0854f9a9e81d
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.index;

import java.nio.ByteBuffer;

import org.junit.Test;

import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
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.IndexJungleTreeEditor;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
import junit.framework.Assert;
import fj.data.List;
import fj.data.TreeMap;

public class AttributeIndexTest {

	@Test
	public void PutAttributeIndexTest(){
		DefaultJungle jungle = new DefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser()));
		JungleTree tree = jungle.createNewTree("fuga");
		IndexJungleTreeEditor editor = tree.getIndexTreeEditor();
		TreeMap<String, TreeMap<String, List<NodePath>>> emptyIndex = editor.getIndex();
		Assert.assertTrue(emptyIndex.isEmpty());
		NodePath path = new DefaultNodePath();
		Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, 0);
		Assert.assertFalse(either.isA());
		
		JungleTreeEditor editor2 = either.b();
		Either<Error, JungleTreeEditor> either2 = editor2.putAttribute(path.add(0),"key", ByteBuffer.wrap("test".toString().getBytes()));
		Assert.assertFalse(either2.isA());
		JungleTreeEditor editor3 = either2.b();
		editor3.success();
		
		IndexJungleTreeEditor IndexEditor = tree.getIndexTreeEditor();
		TreeMap<String, TreeMap<String, List< NodePath>>> index = IndexEditor.getIndex();
		
		NodePath targetPath = index.get("key").some().get("test").some().head();
		TreeNode targetNode = getTarget(tree.getRootNode(), targetPath);
		Assert.assertEquals(targetNode.getAttributes().getString("key"),"test");
		
		JungleTreeEditor editor4 = tree.getIndexTreeEditor();
		Either<Error, JungleTreeEditor> either3 = editor4.deleteAttribute(path.add(0), "key");
		Assert.assertFalse(either3.isA());
		JungleTreeEditor editor5 = either3.b();
		editor5.success();
		
		IndexJungleTreeEditor IndexEditor2 = tree.getIndexTreeEditor();
		TreeMap<String, TreeMap<String, List<NodePath>>> deleteIndex = IndexEditor2.getIndex();		
		Assert.assertTrue(deleteIndex.isEmpty());
	}
	
	
  public TreeNode getTarget(TreeNode node, NodePath path) {
    Pair<Integer, NodePath> removeHeadPath = path.pop();

    if (removeHeadPath.left() == -1)
      return getTarget(node, removeHeadPath.right());

    Either<Error, TreeNode> either = node.getChildren().at(removeHeadPath.left());
    if (either.isA())
      return node;

    TreeNode child = either.b();
    if (removeHeadPath.right().size() == 0)
      return child;

    TreeNode target = getTarget(child, removeHeadPath.right());
    return target;
  }
}