annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.jungle.traverse;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
2
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
3
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
4 import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
5 import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.*;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
12 import junit.framework.Assert;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
13 import junit.framework.TestCase;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
14
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
15 import java.nio.ByteBuffer;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
16
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
17 public class TraverserTest extends TestCase
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
18 {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
19
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
20 public void testTraverse()
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
21 {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
22 int maxHeight = 3;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
23
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
24 TreeNode root = createTree(0,maxHeight,new DefaultNodePath());
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
25 Traverser traverser = new DefaultTraverser();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
26
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
27 List<DefaultNodePath> paths = generatePathPattern(new DefaultNodePath(),0,maxHeight);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
28 paths = paths.addLast(new DefaultNodePath());
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
29
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
30 for(DefaultNodePath path : paths){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
31 DefaultEvaluator evaluator = new DefaultEvaluator(path);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
32 Either<Error,Traversal> ret = traverser.traverse(root,evaluator);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
33 if(ret.isA()){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
34 Assert.fail();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
35 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
36
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
37 Traversal traversal = ret.b();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
38 TreeNode target = traversal.destination();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
39 String expect = path.toString();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
40 ByteBuffer value = target.getAttributes().get(key);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
41 String actual = new String(value.array());
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
42 Assert.assertEquals(expect,actual);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
43
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
44 List<DefaultNodePath> parts = path.inits();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
45
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
46 for(Direction<TreeNode> d : traversal){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
47 DefaultNodePath part = parts.tail();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
48 parts = parts.delete(parts.length() - 1);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
49 value = d.getTarget().getAttributes().get(key);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
50 String actualCurrentPathStr = new String(value.array());
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
51 String expectCurrentPathStr = part.toString();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
52 Assert.assertEquals(expectCurrentPathStr,actualCurrentPathStr);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
53 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
54 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
55 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
56
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
57 public List<DefaultNodePath> generatePathPattern(DefaultNodePath _cur,int _curHeight,int _maxHeight)
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
58 {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
59 List<DefaultNodePath> paths = new List();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
60 for(int p = 0;p <= _curHeight;p ++){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
61 DefaultNodePath path = _cur.add(p);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
62 if(_curHeight != _maxHeight - 1){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
63 List<DefaultNodePath> newpaths = generatePathPattern(path,_curHeight+1,_maxHeight);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
64 paths = paths.append(newpaths);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
65 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
66 paths = paths.addLast(path);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
67 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
68
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
69 return paths;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
70 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
71
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
72 public static String key = "KEY";
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
73 public static DefaultTreeNode factory = new DefaultTreeNode();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
74
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
75 public TreeNode createTree(int _curY,int _maxHeight,NodePath _address)
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
76 {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
77 TreeNode parent = factory.createNewNode();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
78 Either<Error,TreeNode> either = parent.getAttributes().put(key,ByteBuffer.wrap(_address.toString().getBytes()));
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
79 if(either.isA()){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
80 Assert.fail();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
81 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
82 parent = either.b();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
83
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
84 if(_curY == _maxHeight){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
85 return parent;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
86 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
87
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
88 for(int i = 0;i < _curY + 1;i ++){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
89 TreeNode ch = createTree(_curY + 1,_maxHeight,_address.add(i));
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
90 either = parent.getChildren().addNewChildAt(i,ch);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
91 if(either.isA()){
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
92 Assert.fail();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
93 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
94
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
95 parent = either.b();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
96 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
97
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
98 return parent;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
99 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
100 }