view src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/defaultnode/GetNodePath.java @ 308:201cc75a9984

change Red Black Tree Edit Path Extends
author tatsuki
date Thu, 26 Jan 2017 15:23:25 +0900
parents 0767620e6f5f
children d6b81870216b
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.jungle.impl.defaultnode;


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.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.transaction.editor.jungleTreeEditor.JungleTreeEditor;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Default.DefaultTreeNode;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
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;
import junit.framework.Assert;
import org.junit.Test;

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

public class GetNodePath {
    @Test
    public void getNodePathTest(){
        Jungle jungle = new DefaultJungle(null, "hogehoge");
        jungle.createNewTree("tree");
        JungleTree tree = jungle.getTreeByName("tree");
        JungleTreeEditor editor = tree.getJungleTreeEditor();

        editor = createTree(editor,0,3,new DefaultNodePath());

        editor.success();
        InterfaceTraverser traverser = tree.getTraverser(true);

        Iterator<TreeNode> iterator = traverser.find((TreeNode node) -> { // no index find
            String value = node.getAttributes().getString(key);
            if (value == null)
                return false;
            if (value.equals("<-1,2,0>"))
                return true;
            return false;
        });

        Assert.assertTrue(iterator.hasNext());
        TreeNode node = iterator.next();
        NodePath path = tree.getNodePath(node);
        String pathtring = path.toString();
        Assert.assertEquals("<-1,2,0>",pathtring);
    }

    public static String key = "KEY";
    public static String indexKey = "INDEXKEY";
    public static DefaultTreeNode factory = new DefaultTreeNode();

    public JungleTreeEditor createTree(JungleTreeEditor editor, int _curY, int _maxHeight, NodePath path) {

        if (_curY == _maxHeight) {
            return editor;
        }
        for (int i = 0; i < 3; i++) {

            Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, i);
            if (either.isA())
                Assert.fail();
            editor = either.b();
            String value = path.add(i).toString();
            either = editor.putAttribute(path.add(i), key, ByteBuffer.wrap(value.getBytes()));
            if (either.isA())
                Assert.fail();
            editor = either.b();
            String value2 = value + "+ index";
            either = editor.putAttribute(path.add(i), indexKey, ByteBuffer.wrap(value2.getBytes()));
            if (either.isA())
                Assert.fail();
            editor = either.b();
            editor = createTree(editor, _curY + 1, _maxHeight, path.add(i));
        }
        return editor;
    }
}