blob: 03a274025122181e947edc2bf034ee38caa261b5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.util;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.StepTest;
import org.junit.Test;
import java.util.AbstractMap;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Daniel Kuppitz (http://gremlin.guru)
*/
public class TreeTest extends StepTest {
@Test
public void shouldProvideValidDepths() {
Tree<String> tree = new Tree<String>();
tree.put("marko", new Tree<String>(TreeTest.createTree("a", new Tree<String>("a1", "a2")), TreeTest.createTree("b", new Tree<String>("b1", "b2", "b3"))));
tree.put("josh", new Tree<String>("1", "2"));
assertEquals(0, tree.getObjectsAtDepth(0).size());
assertEquals(2, tree.getObjectsAtDepth(1).size());
assertEquals(4, tree.getObjectsAtDepth(2).size());
assertEquals(5, tree.getObjectsAtDepth(3).size());
assertEquals(0, tree.getObjectsAtDepth(4).size());
assertEquals(0, tree.getObjectsAtDepth(5).size());
assertEquals(2, tree.get("josh").size());
assertEquals(0, tree.get("marko").get("b").get("b1").size());
assertEquals(3, tree.get("marko").get("b").size());
assertNull(tree.get("marko").get("c"));
}
@Test
public void shouldProvideValidLeaves() {
Tree<String> tree = new Tree<String>();
tree.put("marko", new Tree<String>(TreeTest.createTree("a", new Tree<String>("a1", "a2")), TreeTest.createTree("b", new Tree<String>("b1", "b2", "b3"))));
tree.put("josh", new Tree<String>("1", "2"));
assertEquals(7, tree.getLeafTrees().size());
for (Tree<String> t : tree.getLeafTrees()) {
assertEquals(1, t.keySet().size());
final String key = t.keySet().iterator().next();
assertTrue(Arrays.asList("a1", "a2", "b1", "b2", "b3", "1", "2").contains(key));
}
assertEquals(7, tree.getLeafObjects().size());
for (String s : tree.getLeafObjects()) {
assertTrue(Arrays.asList("a1", "a2", "b1", "b2", "b3", "1", "2").contains(s));
}
}
@Test
public void shouldMergeTreesCorrectly() {
Tree<String> tree1 = new Tree<>();
tree1.put("1", new Tree<String>(TreeTest.createTree("1_1", new Tree<String>("1_1_1")), TreeTest.createTree("1_2", new Tree<String>("1_2_1"))));
Tree<String> tree2 = new Tree<>();
tree2.put("1", new Tree<String>(TreeTest.createTree("1_1", new Tree<String>("1_1_1")), TreeTest.createTree("1_2", new Tree<String>("1_2_2"))));
Tree<String> mergeTree = new Tree<>();
mergeTree.addTree(tree1);
mergeTree.addTree(tree2);
assertEquals(1, mergeTree.size());
assertEquals(0, mergeTree.getObjectsAtDepth(0).size());
assertEquals(1, mergeTree.getObjectsAtDepth(1).size());
assertEquals(2, mergeTree.getObjectsAtDepth(2).size());
assertEquals(3, mergeTree.getObjectsAtDepth(3).size());
assertTrue(mergeTree.getObjectsAtDepth(3).contains("1_1_1"));
assertTrue(mergeTree.getObjectsAtDepth(3).contains("1_2_1"));
assertTrue(mergeTree.getObjectsAtDepth(3).contains("1_2_2"));
}
private static <T> Map.Entry<T, Tree<T>> createTree(T key, Tree<T> tree) {
return new AbstractMap.SimpleEntry<>(key, tree);
}
@Override
protected List<Traversal> getTraversals() {
return Arrays.asList(
__.tree(),
__.tree().by("name").by("age"),
__.tree().by("age").by("name")
);
}
}