You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ra...@apache.org on 2015/04/27 08:52:53 UTC

phoenix git commit: PHOENIX-1863 Create unit test for inverting the pad character (Dumindu Buddhika)

Repository: phoenix
Updated Branches:
  refs/heads/4.4-HBase-1.1 4e3957e54 -> 2a55a8443


PHOENIX-1863  Create unit test for inverting the pad character (Dumindu
Buddhika)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/2a55a844
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/2a55a844
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/2a55a844

Branch: refs/heads/4.4-HBase-1.1
Commit: 2a55a84438d770b4593d4c15654ac1b408cbd614
Parents: 4e3957e
Author: ramkrishna <ra...@gmail.com>
Authored: Mon Apr 27 12:21:58 2015 +0530
Committer: ramkrishna <ra...@gmail.com>
Committed: Mon Apr 27 12:21:58 2015 +0530

----------------------------------------------------------------------
 .../org/apache/phoenix/schema/PCharPadTest.java | 147 +++++++++++++++++++
 1 file changed, 147 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/2a55a844/phoenix-core/src/test/java/org/apache/phoenix/schema/PCharPadTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/schema/PCharPadTest.java b/phoenix-core/src/test/java/org/apache/phoenix/schema/PCharPadTest.java
new file mode 100644
index 0000000..6f511e9
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/phoenix/schema/PCharPadTest.java
@@ -0,0 +1,147 @@
+/*
+ * 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.phoenix.schema;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.phoenix.expression.LiteralExpression;
+import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr;
+import org.apache.phoenix.schema.types.PChar;
+import org.apache.phoenix.schema.types.PDataType;
+import org.junit.Test;
+
+public class PCharPadTest {
+
+    public void test(String value, PDataType dataType, int length, SortOrder sortOrder, byte[] result) throws SQLException {
+        LiteralExpression expr = LiteralExpression.newConstant(value, dataType, sortOrder);
+        ImmutableBytesPtr ptr = new ImmutableBytesPtr(expr.getBytes());
+        dataType.pad(ptr, length, sortOrder);
+        String resultValue = (String) dataType.toObject(ptr, dataType, sortOrder);
+        assertTrue(Arrays.equals(result, ptr.get()));
+        assertEquals(value, resultValue);
+    }
+
+    @Test
+    public void testCharPaddingAsc1() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "hellow";
+        byte[] result = new byte[]{104, 101, 108, 108, 111, 119, 32, 32, 32, 32};
+        test(str, dataType, 10, SortOrder.ASC, result);
+    }
+
+    @Test
+    public void testCharPaddingAsc2() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "phoenix";
+        byte[] result = new byte[]{112, 104, 111, 101, 110, 105, 120, 32, 32, 32, 32, 32, 32, 32};
+        test(str, dataType, 14, SortOrder.ASC, result);
+    }
+
+    @Test
+    public void testCharPaddingAsc3() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "phoenix";
+        byte[] result = new byte[]{112, 104, 111, 101, 110, 105, 120};
+        test(str, dataType, 7, SortOrder.ASC, result);
+    }
+
+    @Test
+    public void testCharPaddingAsc4() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "hello world";
+        byte[] result = new byte[]{104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 32, 32, 32, 32, 32};
+        test(str, dataType, 16, SortOrder.ASC, result);
+    }
+
+    @Test
+    public void testCharPaddingDesc1() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "hellow";
+        byte[] result = new byte[]{-105, -102, -109, -109, -112, -120, -33, -33, -33, -33};
+        test(str, dataType, 10, SortOrder.DESC, result);
+    }
+
+    @Test
+    public void testCharPaddingDesc2() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "phoenix";
+        byte[] result = new byte[]{-113, -105, -112, -102, -111, -106, -121, -33, -33, -33, -33, -33, -33, -33, -33};
+        test(str, dataType, 15, SortOrder.DESC, result);
+    }
+
+    @Test
+    public void testCharPaddingDesc3() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "phoenix";
+        byte[] result = new byte[]{-113, -105, -112, -102, -111, -106, -121};
+        test(str, dataType, 7, SortOrder.DESC, result);
+    }
+
+    @Test
+    public void testCharPaddingDesc4() throws SQLException {
+        PDataType dataType = PChar.INSTANCE;
+        String str = "hello world";
+        byte[] result = new byte[]{-105, -102, -109, -109, -112, -33, -120, -112, -115, -109, -101, -33, -33, -33, -33, -33};
+        test(str, dataType, 16, SortOrder.DESC, result);
+    }
+
+    @Test
+    public void testRelativeByteArrayOrder() throws SQLException {
+        String[] inputs = {"foo", "foo!", "fooA", "foo~"};
+        PDataType dataType = PChar.INSTANCE;
+        Arrays.sort(inputs);
+        List<byte[]> ascOrderedInputs = new ArrayList<>(inputs.length);
+        SortOrder sortOrder = SortOrder.ASC;
+        for (String input : inputs) {
+            LiteralExpression expr = LiteralExpression.newConstant(input, dataType, sortOrder);
+            ImmutableBytesPtr ptr = new ImmutableBytesPtr(expr.getBytes());
+            dataType.pad(ptr, 8, sortOrder);
+            ascOrderedInputs.add(ptr.copyBytes());
+        }
+        Collections.sort(ascOrderedInputs, Bytes.BYTES_COMPARATOR);
+        for (int i = 0; i < inputs.length; i++) {
+            byte[] bytes = ascOrderedInputs.get(i);
+            String resultValue = (String) dataType.toObject(bytes, 0, bytes.length, dataType, sortOrder);
+            assertEquals(inputs[i], resultValue);
+        }
+
+        List<byte[]> descOrderedInputs = new ArrayList<>(inputs.length);
+        sortOrder = SortOrder.DESC;
+        for (String input : inputs) {
+            LiteralExpression expr = LiteralExpression.newConstant(input, dataType, sortOrder);
+            ImmutableBytesPtr ptr = new ImmutableBytesPtr(expr.getBytes());
+            dataType.pad(ptr, 8, sortOrder);
+            descOrderedInputs.add(ptr.copyBytes());
+        }
+        Collections.sort(descOrderedInputs, Bytes.BYTES_COMPARATOR);
+        for (int i = 0; i < inputs.length; i++) {
+            byte[] bytes = descOrderedInputs.get(i);
+            String resultValue = (String) dataType.toObject(bytes, 0, bytes.length, dataType, sortOrder);
+            assertEquals(inputs[inputs.length - 1 - i], resultValue);
+        }
+    }
+}