Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverse/TraverserTest.java @ 152:8a0aa8fc137c
Merge with a2c374a2686b82b0ad30f520412e191b84288fa9
author | one |
---|---|
date | Sat, 22 Nov 2014 15:25:09 +0900 |
parents | 0854f9a9e81d |
children |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverse; import java.nio.ByteBuffer; import org.junit.Assert; import fj.data.List; 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.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Direction; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; import junit.framework.TestCase; public abstract class TraverserTest extends TestCase { public abstract Traverser instance(); public void testTraverse() { int maxHeight = 3; TreeNode root = createTree(0,0,maxHeight,new DefaultNodePath()); //TraversableNodeWrapper<DefaultTreeNode> traversable = new TraversableNodeWrapper<DefaultTreeNode>(root); Traverser traverser = instance(); // generate all pattern. List<DefaultNodePath> paths = generatePathPattern(new DefaultNodePath(),0,maxHeight); paths = paths.cons(new DefaultNodePath()); for(DefaultNodePath path : paths){ DefaultEvaluator evaluator = new DefaultEvaluator(path); Either<Error,Traversal> ret = traverser.traverse(root,evaluator); if(ret.isA()){ Assert.fail(); } Traversal traversal = ret.b(); TreeNode target = traversal.destination(); String expect = path.toString(); ByteBuffer value = target.getAttributes().get(key); String actual = new String(value.array()); Assert.assertEquals(expect,actual); List<DefaultNodePath> parts = path.inits(); for(Direction<TreeNode> d : traversal){ DefaultNodePath part = parts.head(); parts = parts.tail(); value = d.getTarget().getAttributes().get(key); String actualCurrentPathStr = new String(value.array()); String expectCurrentPathStr = part.toString(); Assert.assertEquals(expectCurrentPathStr,actualCurrentPathStr); } } } public List<DefaultNodePath> generatePathPattern(DefaultNodePath _cur,int _curHeight,int _maxHeight) { List<DefaultNodePath> paths = List.nil(); for(int p = 0;p <= _curHeight;p ++){ DefaultNodePath path = _cur.add(p); if(_curHeight != _maxHeight - 1){ List<DefaultNodePath> newpaths = generatePathPattern(path,_curHeight+1,_maxHeight); paths = paths.append(newpaths); } paths = paths.cons(path); } return paths; } public static String key = "KEY"; public static ByteBuffer value = ByteBuffer.wrap(key.getBytes()); public static DefaultTreeNode factory = new DefaultTreeNode(); public TreeNode createTree(int _curX,int _curY,int _maxHeight,NodePath _address) { TreeNode parent = factory.createNewNode(); Either<Error,TreeNode> either = parent.getAttributes().put(key,ByteBuffer.wrap(_address.toString().getBytes())); if(either.isA()){ Assert.fail(); } parent = either.b(); if(_curY == _maxHeight){ return parent; } for(int i = 0;i < _curY + 1;i ++){ TreeNode ch = createTree(i,_curY + 1,_maxHeight,_address.add(i)); either = parent.getChildren().addNewChildAt(i,ch); if(either.isA()){ Assert.fail(); } parent = either.b(); } return parent; } }