# HG changeset patch # User one # Date 1412238265 -32400 # Node ID f783a27eed244636de5692189af4179ab21d71c9 # Parent 70228f5e081f0331ee729c22a7abd556a666516d add IndexTest and FjTreeMapTest diff -r 70228f5e081f -r f783a27eed24 src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/LoggingNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/LoggingNode.java Thu Oct 02 17:24:25 2014 +0900 @@ -0,0 +1,19 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index; + +import fj.data.List; +import fj.data.TreeMap; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingAttributes; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingChildren; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; + +public interface LoggingNode { + + public LoggingAttributes getAttributes(); + public LoggingChildren getChildren(); + public OperationLog getOperationLog(); + public TreeNode getWrap(); + public TreeMap>>> getIndex(); +} diff -r 70228f5e081f -r f783a27eed24 src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/functionaljava/FjTreeMapTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/functionaljava/FjTreeMapTest.java Thu Oct 02 17:24:25 2014 +0900 @@ -0,0 +1,31 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.functionaljava; + +import java.nio.ByteBuffer; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +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.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; + +import org.junit.Assert; +import org.junit.Test; + +import fj.Ord; +import fj.data.TreeMap; + +public class FjTreeMapTest { + + @Test + public void testTreeMap() { + TreeMap map = TreeMap.empty(Ord.stringOrd); + TreeMap newMap = map.set("name","tatsuki"); + TreeMap newMap2 = map.set("name","kanagawa"); + String str = newMap.get("name").some(); + String str2 = newMap2.get("name").some(); + Assert.assertEquals(str,"tatsuki"); + Assert.assertEquals(str2,"kanagawa"); + } + + +} diff -r 70228f5e081f -r f783a27eed24 src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/functionaljava/IndexTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/functionaljava/IndexTest.java Thu Oct 02 17:24:25 2014 +0900 @@ -0,0 +1,104 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.functionaljava; + +import java.nio.ByteBuffer; + +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.store.impl.TreeNodeAttributes; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; +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 org.junit.Assert; +import org.junit.Test; + +import fj.Ord; +import fj.data.List; +import fj.data.Option; +import fj.data.TreeMap; + +public class IndexTest { + + TreeMap>>> index = TreeMap + .empty(Ord.stringOrd); + + @Test + public void IndexTest() { + + NodePath path = new DefaultNodePath(); + TreeNode node = createTree(3, 0, 3, path); + TreeMap>> map = index.get(key).some(); + Option>> opList = map.get("<-1,0,0,2>"); + List> list = opList.some(); + Pair Pair = list.head(); + NodePath newPath = Pair.right(); + String pathStr = newPath.toString(); + Assert.assertEquals(pathStr,"<-1,0,0,2>"); + System.out.println("aaa"); + } + + 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 either = parent.getAttributes().put(key,ByteBuffer.wrap(_address.toString().getBytes())); + if (either.isA()) { + Assert.fail(); + } + editIndex(parent, _address, _address.toString(), key); + 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; + } + + public void editIndex(TreeNode node, NodePath path, String attribute,String key) { + + Pair pair = new Pair(node, path); + Option>>> opAttributeList = index.get(key); + + if (opAttributeList.isNone()) { + TreeMap>> nodeIndex = TreeMap.empty(Ord.stringOrd); + List> list = List.nil(); + list = list.cons(pair); + nodeIndex = nodeIndex.set(attribute, list); + index = index.set(key, nodeIndex); + } else { + TreeMap>> indexMap = opAttributeList.some(); + Option>> opNodeIndex = indexMap.get(attribute); + + if (opNodeIndex.isNone()) { + List> pairList = List.nil(); + pairList = pairList.cons(pair); + indexMap = indexMap.set(attribute, pairList); + + } else { + List> pairList = opNodeIndex.some(); + pairList = pairList.cons(pair); + indexMap = indexMap.set(attribute, pairList); + } + index = index.set(key, indexMap); + } + System.out.println(attribute); + + } + +}