PageRenderTime 49ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/tags/release-0.1-rc2/hive/external/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyPrimitive.java

#
Java | 416 lines | 341 code | 32 blank | 43 comment | 2 complexity | 40e5286e60566a348ab455f19a651890 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, JSON, CPL-1.0
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. package org.apache.hadoop.hive.serde2.lazy;
  19. import junit.framework.TestCase;
  20. import org.apache.hadoop.hive.serde2.ByteStream;
  21. import org.apache.hadoop.hive.serde2.io.ByteWritable;
  22. import org.apache.hadoop.hive.serde2.io.DoubleWritable;
  23. import org.apache.hadoop.hive.serde2.io.ShortWritable;
  24. import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyPrimitiveObjectInspectorFactory;
  25. import org.apache.hadoop.io.IntWritable;
  26. import org.apache.hadoop.io.LongWritable;
  27. import org.apache.hadoop.io.Text;
  28. /**
  29. * TestLazyPrimitive.
  30. *
  31. */
  32. public class TestLazyPrimitive extends TestCase {
  33. /**
  34. * Initialize the LazyObject with the parameters, wrapping the byte[]
  35. * automatically.
  36. */
  37. public static void initLazyObject(LazyObject lo, byte[] data, int start,
  38. int length) {
  39. ByteArrayRef b = new ByteArrayRef();
  40. b.setData(data);
  41. lo.init(b, start, length);
  42. }
  43. /**
  44. * Test the LazyByte class.
  45. */
  46. public void testLazyByte() throws Throwable {
  47. try {
  48. LazyByte b = new LazyByte(
  49. LazyPrimitiveObjectInspectorFactory.LAZY_BYTE_OBJECT_INSPECTOR);
  50. initLazyObject(b, new byte[] {'0'}, 0, 0);
  51. assertNull(b.getWritableObject());
  52. initLazyObject(b, new byte[] {'0'}, 0, 1);
  53. assertEquals(new ByteWritable((byte) 0), b.getWritableObject());
  54. initLazyObject(b, new byte[] {'+', '0'}, 0, 2);
  55. assertEquals(new ByteWritable((byte) 0), b.getWritableObject());
  56. initLazyObject(b, new byte[] {'-', '0'}, 0, 2);
  57. assertEquals(new ByteWritable((byte) 0), b.getWritableObject());
  58. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 1);
  59. assertEquals(new ByteWritable((byte) 1), b.getWritableObject());
  60. initLazyObject(b, new byte[] {'a', '-', '1'}, 1, 2);
  61. assertEquals(new ByteWritable((byte) -1), b.getWritableObject());
  62. initLazyObject(b, new byte[] {'a', '+', '1'}, 1, 2);
  63. assertEquals(new ByteWritable((byte) 1), b.getWritableObject());
  64. initLazyObject(b, new byte[] {'-', '1', '2', '8'}, 0, 4);
  65. assertEquals(new ByteWritable((byte) -128), b.getWritableObject());
  66. initLazyObject(b, new byte[] {'+', '1', '2', '7'}, 0, 4);
  67. assertEquals(new ByteWritable((byte) 127), b.getWritableObject());
  68. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 2);
  69. assertNull(b.getWritableObject());
  70. initLazyObject(b, new byte[] {'+', '1', '2', '8'}, 0, 4);
  71. assertNull(b.getWritableObject());
  72. initLazyObject(b, new byte[] {'-', '1', '2', '9'}, 0, 4);
  73. assertNull(b.getWritableObject());
  74. initLazyObject(b, new byte[] {'-', '1', '2', '3'}, 0, 1);
  75. assertNull(b.getWritableObject());
  76. initLazyObject(b, new byte[] {'+', '1', '2', '3'}, 0, 1);
  77. assertNull(b.getWritableObject());
  78. } catch (Throwable e) {
  79. e.printStackTrace();
  80. throw e;
  81. }
  82. }
  83. /**
  84. * Test the LazyShort class.
  85. */
  86. public void testLazyShort() throws Throwable {
  87. try {
  88. LazyShort b = new LazyShort(
  89. LazyPrimitiveObjectInspectorFactory.LAZY_SHORT_OBJECT_INSPECTOR);
  90. initLazyObject(b, new byte[] {'0'}, 0, 0);
  91. assertNull(b.getWritableObject());
  92. initLazyObject(b, new byte[] {'0'}, 0, 1);
  93. assertEquals(new ShortWritable((short) 0), b.getWritableObject());
  94. initLazyObject(b, new byte[] {'+', '0'}, 0, 2);
  95. assertEquals(new ShortWritable((short) 0), b.getWritableObject());
  96. initLazyObject(b, new byte[] {'-', '0'}, 0, 2);
  97. assertEquals(new ShortWritable((short) 0), b.getWritableObject());
  98. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 1);
  99. assertEquals(new ShortWritable((short) 1), b.getWritableObject());
  100. initLazyObject(b, new byte[] {'a', '-', '1'}, 1, 2);
  101. assertEquals(new ShortWritable((short) -1), b.getWritableObject());
  102. initLazyObject(b, new byte[] {'a', '+', '1'}, 1, 2);
  103. assertEquals(new ShortWritable((short) 1), b.getWritableObject());
  104. initLazyObject(b, new byte[] {'-', '1', '2', '8'}, 0, 4);
  105. assertEquals(new ShortWritable((short) -128), b.getWritableObject());
  106. initLazyObject(b, new byte[] {'+', '1', '2', '7'}, 0, 4);
  107. assertEquals(new ShortWritable((short) 127), b.getWritableObject());
  108. initLazyObject(b, new byte[] {'-', '3', '2', '7', '6', '8'}, 0, 6);
  109. assertEquals(new ShortWritable((short) -32768), b.getWritableObject());
  110. initLazyObject(b, new byte[] {'+', '3', '2', '7', '6', '7'}, 0, 6);
  111. assertEquals(new ShortWritable((short) 32767), b.getWritableObject());
  112. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 2);
  113. assertNull(b.getWritableObject());
  114. initLazyObject(b, new byte[] {'-', '3', '2', '7', '6', '9'}, 0, 6);
  115. assertNull(b.getWritableObject());
  116. initLazyObject(b, new byte[] {'+', '3', '2', '7', '6', '8'}, 0, 6);
  117. assertNull(b.getWritableObject());
  118. initLazyObject(b, new byte[] {'-', '1', '2', '3'}, 0, 1);
  119. assertNull(b.getWritableObject());
  120. initLazyObject(b, new byte[] {'+', '1', '2', '3'}, 0, 1);
  121. assertNull(b.getWritableObject());
  122. } catch (Throwable e) {
  123. e.printStackTrace();
  124. throw e;
  125. }
  126. }
  127. /**
  128. * Test the LazyInteger class.
  129. */
  130. public void testLazyInteger() throws Throwable {
  131. try {
  132. LazyInteger b = new LazyInteger(
  133. LazyPrimitiveObjectInspectorFactory.LAZY_INT_OBJECT_INSPECTOR);
  134. initLazyObject(b, new byte[] {'0'}, 0, 0);
  135. assertNull(b.getWritableObject());
  136. initLazyObject(b, new byte[] {'0'}, 0, 1);
  137. assertEquals(new IntWritable(0), b.getWritableObject());
  138. initLazyObject(b, new byte[] {'+', '0'}, 0, 2);
  139. assertEquals(new IntWritable(0), b.getWritableObject());
  140. initLazyObject(b, new byte[] {'-', '0'}, 0, 2);
  141. assertEquals(new IntWritable(0), b.getWritableObject());
  142. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 1);
  143. assertEquals(new IntWritable(1), b.getWritableObject());
  144. initLazyObject(b, new byte[] {'a', '-', '1'}, 1, 2);
  145. assertEquals(new IntWritable(-1), b.getWritableObject());
  146. initLazyObject(b, new byte[] {'a', '+', '1'}, 1, 2);
  147. assertEquals(new IntWritable(1), b.getWritableObject());
  148. initLazyObject(b, new byte[] {'-', '1', '2', '8'}, 0, 4);
  149. assertEquals(new IntWritable(-128), b.getWritableObject());
  150. initLazyObject(b, new byte[] {'+', '1', '2', '7'}, 0, 4);
  151. assertEquals(new IntWritable(127), b.getWritableObject());
  152. initLazyObject(b, new byte[] {'-', '3', '2', '7', '6', '8'}, 0, 6);
  153. assertEquals(new IntWritable(-32768), b.getWritableObject());
  154. initLazyObject(b, new byte[] {'+', '3', '2', '7', '6', '7'}, 0, 6);
  155. assertEquals(new IntWritable(32767), b.getWritableObject());
  156. initLazyObject(b, new byte[] {'-', '2', '1', '4', '7', '4', '8', '3',
  157. '6', '4', '8'}, 0, 11);
  158. assertEquals(new IntWritable(-2147483648), b.getWritableObject());
  159. initLazyObject(b, new byte[] {'+', '2', '1', '4', '7', '4', '8', '3',
  160. '6', '4', '7'}, 0, 11);
  161. assertEquals(new IntWritable(2147483647), b.getWritableObject());
  162. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 2);
  163. assertNull(b.getWritableObject());
  164. initLazyObject(b, new byte[] {'-', '2', '1', '4', '7', '4', '8', '3',
  165. '6', '4', '9'}, 0, 11);
  166. assertNull(b.getWritableObject());
  167. initLazyObject(b, new byte[] {'+', '2', '1', '4', '7', '4', '8', '3',
  168. '6', '4', '8'}, 0, 11);
  169. assertNull(b.getWritableObject());
  170. initLazyObject(b, new byte[] {'-', '1', '2', '3'}, 0, 1);
  171. assertNull(b.getWritableObject());
  172. initLazyObject(b, new byte[] {'+', '1', '2', '3'}, 0, 1);
  173. assertNull(b.getWritableObject());
  174. } catch (Throwable e) {
  175. e.printStackTrace();
  176. throw e;
  177. }
  178. }
  179. /**
  180. * Test the LazyLong class.
  181. */
  182. public void testLazyLong() throws Throwable {
  183. try {
  184. LazyLong b = new LazyLong(
  185. LazyPrimitiveObjectInspectorFactory.LAZY_LONG_OBJECT_INSPECTOR);
  186. initLazyObject(b, new byte[] {'0'}, 0, 0);
  187. assertNull(b.getWritableObject());
  188. initLazyObject(b, new byte[] {'0'}, 0, 1);
  189. assertEquals(new LongWritable(0), b.getWritableObject());
  190. initLazyObject(b, new byte[] {'+', '0'}, 0, 2);
  191. assertEquals(new LongWritable(0), b.getWritableObject());
  192. initLazyObject(b, new byte[] {'-', '0'}, 0, 2);
  193. assertEquals(new LongWritable(0), b.getWritableObject());
  194. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 1);
  195. assertEquals(new LongWritable(1), b.getWritableObject());
  196. initLazyObject(b, new byte[] {'a', '-', '1'}, 1, 2);
  197. assertEquals(new LongWritable(-1), b.getWritableObject());
  198. initLazyObject(b, new byte[] {'a', '+', '1'}, 1, 2);
  199. assertEquals(new LongWritable(1), b.getWritableObject());
  200. initLazyObject(b, new byte[] {'-', '1', '2', '8'}, 0, 4);
  201. assertEquals(new LongWritable(-128), b.getWritableObject());
  202. initLazyObject(b, new byte[] {'+', '1', '2', '7'}, 0, 4);
  203. assertEquals(new LongWritable(127), b.getWritableObject());
  204. initLazyObject(b, new byte[] {'-', '3', '2', '7', '6', '8'}, 0, 6);
  205. assertEquals(new LongWritable(-32768), b.getWritableObject());
  206. initLazyObject(b, new byte[] {'+', '3', '2', '7', '6', '7'}, 0, 6);
  207. assertEquals(new LongWritable(32767), b.getWritableObject());
  208. initLazyObject(b, new byte[] {'-', '2', '1', '4', '7', '4', '8', '3',
  209. '6', '4', '8'}, 0, 11);
  210. assertEquals(new LongWritable(-2147483648), b.getWritableObject());
  211. initLazyObject(b, new byte[] {'+', '2', '1', '4', '7', '4', '8', '3',
  212. '6', '4', '7'}, 0, 11);
  213. assertEquals(new LongWritable(2147483647), b.getWritableObject());
  214. initLazyObject(b, new byte[] {'-', '9', '2', '2', '3', '3', '7', '2',
  215. '0', '3', '6', '8', '5', '4', '7', '7', '5', '8', '0', '8'}, 0, 20);
  216. assertEquals(new LongWritable(-9223372036854775808L), b
  217. .getWritableObject());
  218. initLazyObject(b, new byte[] {'+', '9', '2', '2', '3', '3', '7', '2',
  219. '0', '3', '6', '8', '5', '4', '7', '7', '5', '8', '0', '7'}, 0, 20);
  220. assertEquals(new LongWritable(9223372036854775807L), b
  221. .getWritableObject());
  222. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 2);
  223. assertNull(b.getWritableObject());
  224. initLazyObject(b, new byte[] {'-', '9', '2', '2', '3', '3', '7', '2',
  225. '0', '3', '6', '8', '5', '4', '7', '7', '5', '8', '0', '9'}, 0, 20);
  226. assertNull(b.getWritableObject());
  227. initLazyObject(b, new byte[] {'+', '9', '2', '2', '3', '3', '7', '2',
  228. '0', '3', '6', '8', '5', '4', '7', '7', '5', '8', '0', '8'}, 0, 20);
  229. assertNull(b.getWritableObject());
  230. initLazyObject(b, new byte[] {'-', '1', '2', '3'}, 0, 1);
  231. assertNull(b.getWritableObject());
  232. initLazyObject(b, new byte[] {'+', '1', '2', '3'}, 0, 1);
  233. assertNull(b.getWritableObject());
  234. } catch (Throwable e) {
  235. e.printStackTrace();
  236. throw e;
  237. }
  238. }
  239. /**
  240. * Test the LazyDouble class.
  241. */
  242. public void testLazyDouble() throws Throwable {
  243. try {
  244. LazyDouble b = new LazyDouble(
  245. LazyPrimitiveObjectInspectorFactory.LAZY_DOUBLE_OBJECT_INSPECTOR);
  246. initLazyObject(b, new byte[] {'0'}, 0, 0);
  247. assertNull(b.getWritableObject());
  248. initLazyObject(b, new byte[] {'0'}, 0, 1);
  249. assertEquals(new DoubleWritable(0), b.getWritableObject());
  250. initLazyObject(b, new byte[] {'+', '0'}, 0, 2);
  251. assertEquals(new DoubleWritable(0), b.getWritableObject());
  252. initLazyObject(b, new byte[] {'-', '0'}, 0, 2);
  253. assertEquals(new DoubleWritable(-0.0), b.getWritableObject());
  254. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 1);
  255. assertEquals(new DoubleWritable(1), b.getWritableObject());
  256. initLazyObject(b, new byte[] {'a', '-', '1'}, 1, 2);
  257. assertEquals(new DoubleWritable(-1), b.getWritableObject());
  258. initLazyObject(b, new byte[] {'a', '+', '1'}, 1, 2);
  259. assertEquals(new DoubleWritable(1), b.getWritableObject());
  260. initLazyObject(b, new byte[] {'-', '1', '2', '8'}, 0, 4);
  261. assertEquals(new DoubleWritable(-128), b.getWritableObject());
  262. initLazyObject(b, new byte[] {'+', '1', '2', '7'}, 0, 4);
  263. assertEquals(new DoubleWritable(127), b.getWritableObject());
  264. initLazyObject(b, new byte[] {'-', '3', '2', '7', '6', '8'}, 0, 6);
  265. assertEquals(new DoubleWritable(-32768), b.getWritableObject());
  266. initLazyObject(b, new byte[] {'+', '3', '2', '7', '6', '7'}, 0, 6);
  267. assertEquals(new DoubleWritable(32767), b.getWritableObject());
  268. initLazyObject(b, new byte[] {'-', '2', '1', '4', '7', '4', '8', '3',
  269. '6', '4', '8'}, 0, 11);
  270. assertEquals(new DoubleWritable(-2147483648), b.getWritableObject());
  271. initLazyObject(b, new byte[] {'+', '2', '1', '4', '7', '4', '8', '3',
  272. '6', '4', '7'}, 0, 11);
  273. assertEquals(new DoubleWritable(2147483647), b.getWritableObject());
  274. initLazyObject(b, new byte[] {'-', '9', '2', '2', '3', '3', '7', '2',
  275. '0', '3', '6', '8', '5', '4', '7', '7', '5', '8', '0', '8'}, 0, 20);
  276. assertEquals(new DoubleWritable(-9223372036854775808L), b
  277. .getWritableObject());
  278. initLazyObject(b, new byte[] {'+', '9', '2', '2', '3', '3', '7', '2',
  279. '0', '3', '6', '8', '5', '4', '7', '7', '5', '8', '0', '7'}, 0, 20);
  280. assertEquals(new DoubleWritable(9223372036854775807L), b
  281. .getWritableObject());
  282. initLazyObject(b, new byte[] {'-', '3', '.', '7', '6', '8'}, 0, 6);
  283. assertEquals(new DoubleWritable(-3.768), b.getWritableObject());
  284. initLazyObject(b, new byte[] {'+', '3', '.', '7', '6', '7'}, 0, 6);
  285. assertEquals(new DoubleWritable(3.767), b.getWritableObject());
  286. initLazyObject(b, new byte[] {'-', '2', '.', '4', '7', '4', '8', '3',
  287. '6', 'e', '8'}, 0, 11);
  288. assertEquals(new DoubleWritable(-2.474836e8), b.getWritableObject());
  289. initLazyObject(b, new byte[] {'+', '2', '.', '4', '7', '4', '8', '3',
  290. 'E', '-', '7'}, 0, 11);
  291. assertEquals(new DoubleWritable(2.47483E-7), b.getWritableObject());
  292. initLazyObject(b, new byte[] {'-', '.', '4', '7', '4', '8', '3', '6',
  293. 'e', '8'}, 0, 10);
  294. assertEquals(new DoubleWritable(-.474836e8), b.getWritableObject());
  295. initLazyObject(b, new byte[] {'+', '.', '4', '7', '4', '8', '3', 'E',
  296. '-', '7'}, 0, 10);
  297. assertEquals(new DoubleWritable(.47483E-7), b.getWritableObject());
  298. initLazyObject(b, new byte[] {'-', '2', '1', '4', '7', '4', '8', '3',
  299. '6', '4', '.'}, 0, 11);
  300. assertEquals(new DoubleWritable(-214748364.), b.getWritableObject());
  301. initLazyObject(b, new byte[] {'+', '2', '1', '4', '7', '4', '8', '3',
  302. '6', '4', '.'}, 0, 11);
  303. assertEquals(new DoubleWritable(+214748364.), b.getWritableObject());
  304. initLazyObject(b, new byte[] {'.', '0'}, 0, 2);
  305. assertEquals(new DoubleWritable(.0), b.getWritableObject());
  306. initLazyObject(b, new byte[] {'0', '.'}, 0, 2);
  307. assertEquals(new DoubleWritable(0.), b.getWritableObject());
  308. initLazyObject(b, new byte[] {'a', '1', 'b'}, 1, 2);
  309. assertNull(b.getWritableObject());
  310. assertNull(b.getWritableObject());
  311. initLazyObject(b, new byte[] {'.', '1', '2', '3'}, 0, 1);
  312. assertNull(b.getWritableObject());
  313. initLazyObject(b, new byte[] {'-', '1', '2', '3'}, 0, 1);
  314. assertNull(b.getWritableObject());
  315. initLazyObject(b, new byte[] {'+', '1', '2', '3'}, 0, 1);
  316. assertNull(b.getWritableObject());
  317. initLazyObject(b, new byte[] {'-', '1', 'e', '3', '3', '3', '3', '3', '3'}, 0, 9);
  318. assertEquals(new DoubleWritable(Double.NEGATIVE_INFINITY), b
  319. .getWritableObject());
  320. initLazyObject(b, new byte[] {'+', '1', 'e', '3', '3', '3', '3', '3', '3'}, 0, 9);
  321. assertEquals(new DoubleWritable(Double.POSITIVE_INFINITY), b
  322. .getWritableObject());
  323. initLazyObject(b, new byte[] {'+', '1', 'e', '-', '3', '3', '3', '3', '3'}, 0, 8);
  324. assertEquals(new DoubleWritable(0), b.getWritableObject());
  325. initLazyObject(b, new byte[] {'-', '1', 'e', '-', '3', '3', '3', '3', '3'}, 0, 8);
  326. assertEquals(new DoubleWritable(-0.0), b.getWritableObject());
  327. } catch (Throwable e) {
  328. e.printStackTrace();
  329. throw e;
  330. }
  331. }
  332. /**
  333. * Test the LazyString class.
  334. */
  335. public void testLazyString() throws Throwable {
  336. try {
  337. LazyString b = new LazyString(LazyPrimitiveObjectInspectorFactory
  338. .getLazyStringObjectInspector(false, (byte) 0));
  339. initLazyObject(b, new byte[] {'0'}, 0, 0);
  340. assertEquals(new Text(""), b.getWritableObject());
  341. initLazyObject(b, new byte[] {'0'}, 0, 1);
  342. assertEquals(new Text("0"), b.getWritableObject());
  343. initLazyObject(b, new byte[] {'0', '1', '2'}, 1, 1);
  344. assertEquals(new Text("1"), b.getWritableObject());
  345. } catch (Throwable e) {
  346. e.printStackTrace();
  347. throw e;
  348. }
  349. }
  350. public void testLazyIntegerWrite() throws Throwable {
  351. try {
  352. ByteStream.Output out = new ByteStream.Output();
  353. int[] tests = {0, -1, 1, -10, 10, -123, 123, Integer.MIN_VALUE,
  354. Integer.MIN_VALUE + 1, Integer.MAX_VALUE, Integer.MAX_VALUE - 1};
  355. for (int v : tests) {
  356. out.reset();
  357. LazyInteger.writeUTF8(out, v);
  358. Text t = new Text();
  359. t.set(out.getData(), 0, out.getCount());
  360. assertEquals(String.valueOf(v), t.toString());
  361. }
  362. } catch (Throwable e) {
  363. e.printStackTrace();
  364. throw e;
  365. }
  366. }
  367. public void testLazyLongWrite() throws Throwable {
  368. try {
  369. ByteStream.Output out = new ByteStream.Output();
  370. long[] tests = {0L, -1, 1, -10, 10, -123, 123, Long.MIN_VALUE,
  371. Long.MIN_VALUE + 1, Long.MAX_VALUE, Long.MAX_VALUE - 1};
  372. for (long v : tests) {
  373. out.reset();
  374. LazyLong.writeUTF8(out, v);
  375. Text t = new Text();
  376. t.set(out.getData(), 0, out.getCount());
  377. assertEquals(String.valueOf(v), t.toString());
  378. }
  379. } catch (Throwable e) {
  380. e.printStackTrace();
  381. throw e;
  382. }
  383. }
  384. }