view src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/AddChildrenIndexTest.java @ 166:6615db346bf5

miner change
author one
date Wed, 24 Dec 2014 14:33:17 +0900
parents a2c374a2686b
children 809f813d1083
line wrap: on
line source

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

import java.nio.ByteBuffer;
import java.util.Iterator;

import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;

import fj.data.List;
import fj.data.Option;
import fj.data.TreeMap;
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.Error;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index;
import junit.framework.Assert;

public class AddChildrenIndexTest {

  @Test
  public void DeleteChildrenTest() {
    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);

    Iterator<TreeNode> pairIterator = 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>");

    for (; pairIterator.hasNext(); pairIterator.next()) {

    }
    ifTraverser.commit();

    JungleTreeEditor editor = tree.getTreeEditor();
    Either<Error, JungleTreeEditor> either = editor.addNewChildAt(new DefaultNodePath().add(0), 0);
    either.b().success();

    InterfaceTraverser newIfTraverser = tree.getTraverser(true);
    Index newIndex = newIfTraverser.getIndex();
    Assert.assertEquals(newIndex.get(key,"<-1,0,1>").head().toString(), "<-1,0,2>");

  }

  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 < 3; x++) {
      createChildren(tree, root.add(0), x);
      for (int y = 0; y < 3; 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();
  }
}