http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/complextypes/PrimitiveQueryTypeTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/complextypes/PrimitiveQueryTypeTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/complextypes/PrimitiveQueryTypeTest.java
new file mode 100644
index 0000000..b8f484f
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/complextypes/PrimitiveQueryTypeTest.java
@@ -0,0 +1,127 @@
+/*
+ * 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.carbondata.core.scan.complextypes;
+
+import java.nio.ByteBuffer;
+
+import org.apache.carbondata.core.cache.dictionary.ColumnDictionaryInfo;
+import org.apache.carbondata.core.cache.dictionary.Dictionary;
+import org.apache.carbondata.core.cache.dictionary.ForwardDictionary;
+import org.apache.carbondata.core.metadata.DataType;
+import 
org.apache.carbondata.core.keygenerator.directdictionary.DirectDictionaryGenerator;
+import 
org.apache.carbondata.core.keygenerator.directdictionary.DirectDictionaryKeyGeneratorFactory;
+import org.apache.carbondata.core.keygenerator.mdkey.Bits;
+import org.apache.carbondata.core.util.DataTypeUtil;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class PrimitiveQueryTypeTest {
+  private static PrimitiveQueryType primitiveQueryType, 
primitiveQueryTypeForInt,
+      primitiveQueryTypeForLong, primitiveQueryTypeForDouble, 
primitiveQueryTypeForBoolean,
+      primitiveQueryTypeForTimeStamp, 
primitiveQueryTypeForTimeStampForIsDictionaryFalse;
+  private static Dictionary dictionary;
+  private boolean isDirectDictionary = false;
+
+  @BeforeClass public static void setUp() {
+    String name = "test";
+    String parentName = "testParent";
+    int blockIndex = 1;
+    int keySize = 1;
+    boolean isDirectDictionary = true;
+    primitiveQueryType =
+        new PrimitiveQueryType(name, parentName, blockIndex, DataType.STRING, 
keySize, dictionary,
+            isDirectDictionary);
+    primitiveQueryTypeForInt =
+        new PrimitiveQueryType(name, parentName, blockIndex, DataType.INT, 
keySize, dictionary,
+            isDirectDictionary);
+    primitiveQueryTypeForDouble =
+        new PrimitiveQueryType(name, parentName, blockIndex, DataType.DOUBLE, 
keySize, dictionary,
+            isDirectDictionary);
+    primitiveQueryTypeForLong =
+        new PrimitiveQueryType(name, parentName, blockIndex, DataType.LONG, 
keySize, dictionary,
+            isDirectDictionary);
+    primitiveQueryTypeForBoolean =
+        new PrimitiveQueryType(name, parentName, blockIndex, DataType.BOOLEAN, 
keySize, dictionary,
+            isDirectDictionary);
+    primitiveQueryTypeForTimeStamp =
+        new PrimitiveQueryType(name, parentName, blockIndex, 
DataType.TIMESTAMP, keySize,
+            dictionary, isDirectDictionary);
+    ColumnDictionaryInfo columnDictionaryInfo = new 
ColumnDictionaryInfo(DataType.STRING);
+    ForwardDictionary forwardDictionary = new 
ForwardDictionary(columnDictionaryInfo);
+    primitiveQueryTypeForTimeStampForIsDictionaryFalse =
+        new PrimitiveQueryType(name, parentName, blockIndex, 
DataType.TIMESTAMP, keySize,
+            forwardDictionary, false);
+
+  }
+
+  @Test public void testGetDataBasedOnDataTypeFromSurrogates() {
+    ByteBuffer surrogateData = ByteBuffer.allocate(10);
+    surrogateData.put(3, (byte) 1);
+    new MockUp<Bits>() {
+      @Mock public long[] getKeyArray(byte[] key, int offset) {
+        return new long[] { 1313045L };
+      }
+    };
+    Object expectedValue = 1313043000000L;
+
+    Object actualValue =
+        
primitiveQueryTypeForTimeStamp.getDataBasedOnDataTypeFromSurrogates(surrogateData);
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void 
testGetDataBasedOnDataTypeFromSurrogatesWhenIsDictionaryFalse() {
+    ByteBuffer surrogateData = ByteBuffer.allocate(10);
+    surrogateData.put(3, (byte) 1);
+    new MockUp<ForwardDictionary>() {
+      @Mock public String getDictionaryValueForKey(int surrogateKey) {
+        return "2015-10-20 12:30:01";
+      }
+    };
+
+    Object expectedValue = primitiveQueryTypeForTimeStampForIsDictionaryFalse
+        .getDataBasedOnDataTypeFromSurrogates(surrogateData);
+    Object actualValue = primitiveQueryTypeForTimeStampForIsDictionaryFalse
+        .getDataBasedOnDataTypeFromSurrogates(surrogateData);
+    assertEquals(expectedValue, actualValue);
+  }
+
+  public Object getDataBasedOnDataTypeFromSurrogates(ByteBuffer surrogateData) 
{
+    int keySize = 2;
+    byte[] data = new byte[keySize];
+    surrogateData.get(data);
+    Bits bit = new Bits(new int[] { keySize * 8 });
+    int surrgateValue = (int) bit.getKeyArray(data, 0)[0];
+    Object actualData = null;
+    if (isDirectDictionary) {
+      DirectDictionaryGenerator directDictionaryGenerator =
+          
DirectDictionaryKeyGeneratorFactory.getDirectDictionaryGenerator(DataType.TIMESTAMP);
+      actualData = 
directDictionaryGenerator.getValueFromSurrogate(surrgateValue);
+    } else {
+      String dictionaryValueForKey = 
dictionary.getDictionaryValueForKey(surrgateValue);
+      actualData = DataTypeUtil.getDataBasedOnDataType(dictionaryValueForKey, 
DataType.TIMESTAMP);
+    }
+    return actualData;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/complextypes/StructQueryTypeTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/complextypes/StructQueryTypeTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/complextypes/StructQueryTypeTest.java
new file mode 100644
index 0000000..2a9d724
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/complextypes/StructQueryTypeTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.carbondata.core.scan.complextypes;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class StructQueryTypeTest {
+  private static StructQueryType structQueryType;
+  private static ArrayQueryType arrayQueryType;
+
+  @BeforeClass public static void setUp() {
+    String name = "testName";
+    String parentName = "testName";
+    int blockIndex = 5;
+    structQueryType = new StructQueryType(name, parentName, blockIndex);
+    arrayQueryType = new ArrayQueryType(name, parentName, blockIndex);
+  }
+
+  @Test public void testGetDataBasedOnDataTypeFromSurrogates() {
+    ByteBuffer surrogateData = ByteBuffer.allocate(10);
+    surrogateData.put(3, (byte) 1);
+    structQueryType.addChildren(arrayQueryType);
+    List children = new ArrayList();
+    children.add(arrayQueryType);
+    
assertNotNull(structQueryType.getDataBasedOnDataTypeFromSurrogates(surrogateData));
+  }
+
+  @Test public void testGetColsCount() {
+    structQueryType.setName("testName");
+    structQueryType.setParentname("testName");
+    structQueryType.addChildren(arrayQueryType);
+    new MockUp<ArrayQueryType>() {
+      @Mock int getColsCount() {
+        return 1;
+      }
+    };
+    int actualValue = structQueryType.getColsCount();
+    int expectedValue = 2;
+    assertEquals(expectedValue, actualValue);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/executor/util/QueryUtilTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/executor/util/QueryUtilTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/executor/util/QueryUtilTest.java
new file mode 100644
index 0000000..00f05f4
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/executor/util/QueryUtilTest.java
@@ -0,0 +1,241 @@
+/*
+ * 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.carbondata.core.scan.executor.util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.carbondata.core.datastore.block.SegmentProperties;
+import org.apache.carbondata.core.datastore.block.SegmentPropertiesTestUtil;
+import org.apache.carbondata.core.keygenerator.KeyGenException;
+import org.apache.carbondata.core.scan.model.QueryDimension;
+
+import junit.framework.TestCase;
+import mockit.Mock;
+import mockit.MockUp;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.assertArrayEquals;
+
+public class QueryUtilTest extends TestCase {
+
+  private SegmentProperties segmentProperties;
+
+  @BeforeClass public void setUp() {
+    segmentProperties = SegmentPropertiesTestUtil.getSegmentProperties();
+  }
+
+  @Test public void testGetMaskedByteRangeGivingProperMaksedByteRange() {
+
+    QueryDimension dimension =
+        new 
QueryDimension(segmentProperties.getDimensions().get(0).getColName());
+    dimension.setDimension(segmentProperties.getDimensions().get(0));
+    int[] maskedByteRange = QueryUtil
+        .getMaskedByteRange(Arrays.asList(dimension), 
segmentProperties.getDimensionKeyGenerator());
+    int[] expectedMaskedByteRange = { 0 };
+    for (int i = 0; i < maskedByteRange.length; i++) {
+      assertEquals(expectedMaskedByteRange[i], maskedByteRange[i]);
+    }
+  }
+
+  @Test public void 
testGetMaskedByteRangeGivingProperMaksedByteRangeOnlyForDictionaryKey() {
+    List<QueryDimension> dimensions = new ArrayList<QueryDimension>();
+    for (int i = 0; i < 2; i++) {
+      QueryDimension dimension =
+          new 
QueryDimension(segmentProperties.getDimensions().get(i).getColName());
+      dimension.setDimension(segmentProperties.getDimensions().get(i));
+      dimensions.add(dimension);
+    }
+    int[] maskedByteRange =
+        QueryUtil.getMaskedByteRange(dimensions, 
segmentProperties.getDimensionKeyGenerator());
+    int[] expectedMaskedByteRange = { 0 };
+    for (int i = 0; i < maskedByteRange.length; i++) {
+      assertEquals(expectedMaskedByteRange[i], maskedByteRange[i]);
+    }
+  }
+
+  @Test public void testGetMaskedByteRangeBasedOrdinalGivingProperMaskedByte() 
{
+    List<Integer> dimensionOrdinal = new ArrayList<Integer>();
+    dimensionOrdinal.add(0);
+    int[] maskedByteRange = 
QueryUtil.getMaskedByteRangeBasedOrdinal(dimensionOrdinal,
+        segmentProperties.getDimensionKeyGenerator());
+    int[] expectedMaskedByteRange = { 0 };
+    for (int i = 0; i < maskedByteRange.length; i++) {
+      assertEquals(expectedMaskedByteRange[i], maskedByteRange[i]);
+    }
+  }
+
+  @Test public void testGetMaxKeyBasedOnDimensions() {
+    List<QueryDimension> dimensions = new ArrayList<QueryDimension>();
+    for (int i = 0; i < 2; i++) {
+      QueryDimension dimension =
+          new 
QueryDimension(segmentProperties.getDimensions().get(i).getColName());
+      dimension.setDimension(segmentProperties.getDimensions().get(i));
+      dimensions.add(dimension);
+    }
+    byte[] maxKeyBasedOnDimensions = null;
+    try {
+      maxKeyBasedOnDimensions = QueryUtil
+          .getMaxKeyBasedOnDimensions(dimensions, 
segmentProperties.getDimensionKeyGenerator());
+    } catch (KeyGenException e) {
+      assertTrue(false);
+    }
+    byte[] expectedMaxKeyBasedOnDimensions = { -1, 0, 0, 0, 0, 0 };
+    for (int i = 0; i < expectedMaxKeyBasedOnDimensions.length; i++) {
+      if (expectedMaxKeyBasedOnDimensions[i] != maxKeyBasedOnDimensions[i]) {
+        assertTrue(false);
+      }
+    }
+    long[] expectedKeyArray = { 255, 0, 0, 0, 0, 0 };
+    long[] keyArray =
+        
segmentProperties.getDimensionKeyGenerator().getKeyArray(maxKeyBasedOnDimensions);
+    for (int i = 0; i < keyArray.length; i++) {
+      if (expectedKeyArray[i] != keyArray[i]) {
+        assertTrue(false);
+      }
+    }
+  }
+
+  @Test public void testGetMaksedByte() {
+    QueryDimension dimension =
+        new 
QueryDimension(segmentProperties.getDimensions().get(0).getColName());
+    dimension.setDimension(segmentProperties.getDimensions().get(0));
+    dimension.setDimension(segmentProperties.getDimensions().get(0));
+    int[] maskedByteRange = QueryUtil
+        .getMaskedByteRange(Arrays.asList(dimension), 
segmentProperties.getDimensionKeyGenerator());
+    int[] maskedByte = QueryUtil
+        
.getMaskedByte(segmentProperties.getDimensionKeyGenerator().getDimCount(), 
maskedByteRange);
+    int[] expectedMaskedByte = { 0, -1, -1, -1, -1, -1 };
+
+    for (int i = 0; i < expectedMaskedByte.length; i++) {
+      if (expectedMaskedByte[i] != maskedByte[i]) {
+        assertTrue(false);
+      }
+    }
+  }
+
+  @Test public void testSearchInArrayWithSearchInputNotPresentInArray() {
+    int[] dummyArray = { 1, 2, 3, 4, 5 };
+    int searchInput = 6;
+    boolean result = QueryUtil.searchInArray(dummyArray, searchInput);
+    assert (!result);
+  }
+
+  @Test public void testSearchInArrayWithSearchInputPresentInArray() {
+    int[] dummyArray = { 1, 2, 3, 4, 5 };
+    int searchInput = 1;
+    boolean result = QueryUtil.searchInArray(dummyArray, searchInput);
+    assert (result);
+  }
+
+  @Test public void 
testGetColumnGroupIdWhenOrdinalValueNotPresentInArrayIndex() {
+    int ordinal = 0;
+    new MockUp<SegmentProperties>() {
+      @Mock public int[][] getColumnGroups() {
+        int columnGroups[][] = { { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 
5 } };
+        return columnGroups;
+      }
+    };
+    int actualValue = QueryUtil.getColumnGroupId(segmentProperties, ordinal);
+    int expectedValue = 4; //expectedValue will always be arrayLength - 1
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetColumnGroupIdWhenOrdinalValuePresentInArrayIndex() {
+    int ordinal = 1;
+    new MockUp<SegmentProperties>() {
+      @Mock public int[][] getColumnGroups() {
+        int columnGroups[][] = { { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 
5 } };
+        return columnGroups;
+      }
+    };
+    int actualValue = QueryUtil.getColumnGroupId(segmentProperties, ordinal);
+    int expectedValue = 0;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void 
testGetColumnGroupIdWhenColumnGroupsIndexValueLengthLessThanOne() {
+    int ordinal = 1;
+    new MockUp<SegmentProperties>() {
+      @Mock public int[][] getColumnGroups() {
+        int columnGroups[][] = { { 1 } };
+        return columnGroups;
+      }
+    };
+    int actualValue = QueryUtil.getColumnGroupId(segmentProperties, ordinal);
+    int expectedValue = -1;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetMaskedKey() {
+    byte[] data = { 1, 2, 3, 4, 5, 5 };
+    byte[] maxKey = { 15, 20, 25, 30, 35, 35 };
+    int[] maskByteRanges = { 1, 2, 3, 4, 5 };
+    int byteCount = 5;
+    byte[] actualValue = QueryUtil.getMaskedKey(data, maxKey, maskByteRanges, 
byteCount);
+    byte[] expectedValue = { 0, 1, 4, 1, 1 };
+    assertArrayEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetMaxKeyBasedOnOrinal() throws Exception {
+    List<Integer> dummyList = new ArrayList<>();
+    dummyList.add(0, 1);
+    dummyList.add(1, 2);
+    byte[] actualValue =
+        QueryUtil.getMaxKeyBasedOnOrinal(dummyList, 
segmentProperties.getDimensionKeyGenerator());
+    byte[] expectedValue = { 0, -1, -1, 0, 0, 0 };
+    assertArrayEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetSortDimensionIndexes() {
+    List<QueryDimension> sortedDimensions = new ArrayList<QueryDimension>();
+    for (int i = 0; i < 2; i++) {
+      QueryDimension dimension =
+          new 
QueryDimension(segmentProperties.getDimensions().get(i).getColName());
+      dimension.setDimension(segmentProperties.getDimensions().get(i));
+      sortedDimensions.add(dimension);
+    }
+    List<QueryDimension> queryDimensions = new ArrayList<QueryDimension>();
+    for (int i = 0; i < 2; i++) {
+      QueryDimension dimension =
+          new 
QueryDimension(segmentProperties.getDimensions().get(i).getColName());
+      dimension.setDimension(segmentProperties.getDimensions().get(i));
+      queryDimensions.add(dimension);
+    }
+    byte[] actualValue = QueryUtil.getSortDimensionIndexes(sortedDimensions, 
queryDimensions);
+    byte[] expectedValue = { 0, 0 };
+    assertArrayEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetActualTypeIndex() {
+    List<String> dummyList = new ArrayList<>();
+    dummyList.add("test1");
+    dummyList.add("test2");
+    int[] actualValue = QueryUtil.getActualTypeIndex(dummyList);
+    int[] expectedValue = { 0, 1 };
+    assertArrayEquals(expectedValue, actualValue);
+  }
+
+  @AfterClass public void tearDown() {
+    segmentProperties = null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/executor/util/RestructureUtilTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/executor/util/RestructureUtilTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/executor/util/RestructureUtilTest.java
new file mode 100644
index 0000000..ab17b43
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/executor/util/RestructureUtilTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.carbondata.core.scan.executor.util;
+
+import org.apache.carbondata.core.metadata.Encoding;
+import org.apache.carbondata.core.metadata.schema.table.column.CarbonDimension;
+import org.apache.carbondata.core.metadata.schema.table.column.CarbonMeasure;
+import org.apache.carbondata.core.metadata.schema.table.column.ColumnSchema;
+import org.apache.carbondata.core.scan.executor.infos.AggregatorInfo;
+import org.apache.carbondata.core.scan.model.QueryDimension;
+import org.apache.carbondata.core.scan.model.QueryMeasure;
+
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class RestructureUtilTest {
+
+  @Test public void testToGetUpdatedQueryDimension() {
+    List<Encoding> encodingList = new ArrayList<Encoding>();
+    encodingList.add(Encoding.DICTIONARY);
+    ColumnSchema columnSchema1 = new ColumnSchema();
+    columnSchema1.setColumnName("Id");
+    columnSchema1.setEncodingList(encodingList);
+    ColumnSchema columnSchema2 = new ColumnSchema();
+    columnSchema2.setColumnName("Name");
+    columnSchema2.setEncodingList(encodingList);
+    ColumnSchema columnSchema3 = new ColumnSchema();
+    columnSchema3.setColumnName("Age");
+    columnSchema3.setEncodingList(encodingList);
+    ColumnSchema columnSchema4 = new ColumnSchema();
+    columnSchema4.setColumnName("Salary");
+    columnSchema4.setEncodingList(encodingList);
+    ColumnSchema columnSchema5 = new ColumnSchema();
+    columnSchema5.setColumnName("Address");
+    columnSchema5.setEncodingList(encodingList);
+
+    CarbonDimension tableBlockDimension1 = new CarbonDimension(columnSchema1, 
1, 1, 1, 1);
+    CarbonDimension tableBlockDimension2 = new CarbonDimension(columnSchema2, 
5, 5, 5, 5);
+    List<CarbonDimension> tableBlockDimensions =
+        Arrays.asList(tableBlockDimension1, tableBlockDimension2);
+
+    CarbonDimension tableComplexDimension1 = new 
CarbonDimension(columnSchema3, 4, 4, 4, 4);
+    CarbonDimension tableComplexDimension2 = new 
CarbonDimension(columnSchema4, 2, 2, 2, 2);
+    List<CarbonDimension> tableComplexDimensions =
+        Arrays.asList(tableComplexDimension1, tableComplexDimension2);
+
+    QueryDimension queryDimension1 = new QueryDimension("Id");
+    queryDimension1.setDimension(tableBlockDimension1);
+    QueryDimension queryDimension2 = new QueryDimension("Name");
+    queryDimension2.setDimension(tableComplexDimension2);
+    QueryDimension queryDimension3 = new QueryDimension("Address");
+    queryDimension3.setDimension(new CarbonDimension(columnSchema5, 3, 3, 3, 
3));
+
+    List<QueryDimension> queryDimensions =
+        Arrays.asList(queryDimension1, queryDimension2, queryDimension3);
+
+    List<QueryDimension> result = RestructureUtil
+        .getUpdatedQueryDimension(queryDimensions, tableBlockDimensions, 
tableComplexDimensions);
+
+    assertThat(result, is(equalTo(Arrays.asList(queryDimension1, 
queryDimension2))));
+  }
+
+  @Test public void testToGetAggregatorInfos() {
+    ColumnSchema columnSchema1 = new ColumnSchema();
+    columnSchema1.setColumnName("Id");
+    ColumnSchema columnSchema2 = new ColumnSchema();
+    columnSchema2.setColumnName("Name");
+    ColumnSchema columnSchema3 = new ColumnSchema();
+    columnSchema3.setColumnName("Age");
+
+    CarbonMeasure carbonMeasure1 = new CarbonMeasure(columnSchema1, 1);
+    CarbonMeasure carbonMeasure2 = new CarbonMeasure(columnSchema2, 2);
+    CarbonMeasure carbonMeasure3 = new CarbonMeasure(columnSchema3, 3);
+    carbonMeasure3.setDefaultValue("3".getBytes());
+    List<CarbonMeasure> currentBlockMeasures = Arrays.asList(carbonMeasure1, 
carbonMeasure2);
+
+    QueryMeasure queryMeasure1 = new QueryMeasure("Id");
+    queryMeasure1.setMeasure(carbonMeasure1);
+    QueryMeasure queryMeasure2 = new QueryMeasure("Name");
+    queryMeasure2.setMeasure(carbonMeasure2);
+    QueryMeasure queryMeasure3 = new QueryMeasure("Age");
+    queryMeasure3.setMeasure(carbonMeasure3);
+    List<QueryMeasure> queryMeasures = Arrays.asList(queryMeasure1, 
queryMeasure2, queryMeasure3);
+
+    AggregatorInfo aggregatorInfo =
+        RestructureUtil.getAggregatorInfos(queryMeasures, 
currentBlockMeasures);
+    boolean[] measuresExist = { true, true, false };
+    assertThat(aggregatorInfo.getMeasureExists(), is(equalTo(measuresExist)));
+    Object[] defaultValues = { null, null, "3".getBytes() };
+    assertThat(aggregatorInfo.getDefaultValues(), is(equalTo(defaultValues)));
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/expression/ColumnExpressionTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/expression/ColumnExpressionTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/ColumnExpressionTest.java
new file mode 100644
index 0000000..3209991
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/ColumnExpressionTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.carbondata.core.scan.expression;
+
+import org.apache.carbondata.core.metadata.DataType;
+import org.apache.carbondata.core.scan.filter.intf.RowImpl;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ColumnExpressionTest {
+
+  private ColumnExpression columnExpression;
+
+  @Before public void setUp() {
+    String columnName = "IMEI";
+    DataType dataType = DataType.STRING;
+    columnExpression = new ColumnExpression(columnName, dataType);
+  }
+
+  @Test public void testEvaluate() {
+    RowImpl rowImpl = new RowImpl();
+    rowImpl.setValues(new Integer[] { 1 });
+    new MockUp<RowImpl>() {
+      @Mock public Object getVal(int index) {
+        return 1;
+      }
+    };
+    ExpressionResult expectedValue = new ExpressionResult(DataType.INT, 1);
+    assertEquals(expectedValue, columnExpression.evaluate(rowImpl));
+  }
+
+  @Test public void testEvaluateForNullValue() {
+    RowImpl rowImpl = new RowImpl();
+    rowImpl.setValues(null);
+    new MockUp<RowImpl>() {
+      @Mock public Object getVal(int index) {
+        return null;
+      }
+    };
+    ExpressionResult expectedValue = new ExpressionResult(null);
+    assertEquals(expectedValue, columnExpression.evaluate(rowImpl));
+  }
+
+  @Test public void testGetString() {
+    String actualValue = columnExpression.getString();
+    String expectedValue = "ColumnExpression(IMEI)";
+    assertEquals(expectedValue, actualValue);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/expression/ExpressionResultTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/expression/ExpressionResultTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/ExpressionResultTest.java
new file mode 100644
index 0000000..8f0fa02
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/ExpressionResultTest.java
@@ -0,0 +1,498 @@
+/*
+ * 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.carbondata.core.scan.expression;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.carbondata.core.metadata.DataType;
+import org.apache.carbondata.core.constants.CarbonCommonConstants;
+import 
org.apache.carbondata.core.scan.expression.exception.FilterIllegalMemberException;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static junit.framework.TestCase.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertEquals;
+import static org.pentaho.di.core.util.Assert.assertFalse;
+import static org.pentaho.di.core.util.Assert.assertNull;
+
+public class ExpressionResultTest {
+  private static final double DELTA = 1e-15;
+  private static ExpressionResult expressionResult;
+
+  @BeforeClass public static void setUp() {
+    expressionResult = new ExpressionResult(DataType.INT, null);
+  }
+
+  @Test public void testGetIntForNull() throws FilterIllegalMemberException {
+    assertNull(expressionResult.getInt());
+  }
+
+  @Test public void testGetIntForString() throws FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "5");
+    int actualValue = expressionResultForString.getInt();
+    int expectedValue = 5;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetIntForNumberFormatException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "FOOBAR");
+    expressionResultForString.getInt();
+  }
+
+  @Test public void testGetIntForDouble() throws FilterIllegalMemberException {
+    ExpressionResult expressionResultForDouble = new 
ExpressionResult(DataType.DOUBLE, 5.0);
+    int actualValue = expressionResultForDouble.getInt();
+    int expectedValue = 5;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetIntForInt() throws FilterIllegalMemberException {
+    ExpressionResult expressionResultForInt = new 
ExpressionResult(DataType.INT, 5);
+    int actualValue = expressionResultForInt.getInt();
+    int expectedValue = 5;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetIntForIllegalMemberException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForInt = new 
ExpressionResult(DataType.FLOAT, 25.36);
+    expressionResultForInt.getInt();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class) public void 
testGetIntForClassCastException()
+      throws FilterIllegalMemberException {
+    ExpressionResult expressionResultForInt = new 
ExpressionResult(DataType.INT, "STRING");
+    expressionResultForInt.getInt();
+  }
+
+  @Test public void testGetShortForNull() throws FilterIllegalMemberException {
+    assertNull(expressionResult.getShort());
+  }
+
+  @Test public void testGetShortForString() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "5");
+    short actualValue = expressionResultForString.getShort();
+    short expectedValue = 5;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetShortForNumberFormatException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "FOOBAR");
+    expressionResultForString.getShort();
+  }
+
+  @Test public void testGetShortForDouble() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForDouble = new 
ExpressionResult(DataType.DOUBLE, 5.0);
+    short actualValue = expressionResultForDouble.getShort();
+    short expectedValue = 5;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetShortForInt() throws FilterIllegalMemberException {
+    ExpressionResult expressionResultForInt = new 
ExpressionResult(DataType.INT, 5);
+    short actualValue = expressionResultForInt.getShort();
+    short expectedValue = 5;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetShortForIllegalMemberException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForInt = new 
ExpressionResult(DataType.FLOAT, 25.36);
+    expressionResultForInt.getShort();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetShortForClassCastException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForInt = new 
ExpressionResult(DataType.INT, "STRING");
+    expressionResultForInt.getShort();
+  }
+
+  @Test public void testGetStringForNull() throws FilterIllegalMemberException 
{
+    assertNull(expressionResult.getString());
+  }
+
+  @Test public void testGetStringForString() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "5");
+    String actualValue = expressionResultForString.getString();
+    String expectedValue = "5";
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetStringForException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.INT, "5");
+    String actualValue = expressionResultForString.getString();
+    String expectedValue = "5";
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetDoubleForNull() throws FilterIllegalMemberException 
{
+    assertNull(expressionResult.getDouble());
+  }
+
+  @Test public void testGetDoubleForString() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "5");
+    double actualValue = expressionResultForString.getDouble();
+    double expectedValue = 5;
+    assertEquals(expectedValue, actualValue, DELTA);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetDoubleForNumberFormatException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "FOOBAR");
+    expressionResultForString.getDouble();
+  }
+
+  @Test public void testGetDoubleForInt() throws FilterIllegalMemberException {
+    ExpressionResult expressionResultForDouble = new 
ExpressionResult(DataType.INT, 5);
+    double actualValue = expressionResultForDouble.getDouble();
+    double expectedValue = 5.0;
+    assertEquals(expectedValue, actualValue, DELTA);
+  }
+
+  @Test public void testGetDoubleForDouble() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForDouble = new 
ExpressionResult(DataType.DOUBLE, 5.0);
+    double actualValue = expressionResultForDouble.getDouble();
+    double expectedValue = 5;
+    assertEquals(expectedValue, actualValue, DELTA);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetDoubleForIllegalMemberException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForDouble = new 
ExpressionResult(DataType.FLOAT, 25.36);
+    expressionResultForDouble.getDouble();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetDoubleForClassCastException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForDouble = new 
ExpressionResult(DataType.DOUBLE, "STRING");
+    expressionResultForDouble.getDouble();
+  }
+
+  @Test public void testGetLongForNull() throws FilterIllegalMemberException {
+    assertNull(expressionResult.getLong());
+  }
+
+  @Test public void testGetLongForString() throws FilterIllegalMemberException 
{
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "5");
+    long actualValue = expressionResultForString.getLong();
+    long expectedValue = 5;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetLongForNumberFormatException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "FOOBAR");
+    expressionResultForString.getLong();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetLongForIllegalMemberException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForLong = new 
ExpressionResult(DataType.FLOAT, 25.36);
+    expressionResultForLong.getLong();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetLongForClassCastException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForLong = new 
ExpressionResult(DataType.LONG, "STRING");
+    expressionResultForLong.getLong();
+  }
+
+  @Test public void testGetDecimalForNull() throws 
FilterIllegalMemberException {
+    assertNull(expressionResult.getDecimal());
+  }
+
+  @Test public void testGetDecimalForString() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "5");
+    BigDecimal actualValue = expressionResultForString.getDecimal();
+    BigDecimal expectedValue = new BigDecimal(5.00);
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetDecimalForNumberFormatException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "FOOBAR");
+    expressionResultForString.getDecimal();
+  }
+
+  @Test public void testGetDecimalForInt() throws FilterIllegalMemberException 
{
+    ExpressionResult expressionResultForInt = new 
ExpressionResult(DataType.INT, 5);
+    BigDecimal actualValue = expressionResultForInt.getDecimal();
+    BigDecimal expectedValue = new BigDecimal(5);
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetDecimalForDouble() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForDouble = new 
ExpressionResult(DataType.DOUBLE, 5);
+    BigDecimal actualValue = expressionResultForDouble.getDecimal();
+    BigDecimal expectedValue = new BigDecimal(5);
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetDecimalForDecimal() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForDecimal = new 
ExpressionResult(DataType.DECIMAL, 5);
+    BigDecimal actualValue = expressionResultForDecimal.getDecimal();
+    BigDecimal expectedValue = new BigDecimal(5);
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetDecimalForIllegalMemberException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForFloat = new 
ExpressionResult(DataType.FLOAT, 25.36);
+    expressionResultForFloat.getDecimal();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetDecimalForClassCastException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForException = new 
ExpressionResult(DataType.LONG, "STRING");
+    expressionResultForException.getDecimal();
+  }
+
+  @Test public void testGetTimeForNull() throws FilterIllegalMemberException {
+    assertNull(expressionResult.getTime());
+  }
+
+  @Test public void testGetTimeForString() throws FilterIllegalMemberException 
{
+    ExpressionResult expressionResultForString =
+        new ExpressionResult(DataType.STRING, "2016-11-07 10:15:09");
+    long actualValue = expressionResultForString.getTime();
+    long expectedValue = getTime("2016-11-07 10:15:09");
+    assertEquals(expectedValue, actualValue);
+  }
+
+  public Long getTime(String value) throws FilterIllegalMemberException {
+    if (value == null) {
+      return null;
+    }
+    SimpleDateFormat parser =
+        new 
SimpleDateFormat(CarbonCommonConstants.CARBON_TIMESTAMP_DEFAULT_FORMAT);
+    Date dateToStr;
+    try {
+      dateToStr = parser.parse(value.toString());
+      return dateToStr.getTime();
+    } catch (ParseException e) {
+      throw new FilterIllegalMemberException("Cannot convert value to 
Time/Long type value");
+    }
+  }
+
+  @Test(expected = FilterIllegalMemberException.class) public void 
testGetTimeForParseException()
+      throws FilterIllegalMemberException {
+    ExpressionResult expressionResultForParseException =
+        new ExpressionResult(DataType.STRING, "FOOBAR");
+    expressionResultForParseException.getTime();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetTimeForIllegalMemberException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForFloat = new 
ExpressionResult(DataType.FLOAT, 25.36);
+    expressionResultForFloat.getTime();
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetTimeForClassCastException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForException = new 
ExpressionResult(DataType.LONG, "STRING");
+    expressionResultForException.getTime();
+  }
+
+  @Test public void testGetBooleanForNull() throws 
FilterIllegalMemberException {
+    assertNull(expressionResult.getBoolean());
+  }
+
+  @Test public void testGetBooleanForString() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.STRING, "true");
+    boolean actualValue = expressionResultForString.getBoolean();
+    boolean expectedValue = true;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetBooleanForBoolean() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForString = new 
ExpressionResult(DataType.BOOLEAN, "true");
+    boolean actualValue = expressionResultForString.getBoolean();
+    boolean expectedValue = true;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test(expected = FilterIllegalMemberException.class)
+  public void testGetBooleanForIllegalMemberException() throws 
FilterIllegalMemberException {
+    ExpressionResult expressionResultForFloat = new 
ExpressionResult(DataType.FLOAT, 25.36);
+    expressionResultForFloat.getBoolean();
+  }
+
+  @Test public void testGetList() {
+    ExpressionResult obj = new ExpressionResult(DataType.STRING, "test");
+    List<ExpressionResult> actualValue = obj.getList();
+    List<ExpressionResult> expected = new ArrayList<>();
+    expected.add(0, obj);
+    assertEquals(expected, actualValue);
+  }
+
+  @Test public void testHashCode() {
+    ExpressionResult obj = new ExpressionResult(DataType.INT, 1);
+    int actualValue = obj.hashCode();
+    int expectedValue = 80;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testHashCodeForNull() {
+    ExpressionResult obj = new ExpressionResult(null);
+    int actualValue = obj.hashCode();
+    int expectedValue = 31;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testHashCodeForNul() {
+    ExpressionResult obj = new ExpressionResult(DataType.DOUBLE, null);
+    int actualValue = obj.hashCode();
+    int expectedValue = 31;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testEqualsForObjNOtInstanceOfExpressionResult() {
+    ExpressionResult expressionResult = new ExpressionResult(DataType.INT, 5);
+    List obj = new ArrayList();
+    obj.add(0, 0);
+    obj.add(1, 1);
+    boolean result = expressionResult.equals(obj);
+    assertFalse(result);
+  }
+
+  @Test public void testEqualsForString() {
+    ExpressionResult expressionResult = new ExpressionResult(DataType.STRING, 
"5");
+    ExpressionResult objToCompare = new ExpressionResult(DataType.STRING, "6");
+    boolean result = expressionResult.equals(objToCompare);
+    assertFalse(result);
+  }
+
+  @Test public void testEqualsForShort() {
+    ExpressionResult expressionResult = new ExpressionResult(DataType.SHORT, 
5);
+    ExpressionResult objToCompare = new ExpressionResult(DataType.SHORT, 6);
+    boolean result = expressionResult.equals(objToCompare);
+    assertFalse(result);
+  }
+
+  @Test public void testEqualsForInt() {
+    ExpressionResult expressionResult = new ExpressionResult(DataType.INT, 5);
+    ExpressionResult objToCompare = new ExpressionResult(DataType.INT, 6);
+    boolean result = expressionResult.equals(objToCompare);
+    assertFalse(result);
+  }
+
+  @Test public void testEqualsForDecimal() {
+    ExpressionResult expressionResult = new ExpressionResult(DataType.DECIMAL, 
5);
+    ExpressionResult objToCompare = new ExpressionResult(DataType.DECIMAL, 6);
+    boolean result = expressionResult.equals(objToCompare);
+    assertFalse(result);
+  }
+
+  @Test public void testEqualsForDouble() {
+    ExpressionResult expressionResult = new ExpressionResult(DataType.DOUBLE, 
5.89);
+    ExpressionResult objToCompare = new ExpressionResult(DataType.DOUBLE, 
6.90);
+    boolean result = expressionResult.equals(objToCompare);
+    assertFalse(result);
+  }
+
+  @Test public void testEqualsForException() {
+    ExpressionResult expressionResult =
+        new ExpressionResult(DataType.TIMESTAMP, "2016-11-07 10:15:09");
+    ExpressionResult objToCompare = new ExpressionResult(DataType.DOUBLE, 
"2016-11-06 10:15:09");
+    boolean result = expressionResult.equals(objToCompare);
+    assertFalse(result);
+  }
+
+  @Test public void testEqualsForLongAndTimeStamp() {
+    ExpressionResult expressionResult =
+        new ExpressionResult(DataType.TIMESTAMP, new Long(11111111111111111L));
+    ExpressionResult objToCompare =
+        new ExpressionResult(DataType.LONG, new Long(11111111111111111L));
+    boolean result = expressionResult.equals(objToCompare);
+    assertTrue(result);
+  }
+
+  @Test public void compareToForInt() {
+    ExpressionResult obj = new ExpressionResult(DataType.INT, 5);
+    ExpressionResult expressionResult = new ExpressionResult(DataType.INT, 6);
+    int actualValue = expressionResult.compareTo(obj);
+    int expectedValue = 1;
+    assertEquals(expectedValue, actualValue);
+
+  }
+
+  @Test public void compareToForDecimal() {
+    ExpressionResult obj = new ExpressionResult(DataType.DECIMAL, 5);
+    ExpressionResult expressionResult = new ExpressionResult(DataType.DECIMAL, 
6);
+    int actualValue = expressionResult.compareTo(obj);
+    int expectedValue = 1;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void compareToForException() {
+    ExpressionResult obj = new ExpressionResult(DataType.INT, 5);
+    ExpressionResult expressionResult = new ExpressionResult(DataType.DECIMAL, 
6);
+    int actualValue = expressionResult.compareTo(obj);
+    int expectedValue = -1;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void compareToForTimestamp() {
+    ExpressionResult obj = new ExpressionResult(DataType.TIMESTAMP, 
"2016-11-07 10:15:09");
+    ExpressionResult expressionResult =
+        new ExpressionResult(DataType.TIMESTAMP, "2016-11-07 10:15:09");
+    int actualValue = expressionResult.compareTo(obj);
+    int expectedValue = 0;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testGetListAsString() throws FilterIllegalMemberException {
+    ExpressionResult obj = new ExpressionResult(DataType.INT, 6);
+    List<String> actualValue = obj.getListAsString();
+    List<String> expectedValue = new ArrayList<>();
+    expectedValue.add("6");
+    assertThat(actualValue, is(equalTo(expectedValue)));
+  }
+
+  @Test public void compareToForString() {
+    ExpressionResult obj = new ExpressionResult(DataType.STRING, "2016");
+    ExpressionResult expressionResult = new ExpressionResult(DataType.STRING, 
"2016");
+    int actualValue = expressionResult.compareTo(obj);
+    int expectedValue = 0;
+    assertEquals(expectedValue, actualValue);
+  }
+
+  @Test public void testIsNullForNull() {
+    ExpressionResult obj = new ExpressionResult(DataType.STRING, null);
+    boolean actualValue = obj.isNull();
+    assertTrue(actualValue);
+  }
+
+  @Test public void testIsNullForNotNull() {
+    ExpressionResult obj = new ExpressionResult(DataType.STRING, "test");
+    boolean actualValue = obj.isNull();
+    assertFalse(actualValue);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/expression/LiteralExpressionTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/expression/LiteralExpressionTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/LiteralExpressionTest.java
new file mode 100644
index 0000000..00a2a18
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/LiteralExpressionTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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.carbondata.core.scan.expression;
+
+import org.apache.carbondata.core.metadata.DataType;
+import org.apache.carbondata.core.scan.filter.intf.RowImpl;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class LiteralExpressionTest {
+
+  private LiteralExpression literalExpression;
+
+  @Before public void setUp() {
+    String value = "testing";
+    literalExpression = new LiteralExpression(value, DataType.STRING);
+  }
+
+  @Test public void testEvaluate() {
+    RowImpl rowImpl = new RowImpl();
+    rowImpl.setValues(new String[] { "testing" });
+    ExpressionResult expectedResult = new ExpressionResult(DataType.STRING, 
"testing");
+    assertEquals(expectedResult, literalExpression.evaluate(rowImpl));
+  }
+
+  @Test public void testGetExpressionResult() {
+    RowImpl rowImpl = new RowImpl();
+    rowImpl.setValues(new String[] { "testing" });
+    literalExpression.evaluate(rowImpl);
+    ExpressionResult expectedResult = new ExpressionResult(DataType.STRING, 
"testing");
+    assertEquals(expectedResult, literalExpression.evaluate(rowImpl));
+  }
+
+  @Test public void testGetString() {
+    String actualValue = literalExpression.getString();
+    String expectedValue = "LiteralExpression(testing)";
+    assertEquals(expectedValue, actualValue);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/EqualToExpressionUnitTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/EqualToExpressionUnitTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/EqualToExpressionUnitTest.java
new file mode 100644
index 0000000..3893a07
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/EqualToExpressionUnitTest.java
@@ -0,0 +1,315 @@
+/*
+ * 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.carbondata.core.scan.expression.conditional;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.carbondata.core.metadata.DataType;
+import org.apache.carbondata.core.scan.expression.ColumnExpression;
+import org.apache.carbondata.core.scan.expression.ExpressionResult;
+import 
org.apache.carbondata.core.scan.expression.exception.FilterIllegalMemberException;
+import 
org.apache.carbondata.core.scan.expression.exception.FilterUnsupportedException;
+import org.apache.carbondata.core.scan.filter.intf.RowImpl;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.apache.spark.sql.types.Decimal;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+public class EqualToExpressionUnitTest {
+
+  static EqualToExpression equalToExpression;
+
+  @Test public void testForEqualToExpressionWithGetString() throws Exception {
+    ColumnExpression right = new ColumnExpression("name", DataType.STRING);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    String expected_result = 
"EqualTo(ColumnExpression(name),ColumnExpression(name))";
+    String result = equalToExpression.getString();
+    assertEquals(expected_result, result);
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithShortDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("id", DataType.SHORT);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    Short[] row = { 15 };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Short getShort() {
+        return 15;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithStringDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("name", DataType.STRING);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    String[] row = { "String1" };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public String getString() {
+        return "String1";
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithIntDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("number", DataType.INT);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    Integer[] row = { 14 };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Integer getInt() {
+        return 14;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithDoubleDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("contact", DataType.DOUBLE);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    Double[] row = { 44D };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Double getDouble() {
+        return 44D;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithLongDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("contact", DataType.LONG);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    Long[] row = { 1234567654321L };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Long getLong() {
+        return 1234567654321L;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithTimestampDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    try {
+      ColumnExpression right = new ColumnExpression("timestamp", 
DataType.TIMESTAMP);
+      right.setColIndex(0);
+      equalToExpression = new EqualToExpression(right, right);
+      RowImpl value = new RowImpl();
+      DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+      Date date = dateFormat.parse("23/09/2007");
+      long time = date.getTime();
+      Timestamp[] row = { new Timestamp(time) };
+      Object objectRow[] = { row };
+      value.setValues(objectRow);
+
+      new MockUp<ExpressionResult>() {
+        @Mock public Long getTime() {
+          return 18465213000000L;
+        }
+      };
+
+      ExpressionResult result = equalToExpression.evaluate(value);
+      assertTrue(result.getBoolean());
+    } catch (ParseException e) {
+      System.out.println("Error while parsing " + e.getMessage());
+    }
+  }
+
+  @Test(expected = FilterUnsupportedException.class) public void 
testForEqualToExpressionForDefaultCase()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("contact", DataType.BOOLEAN);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    Boolean[] row = { true };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+    ExpressionResult result = equalToExpression.evaluate(value);
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithBooleanParameter()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("id", DataType.SHORT);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right, true);
+    RowImpl value = new RowImpl();
+    Short[] row = { 15 };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Short getShort() {
+        return 15;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+
+  }
+
+  @Test public void 
testEvaluateForEqualToExpressionWithLeftAndRightDifferentDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression left = new ColumnExpression("name", DataType.STRING);
+    left.setColIndex(0);
+    ColumnExpression right = new ColumnExpression("number", DataType.INT);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(left, right);
+    RowImpl value = new RowImpl();
+    String[] row1 = { "String1" };
+    Integer[] row = { 14 };
+    Object objectRow[] = { row, row1 };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Integer getInt() {
+        return 14;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithIsNullReturnFalse()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("id", DataType.SHORT);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    Short[] row = { 15 };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public boolean isNull() {
+        return true;
+      }
+    };
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Short getShort() {
+        return 15;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertFalse(result.getBoolean());
+
+  }
+
+  @Test public void 
testEvaluateForEqualToExpressionWithNullWhileCreatingObject()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("id", DataType.SHORT);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right, true);
+    RowImpl value = new RowImpl();
+    Short[] row = { 15 };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public boolean isNull() {
+        return true;
+      }
+    };
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Short getShort() {
+        return 15;
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertEquals(DataType.BOOLEAN, result.getDataType());
+
+  }
+
+  @Test public void testEvaluateForEqualToExpressionWithDecimalDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("contact", DataType.DECIMAL);
+    right.setColIndex(0);
+    equalToExpression = new EqualToExpression(right, right);
+    RowImpl value = new RowImpl();
+    Decimal[] row = new Decimal[] { Decimal.apply(12345.0) };
+    Object objectRow[] = { row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public BigDecimal getDecimal() {
+        return new BigDecimal(12345.0);
+      }
+    };
+
+    ExpressionResult result = equalToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/952cf517/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/GreaterThanEqualToExpressionUnitTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/GreaterThanEqualToExpressionUnitTest.java
 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/GreaterThanEqualToExpressionUnitTest.java
new file mode 100644
index 0000000..88e3729
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/core/scan/expression/conditional/GreaterThanEqualToExpressionUnitTest.java
@@ -0,0 +1,293 @@
+/*
+ * 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.carbondata.core.scan.expression.conditional;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.carbondata.core.metadata.DataType;
+import org.apache.carbondata.core.scan.expression.ColumnExpression;
+import org.apache.carbondata.core.scan.expression.ExpressionResult;
+import 
org.apache.carbondata.core.scan.expression.exception.FilterIllegalMemberException;
+import 
org.apache.carbondata.core.scan.expression.exception.FilterUnsupportedException;
+import org.apache.carbondata.core.scan.filter.intf.RowImpl;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.apache.spark.sql.types.Decimal;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class GreaterThanEqualToExpressionUnitTest {
+
+  static GreaterThanEqualToExpression greaterThanEqualToExpression;
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithBothStringISSame()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression left = new ColumnExpression("left_name", DataType.STRING);
+    left.setColIndex(0);
+    ColumnExpression right = new ColumnExpression("right_name", 
DataType.STRING);
+    right.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    String[] row = { "string1" };
+    String[] row1 = { "string1" };
+    Object objectRow[] = { row, row1 };
+
+    new MockUp<ExpressionResult>() {
+      @Mock public String getString() {
+        return "string1";
+      }
+    };
+    value.setValues(objectRow);
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithShortDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("id", DataType.SHORT);
+    right.setColIndex(0);
+    ColumnExpression left = new ColumnExpression("id", DataType.SHORT);
+    left.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    Short[] row = { 15 };
+    Short[] row1 = { 16 };
+    Object objectRow[] = { row1, row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Short getShort() {
+        return 16;
+      }
+    };
+
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithIntDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("right_number", 
DataType.INT);
+    right.setColIndex(0);
+    ColumnExpression left = new ColumnExpression("left_number", DataType.INT);
+    left.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    Integer[] row = { 140 };
+    Integer[] row1 = { 145 };
+    Object objectRow[] = { row1, row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Integer getInt() {
+        return 145;
+      }
+    };
+
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithDoubleDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("right_contact", 
DataType.DOUBLE);
+    right.setColIndex(0);
+    ColumnExpression left = new ColumnExpression("left_contact", 
DataType.DOUBLE);
+    left.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    Double[] row = { 44D };
+    Double[] row1 = { 45D };
+    Object objectRow[] = { row1, row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Double getDouble() {
+        return 45D;
+      }
+    };
+
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithLongDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("contact", DataType.LONG);
+    right.setColIndex(0);
+    ColumnExpression left = new ColumnExpression("contact", DataType.LONG);
+    left.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    Long[] row = { 1234567654321L };
+    Long[] row1 = { 1234567654321L };
+    Object objectRow[] = { row1, row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Long getLong() {
+        return 1234567654321L;
+      }
+    };
+
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithTimestampDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    try {
+      ColumnExpression left = new ColumnExpression("timestamp", 
DataType.TIMESTAMP);
+      left.setColIndex(0);
+      ColumnExpression right = new ColumnExpression("timestamp", 
DataType.TIMESTAMP);
+      right.setColIndex(1);
+      greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+      RowImpl value = new RowImpl();
+      DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+      Date date = dateFormat.parse("23/09/2007");
+      long time = date.getTime();
+      Timestamp[] row = { new Timestamp(time) };
+      Timestamp[] row1 = { new Timestamp(time) };
+      Object objectRow[] = { row, row1 };
+      value.setValues(objectRow);
+
+      new MockUp<ExpressionResult>() {
+        @Mock public Long getTime() {
+          return 18465213000000L;
+        }
+      };
+
+      ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+      assertTrue(result.getBoolean());
+    } catch (ParseException e) {
+      System.out.println("Error while parsing " + e.getMessage());
+    }
+  }
+
+  @Test(expected = FilterUnsupportedException.class) public void 
testForGreaterThanEqualToExpressionWithDefaultCase()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("contact", DataType.BOOLEAN);
+    right.setColIndex(0);
+    ColumnExpression left = new ColumnExpression("contact", DataType.BOOLEAN);
+    left.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    Boolean[] row = { true };
+    Object objectRow[] = { row, row };
+    value.setValues(objectRow);
+    greaterThanEqualToExpression.evaluate(value);
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithDecimalDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression right = new ColumnExpression("contact", DataType.DECIMAL);
+    right.setColIndex(0);
+    ColumnExpression left = new ColumnExpression("contact", DataType.DECIMAL);
+    left.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    Decimal[] row = new Decimal[] { Decimal.apply(12345.0) };
+    Object objectRow[] = { row, row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public BigDecimal getDecimal() {
+        return new BigDecimal(12345.0);
+      }
+    };
+
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithIsNullReturnTrue()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression left = new ColumnExpression("id", DataType.SHORT);
+    left.setColIndex(0);
+    ColumnExpression right = new ColumnExpression("id", DataType.SHORT);
+    right.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    Short[] row = { 15 };
+    Object objectRow[] = { row, row };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public boolean isNull() {
+        return true;
+      }
+    };
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Short getShort() {
+        return 15;
+      }
+    };
+
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertFalse(result.getBoolean());
+
+  }
+
+  @Test public void 
testEvaluateForGreaterThanEqualToExpressionWithLeftAndRightDifferentDataType()
+      throws FilterUnsupportedException, FilterIllegalMemberException {
+    ColumnExpression left = new ColumnExpression("name", DataType.STRING);
+    left.setColIndex(1);
+    ColumnExpression right = new ColumnExpression("number", DataType.INT);
+    right.setColIndex(0);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    RowImpl value = new RowImpl();
+    String[] row1 = { "String1" };
+    Integer[] row = { 14 };
+    Object objectRow[] = { row, row1 };
+    value.setValues(objectRow);
+
+    new MockUp<ExpressionResult>() {
+      @Mock public Integer getInt() {
+        return 14;
+      }
+    };
+
+    ExpressionResult result = greaterThanEqualToExpression.evaluate(value);
+    assertTrue(result.getBoolean());
+  }
+
+  @Test public void testForGreaterThanEqualToExpressionWithGetString() throws 
Exception {
+    ColumnExpression left = new ColumnExpression("left_name", DataType.STRING);
+    left.setColIndex(0);
+    ColumnExpression right = new ColumnExpression("right_name", 
DataType.STRING);
+    right.setColIndex(1);
+    greaterThanEqualToExpression = new GreaterThanEqualToExpression(left, 
right);
+    String expected_result = 
"GreaterThanEqualTo(ColumnExpression(left_name),ColumnExpression(right_name))";
+    String result = greaterThanEqualToExpression.getString();
+    assertEquals(expected_result, result);
+  }
+
+}
+

Reply via email to