Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/query/SearchQueryTest.java @ 125:a0c4a4b8ad10
index test
author | one |
---|---|
date | Wed, 08 Oct 2014 02:47:17 +0900 |
parents | 75ba2f2d6ea3 |
children | f81ec544a155 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.tatsuki.query; import java.nio.ByteBuffer; import java.security.KeyStore.Entry.Attribute; import java.util.Iterator; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungleTree; 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.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.query.PathNodeIndexIterator; import org.junit.Assert; import org.junit.Test; import fj.data.List; import fj.data.Option; import fj.data.TreeMap; public class SearchQueryTest { @Test public void SearchQueryTest() { Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTreeEditor(new DefaultTraverser())); jungle.createNewTree("tree"); JungleTree tree = jungle.getTreeByName("tree"); createTree(tree); InterfaceTraverser ifTraverser = tree.getTraverser(); Iterator<Pair<TreeNode, NodePath>> searchNode = 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>"); while (searchNode.hasNext()){ Assert.assertTrue(compare(searchNode.next().left(),"<-1,0,1>")); } searchNode = 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,0>"); } return false; } ,key,"<-1,0,0>"); while (searchNode.hasNext()){ Pair<TreeNode, NodePath> pathNode = searchNode.next(); System.out.println("last = "+pathNode.left().getAttributes().getString(key)); Assert.assertTrue(compare(pathNode.left(),"<-1,0,0>")); System.out.println(pathNode.left().getAttributes().getString(key)); } TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index = ifTraverser.getIndex(); Option<TreeMap<String, List<Pair<TreeNode, NodePath>>>> opIndex = index.get(key); Assert.assertTrue(!opIndex.isNone()); } public boolean compare(TreeNode compareNode, String compareAttribute) { String labName = compareNode.getAttributes().getString(key); if (labName.equals(compareAttribute)) return true; return false; } 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 < 2; x++) { createChildren(tree, root.add(0), x); for (int y = 0; y < 2; 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(); } }