Skip to content

Commit 416a7d4

Browse files
committed
Fix bugs detected by LGTM
1 parent bb82f92 commit 416a7d4

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed

src/main/java/me/lemire/longcompression/LongVariableByte.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,28 +60,28 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o
6060
buf.put((byte) extract7bits(1, val));
6161
buf.put((byte) extract7bits(2, val));
6262
buf.put((byte) (extract7bitsmaskless(3, (val)) | (1 << 7)));
63-
} else if (val >= 0 && val < (1 << 35)) {
63+
} else if (val >= 0 && val < (1L << 35)) {
6464
buf.put((byte) extract7bits(0, val));
6565
buf.put((byte) extract7bits(1, val));
6666
buf.put((byte) extract7bits(2, val));
6767
buf.put((byte) extract7bits(3, val));
6868
buf.put((byte) (extract7bitsmaskless(4, (val)) | (1 << 7)));
69-
} else if (val >= 0 && val < (1 << 42)) {
69+
} else if (val >= 0 && val < (1L << 42)) {
7070
buf.put((byte) extract7bits(0, val));
7171
buf.put((byte) extract7bits(1, val));
7272
buf.put((byte) extract7bits(2, val));
7373
buf.put((byte) extract7bits(3, val));
7474
buf.put((byte) extract7bits(4, val));
7575
buf.put((byte) (extract7bitsmaskless(5, (val)) | (1 << 7)));
76-
} else if (val >= 0 && val < (1 << 49)) {
76+
} else if (val >= 0 && val < (1L << 49)) {
7777
buf.put((byte) extract7bits(0, val));
7878
buf.put((byte) extract7bits(1, val));
7979
buf.put((byte) extract7bits(2, val));
8080
buf.put((byte) extract7bits(3, val));
8181
buf.put((byte) extract7bits(4, val));
8282
buf.put((byte) extract7bits(5, val));
8383
buf.put((byte) (extract7bitsmaskless(6, (val)) | (1 << 7)));
84-
} else if (val >= 0 && val < (1 << 56)) {
84+
} else if (val >= 0 && val < (1L << 56)) {
8585
buf.put((byte) extract7bits(0, val));
8686
buf.put((byte) extract7bits(1, val));
8787
buf.put((byte) extract7bits(2, val));
@@ -90,7 +90,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o
9090
buf.put((byte) extract7bits(5, val));
9191
buf.put((byte) extract7bits(6, val));
9292
buf.put((byte) (extract7bitsmaskless(7, (val)) | (1 << 7)));
93-
} else if (val >= 0 && val < (1 << 63)) {
93+
} else if (val >= 0 && val < (1L << 63)) {
9494
buf.put((byte) extract7bits(0, val));
9595
buf.put((byte) extract7bits(1, val));
9696
buf.put((byte) extract7bits(2, val));
@@ -145,28 +145,28 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out,
145145
out[outpostmp++] = (byte) extract7bits(1, val);
146146
out[outpostmp++] = (byte) extract7bits(2, val);
147147
out[outpostmp++] = (byte) (extract7bitsmaskless(3, (val)) | (1 << 7));
148-
} else if (val >= 0 && val < (1 << 35)) {
148+
} else if (val >= 0 && val < (1L << 35)) {
149149
out[outpostmp++] = (byte) extract7bits(0, val);
150150
out[outpostmp++] = (byte) extract7bits(1, val);
151151
out[outpostmp++] = (byte) extract7bits(2, val);
152152
out[outpostmp++] = (byte) extract7bits(3, val);
153153
out[outpostmp++] = (byte) (extract7bitsmaskless(4, (val)) | (1 << 7));
154-
} else if (val >= 0 && val < (1 << 42)) {
154+
} else if (val >= 0 && val < (1L << 42)) {
155155
out[outpostmp++] = (byte) extract7bits(0, val);
156156
out[outpostmp++] = (byte) extract7bits(1, val);
157157
out[outpostmp++] = (byte) extract7bits(2, val);
158158
out[outpostmp++] = (byte) extract7bits(3, val);
159159
out[outpostmp++] = (byte) extract7bits(4, val);
160160
out[outpostmp++] = (byte) (extract7bitsmaskless(5, (val)) | (1 << 7));
161-
} else if (val >= 0 && val < (1 << 49)) {
161+
} else if (val >= 0 && val < (1L << 49)) {
162162
out[outpostmp++] = (byte) extract7bits(0, val);
163163
out[outpostmp++] = (byte) extract7bits(1, val);
164164
out[outpostmp++] = (byte) extract7bits(2, val);
165165
out[outpostmp++] = (byte) extract7bits(3, val);
166166
out[outpostmp++] = (byte) extract7bits(4, val);
167167
out[outpostmp++] = (byte) extract7bits(5, val);
168168
out[outpostmp++] = (byte) (extract7bitsmaskless(6, (val)) | (1 << 7));
169-
} else if (val >= 0 && val < (1 << 56)) {
169+
} else if (val >= 0 && val < (1L << 56)) {
170170
out[outpostmp++] = (byte) extract7bits(0, val);
171171
out[outpostmp++] = (byte) extract7bits(1, val);
172172
out[outpostmp++] = (byte) extract7bits(2, val);
@@ -175,7 +175,7 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out,
175175
out[outpostmp++] = (byte) extract7bits(5, val);
176176
out[outpostmp++] = (byte) extract7bits(6, val);
177177
out[outpostmp++] = (byte) (extract7bitsmaskless(7, (val)) | (1 << 7));
178-
} else if (val >= 0 && val < (1 << 63)) {
178+
} else if (val >= 0 && val < (1L << 63)) {
179179
out[outpostmp++] = (byte) extract7bits(0, val);
180180
out[outpostmp++] = (byte) extract7bits(1, val);
181181
out[outpostmp++] = (byte) extract7bits(2, val);

src/test/java/me/lemire/longcompression/TestLongVariableByte.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ private void checkConsistency(LongCODEC codec, long[] array) {
2828
Assert.assertArrayEquals(array, uncompressed);
2929
}
3030

31-
if (codec instanceof SkippableLongCODEC) {
32-
long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array);
33-
long[] uncompressed =
34-
LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length);
31+
if (codec instanceof ByteLongCODEC) {
32+
byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array);
33+
long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length);
3534

