Mercurial > hg > Members > kazuma > jungle-ormapper
view src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/TraverserTest.java @ 0:44465893e8b8
first Commit
author | Kazuma |
---|---|
date | Wed, 30 Nov 2016 01:47:55 +0900 |
parents | |
children |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.jungle.traverse; import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List; import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.traverser.*; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; import junit.framework.Assert; import junit.framework.TestCase; import java.nio.ByteBuffer; public class TraverserTest extends TestCase { public void testTraverse() { int maxHeight = 3; TreeNode root = createTree(0,maxHeight,new DefaultNodePath()); Traverser traverser = new DefaultTraverser(); List<DefaultNodePath> paths = generatePathPattern(new DefaultNodePath(),0,maxHeight); paths = paths.addLast(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.tail(); parts = parts.delete(parts.length() - 1); 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 = new List(); 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.addLast(path); } return paths; } public static String key = "KEY"; public static DefaultTreeNode factory = new DefaultTreeNode(); public TreeNode createTree(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(_curY + 1,_maxHeight,_address.add(i)); either = parent.getChildren().addNewChildAt(i,ch); if(either.isA()){ Assert.fail(); } parent = either.b(); } return parent; } }