Mercurial > hg > Members > shoshi > jungle > jungle-core
view src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/difference/IndexTest.java @ 329:2a0cb1f0ba4e
rename Error package
author | kono |
---|---|
date | Sat, 08 Jul 2017 21:05:55 +0900 |
parents | 201cc75a9984 |
children |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.jungle.index.difference; 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.core.Children; import jp.ac.u_ryukyu.ie.cr.jungle.store.index.Index; import jp.ac.u_ryukyu.ie.cr.jungle.store.index.ParentIndex; 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.jungleError.Error; import org.junit.Assert; import org.junit.Test; import java.nio.ByteBuffer; import java.util.Iterator; /** * Created by e115731 on 2016/12/31. */ public class IndexTest { private Index index; @Test public void Index() { Jungle jungle = new DefaultJungle(null, "hogehoge"); jungle.createNewTree("tree"); JungleTree tree = jungle.createNewDifferenceTree("Tree"); JungleTreeEditor editor = tree.getJungleTreeEditor(); NodePath path = new DefaultNodePath(); for (int j = 0; j < 10; j++) { //木の構築 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, 0); Assert.assertFalse(either.isA()); editor = either.b(); either = editor.putAttribute(path, "key", ByteBuffer.wrap(path.toString().getBytes())); Assert.assertFalse(either.isA()); editor = either.b(); path = path.add(0); } Either<Error, JungleTreeEditor> either = editor.success(); Assert.assertFalse(either.isA()); editor = either.b(); index = tree.getIndex(); TreeNode root = tree.getRootNode(); checkIndex(root);//indexが張られているかを調べる Assert.assertTrue(index.isEmpty()); //一回木を更新する editor = tree.getJungleTreeEditor(); path = new DefaultNodePath(); either = editor.addNewChildAt(path, 0); Assert.assertFalse(either.isA()); editor = either.b(); either = editor.putAttribute(path, "key", ByteBuffer.wrap(path.toString().getBytes())); Assert.assertFalse(either.isA()); editor = either.b(); either = editor.success(); Assert.assertFalse(either.isA()); //更新後にちゃんとIndexが貼れているかを調べる index = tree.getIndex(); root = tree.getRootNode(); checkIndex(root); Assert.assertTrue(index.isEmpty()); Either<Error, JungleTree> oldTreeEither = tree.getOldTree(1); Assert.assertFalse(oldTreeEither.isA()); JungleTree oldTree = oldTreeEither.b(); //過去のTreeのIndexが上書きされてないかを調べる ParentIndex oldTreeParentIndex = oldTree.getParentIndex(); index = tree.getIndex(); Assert.assertNotEquals(oldTreeParentIndex, index); } public void checkIndex(TreeNode currentNode) { Children children = currentNode.getChildren(); for (TreeNode child : children) { checkIndex(child); } Attributes attribute = currentNode.getAttributes(); Iterator<String> keys = attribute.getKeys(); while (keys.hasNext()) { String key = keys.next(); String value = attribute.getString(key); Iterator<TreeNode> nodeIterator = index.get(key, value); boolean existNode = false; while(nodeIterator.hasNext()) { TreeNode node = nodeIterator.next(); if (node.equals(currentNode)) existNode = true; } Assert.assertTrue(existNode); } index = index.delete(currentNode); } }