3635
Assert.assertArrayEquals(array, uncompressed);
3736
}
3837

39-
if (codec instanceof ByteLongCODEC) {
40-
byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array);
41-
long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length);
38+
if (codec instanceof SkippableLongCODEC) {
39+
long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array);
40+
long[] uncompressed =
41+
LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length);
4242

4343
Assert.assertArrayEquals(array, uncompressed);
4444
}
@@ -77,4 +77,27 @@ public void testCodec_MinValue() {
7777
public void testCodec_ZeroMinValue() {
7878
checkConsistency(codec, new long[] { 0, Long.MIN_VALUE });
7979
}
80+
81+
@Test
82+
public void testCodec_allPowerOfTwo() {
83+
checkConsistency(codec, new long[] { 1L << 42 });
84+
for (int i = 0; i < 64; i++) {
85+
checkConsistency(codec, new long[] { 1L << i });
86+
}
87+
}
88+
89+
@Test
90+
public void testCodec_ZeroThenAllPowerOfTwo() {
91+
for (int i = 0; i < 64; i++) {
92+
checkConsistency(codec, new long[] { 0, 1L << i });
93+
}
94+
}
95+
96+
@Test
97+
public void testCodec_intermediateHighPowerOfTwo() {
98+
Assert.assertEquals(1, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length);
99+
Assert.assertEquals(7, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { 1L << 42 }).length);
100+
Assert.assertEquals(1, LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length);
101+
}
102+
80103
}

0 commit comments

Comments
 (0)