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

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

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

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.core.Attributes;
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.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 org.junit.Assert;
import org.junit.Test;

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


public class GetKeysTest {
    @Test
    public void GetKeys() {
        String balanceKey = "balanceKey";
        String[] keys = new String[]{
          "kanagawa","atton","parusu","Dpop"
        };
       List<String> keyList = new LinkedList<String>();
        for (String key : keys) {//keyのListの作成
            keyList.add(key);
        }
        Jungle jungle = new DefaultJungle(null, "hogehoge");
        JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey");
        NodePath path = new DefaultNodePath();

        JungleTreeEditor editor = tree.getJungleTreeEditor();
        ByteBuffer value = ByteBuffer.wrap(("value").getBytes());
        Either<Error, JungleTreeEditor> either = editor.addNewChildAndPutAttribute(path, 0, balanceKey, value); //ノードの追加
        Assert.assertFalse(either.isA());
        editor = either.b();
        either = editor.success();
        Assert.assertFalse(either.isA());

        editor = tree.getJungleTreeEditor();
        for (String key : keys) {
            value = ByteBuffer.wrap(path.toString().getBytes());
            either = editor.putAttribute(path, key, value);
            Assert.assertFalse(either.isA()); //AttributeのPutが成功したかどうか調べる
            editor = either.b();
        }
        either = editor.success();
        Assert.assertFalse(either.isA());

        keyList.add(balanceKey);//balanceKeyはputAttributeできないのでここで追加する
        TreeNode root = tree.getRootNode();
        Attributes attribute = root.getAttributes();
        Iterator<String> nodeKeys = attribute.getKeys();

        while (nodeKeys.hasNext()) { //全てのKeyをちゃんと返すか調べる
            String nodeKey = nodeKeys.next();
            System.out.println(nodeKey);
            int index = keyList.indexOf(nodeKey);
            keyList.remove(index);
        }

        Assert.assertEquals(keyList.size(),0); //全部のKeyをAttributeが返すなら Listのサイズは0になるはず
    }
}