1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/*******************************************************************************
2398ee59bebad6835dab57b60157eff16d511709eMarc R. Hoffmann * Copyright (c) 2009, 2015 Mountainminds GmbH & Co. KG and Contributors
3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials
4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0
5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at
6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html
7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *
8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors:
9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *    Marc R. Hoffmann - initial API and implementation
10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *
11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/
12e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpackage org.jacoco.core.internal.data;
13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
14e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertEquals;
15e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.io.IOException;
17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.io.PipedInputStream;
18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.io.PipedOutputStream;
19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.Before;
21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.Test;
22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/**
24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Unit tests for {@link CompactDataInput} and {@link CompactDataOutput}. The
25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * tests don't care about the written binary format, they just verify symmetry.
26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */
27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic class CompactDataInputOutputTest {
28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private CompactDataOutput out;
30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private CompactDataInput in;
32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Before
34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setup() throws IOException {
35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		PipedOutputStream pipe = new PipedOutputStream();
36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		out = new CompactDataOutput(pipe);
37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		in = new CompactDataInput(new PipedInputStream(pipe));
38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarInt0x00000000() throws IOException {
42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(0x00000000);
43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarInt0x0000007F() throws IOException {
47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(0x0000007F);
48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarInt0x00000080() throws IOException {
52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(0x00000080);
53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarInt0x00000100() throws IOException {
57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(0x00000100);
58e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
60e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
61e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarInt0x12345678() throws IOException {
62e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(0x12345678);
63e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
64e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
65e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
66e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarIntMinus1() throws IOException {
67e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(-1);
68e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
69e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
70e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
71e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarIntMinValue() throws IOException {
72e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(Integer.MIN_VALUE);
73e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
74e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
75e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
76e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testVarIntMaxValue() throws IOException {
77e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testVarInt(Integer.MAX_VALUE);
78e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
79e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
80e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private void testVarInt(int value) throws IOException {
81e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		out.writeVarInt(value);
82e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		out.close();
83e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(Long.valueOf(value), Long.valueOf(in.readVarInt()));
84e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(Integer.valueOf(-1), Integer.valueOf(in.read()));
85e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
86e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
87e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
88e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testPackedBooleanEmpty() throws IOException {
89e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testPackedBoolean();
90e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
91e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
92e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
93e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testPackedBoolean3() throws IOException {
94e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testPackedBoolean(false, false, true);
95e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
96e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
97e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
98e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testPackedBoolean8() throws IOException {
99e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testPackedBoolean(true, false, true, false, false, true, false, true);
100e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
101e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
102e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
103e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testPackedBoolean9() throws IOException {
104e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		testPackedBoolean(true, true, false, true, false, false, true, false,
105e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				true);
106e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
107e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
108e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private void testPackedBoolean(boolean... values) throws IOException {
109e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		out.writeBooleanArray(values);
110e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		out.close();
111e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final boolean[] actual = in.readBooleanArray();
112e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		for (int i = 0; i < values.length; i++) {
113e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			assertEquals("Index " + i, Boolean.valueOf(values[i]),
114e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov					Boolean.valueOf(actual[i]));
115e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		}
116e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
117e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
118e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov}
119