/** * Copyright 2013-2014 Recruit Technologies Co., Ltd. and contributors * (see CONTRIBUTORS.md) * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. A copy of the * License is distributed with this work in the LICENSE.md file. You may * also obtain a copy of the License from * * 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.gennai.gungnir.topology; import static org.gennai.gungnir.ql.QueryOperations.*; import static org.junit.Assert.*; import java.util.List; import java.util.Map; import org.gennai.gungnir.tuple.GungnirTuple; import org.gennai.gungnir.tuple.Struct; import org.gennai.gungnir.tuple.TupleValues; import org.junit.Test; import com.google.common.collect.Lists; import com.google.common.collect.Maps; public class TestConditionEvaluator { @Test public void testCompare() { List<Object> values = Lists.newArrayList(); values.add("test"); values.add((byte) 100); values.add((short) 100); values.add((int) 100); values.add((long) 100); values.add((float) 100); values.add((double) 100); values.add(true); values.add(null); Struct struct1 = new Struct(Lists.newArrayList("bigint"), Lists.<Object>newArrayList(123L)); values.add(struct1); List<Float> list1 = Lists.newArrayList(); list1.add(1.5f); list1.add(3.0f); list1.add(5.5f); values.add(list1); Map<Double, String> map1 = Maps.newLinkedHashMap(); map1.put(2.5, "A"); map1.put(6.5, "B"); values.add(map1); TupleValues tupleValues = new TupleValues("tuple1", values); GungnirTuple tuple = new GungnirTuple(Lists.newArrayList("string", "tinyint", "smallint", "int", "bigint", "float", "double", "boolean", "null", "struct1", "list1", "map1"), tupleValues); assertTrue(ConditionEvaluator.isKeep(field("tinyint").eq(100), tuple)); assertTrue(ConditionEvaluator.isKeep(field("smallint").eq(100L), tuple)); assertTrue(ConditionEvaluator.isKeep(field("bigint").eq(100), tuple)); assertTrue(ConditionEvaluator.isKeep(field("int").ge(3), tuple)); assertTrue(ConditionEvaluator.isKeep(field("int").le(100L), tuple)); assertTrue(ConditionEvaluator.isKeep(field("int").ge(100L), tuple)); assertFalse(ConditionEvaluator.isKeep(field("int").lt(100), tuple)); assertFalse(ConditionEvaluator.isKeep(field("int").gt(100), tuple)); assertFalse(ConditionEvaluator.isKeep(field("int").ge("3"), tuple)); assertTrue(ConditionEvaluator.isKeep(field("double").between(0, 200), tuple)); assertTrue(ConditionEvaluator.isKeep(field("float").eq(100.0), tuple)); assertTrue(ConditionEvaluator.isKeep(field("boolean").eq(true), tuple)); assertTrue(ConditionEvaluator.isKeep(field("null").isNull(), tuple)); assertFalse(ConditionEvaluator.isKeep(field("null").isNotNull(), tuple)); assertTrue(ConditionEvaluator.isKeep(field("string").in("test", "test2"), tuple)); assertTrue(ConditionEvaluator.isKeep(field("string").like("te%"), tuple)); assertTrue(ConditionEvaluator.isKeep(field("string").like("t__t"), tuple)); assertTrue(ConditionEvaluator.isKeep(field("string").regexp("^t[a-z]{3}$"), tuple)); assertFalse(ConditionEvaluator.isKeep(field("string").all("test"), tuple)); assertFalse(ConditionEvaluator.isKeep(field("struct1").eq(1), tuple)); assertTrue(ConditionEvaluator.isKeep(field("struct1").field("bigint").eq(123), tuple)); assertTrue(ConditionEvaluator.isKeep(field("list1").select(0).eq(1.5), tuple)); assertTrue(ConditionEvaluator.isKeep(field("list1").all(1.5, 3.0), tuple)); assertFalse(ConditionEvaluator.isKeep(field("list1").all(1.5, 4.0), tuple)); assertTrue(ConditionEvaluator.isKeep(field("list1").in(1.5), tuple)); assertFalse(ConditionEvaluator.isKeep(field("list1").select(1).ne(3.0), tuple)); assertTrue(ConditionEvaluator.isKeep(field("map1").select(2.5).eq("A"), tuple)); assertFalse(ConditionEvaluator.isKeep(field("map1").le(3), tuple)); assertFalse(ConditionEvaluator.isKeep(field("struct1").field("bigint").eq("123"), tuple)); assertFalse(ConditionEvaluator.isKeep(field("struct1").field("bigint").like("1%"), tuple)); assertTrue(ConditionEvaluator.isKeep(and(field("tinyint").ge(10), field("smallint").le(100)), tuple)); assertFalse(ConditionEvaluator.isKeep(and(field("tinyint").lt(10), field("smallint").gt(100)), tuple)); assertTrue(ConditionEvaluator.isKeep( or(field("list1").select(0).ne(3.0), field("smallint").gt(100)), tuple)); assertFalse(ConditionEvaluator.isKeep(not(field("int").ge(3)), tuple)); assertFalse(ConditionEvaluator.isKeep( and(field("tinyint").ge(10), not(field("smallint").le(100))), tuple)); } }