view src/main/java/example/SimpleJungleRead.java @ 6:6954add9eea9

make Read test trial
author one
date Mon, 31 Mar 2014 07:00:11 +0900
parents 24fca21a576e
children 4e1f8f434648
line wrap: on
line source

package example;

import java.nio.ByteBuffer;

import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
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.core.Children;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
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.transaction.DefaultTreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
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.Assert;

public class SimpleJungleRead extends Thread {
	public static final String key = "name";
	public static final String valueString = "kanagawsa";
	public static final ByteBuffer value = ByteBuffer.wrap(valueString
			.getBytes());

	public static void main(String[] args) {
		System.out.println("タスク数" + args[0]);
		System.out.println("CPU数" + args[1]);
		int roopCount = Integer.parseInt(args[0]);
		int threadCount = Integer.parseInt(args[1]);

		ReadThread[] wt = new ReadThread[threadCount];
		Jungle j = new DefaultJungle(null, "hogehoge", new DefaultTreeEditor(
				new DefaultTraverser()));
		j.createNewTree("tree");// 木を作った
		JungleTree tree = j.getTreeByName("tree");// 名前を取得
		JungleTreeEditor editor1 = tree.getTreeEditor();// editorの取得
		NodePath root = new DefaultNodePath();// パスの取得

		// eitherに値を入れる
		Either<Error, JungleTreeEditor> either = editor1.putAttribute(root,
				key, value);
		if (either.isA()) {// 失敗した場合Aが出てくる
			Assert.fail();
		}
		editor1 = either.b();
		editor1.success();
		// ここで初めてSUCCESS

		Node node = tree.getRootNode();
		ByteBuffer v = node.getAttributes().get(key);
		System.out.println(new String(v.array()));

		// ------子ノードの追加
		CreateTree(tree);
		// ここまでノードの追加

		long t1 = System.currentTimeMillis();// 時間の測定開始

		// ここで処理を行う

		for (int count = 0; count < threadCount; count++) {
			wt[count] = new ReadThread(j,(roopCount / threadCount));
		}
		for (int count = 0; count < threadCount; count++) {
			wt[count].start();
		}

		for (int count = 0; count < threadCount; count++) {
			try {
				wt[count].join();
			} catch (InterruptedException e) {
			}
		}
		
		
		long t2 = System.currentTimeMillis();
		System.out.println(t2 - t1 + "s");

		node = tree.getRootNode();
		Children<Node> children = node.getChildren();
		Either<Error, Node> either2 = children.at(1);
		// ここからしたまでテスト
		Node childNod = either2.b();
		children = childNod.getChildren();
		either2 = children.at(1);
		// ここまでてすと
		if (either2.isA()) {
			Assert.fail();
		}

		Node childNode = either2.b();
		ByteBuffer v2 = childNode.getAttributes().get(key);
		System.out.println(new String(v2.array()));
	}

	public static DefaultTreeNode factory = new DefaultTreeNode(
			new DefaultNode());

	public static void CreateTree(JungleTree tree) {
		NodePath root = new DefaultNodePath();
		JungleTreeEditor editor1;// Treeのeditorを作成
		Either<Error, JungleTreeEditor> either;

		for (int x = 0; x < 2; x++) {
			// ノードの追加
			editor1 = tree.getTreeEditor();
			either = editor1.addNewChildAt(root, x);// 新しく入れるところへのパス
			if (either.isA()) {// ちゃんとパスを指定できたかチェック
				Assert.fail();
			}
			editor1 = either.b();// 成功した場合パスを入れる
			// NodePath childPath = root.add(x);
			either = editor1.success();
			if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる
				Assert.fail();
			}
			// ここまでノードの追加
			NodePath childPath = root.add(x);
			JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成
			either = editor.putAttribute(childPath, key,
					ByteBuffer.wrap("Blazblue".getBytes()));
			if (either.isA()) {
				Assert.fail();
			}
			editor = either.b();
			either = editor.success();
			for (int y = 0; y < 2; y++) {
				editor1 = tree.getTreeEditor();
				either = editor1.addNewChildAt(root.add(x), y);// 新しく入れるところへのパス
				if (either.isA()) {// ちゃんとパスを指定できたかチェック
					Assert.fail();
				}
				editor1 = either.b();// 成功した場合パスを入れる
				// childPath = root.add(y);
				either = editor1.success();
				if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる
					Assert.fail();
				}
				childPath = root.add(x).add(y);
				editor = tree.getTreeEditor();// Treeのeditorを作成
				either = editor.putAttribute(childPath, key,
						ByteBuffer.wrap("Blazblues".getBytes()));
				if (either.isA()) {
					Assert.fail();
				}
				editor = either.b();
				either = editor.success();
			}
		}

	}
}