Skip to content

Commit 0b8d466

Browse files
committed
manual new tests for EncodingRegistry
1 parent ba2c74d commit 0b8d466

4 files changed

Lines changed: 83 additions & 34 deletions

File tree

core/src/main/java/io/github/dfa1/vortex/encoding/EncodingId.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ public enum EncodingId {
2626
VORTEX_EXT("vortex.ext"),
2727
VORTEX_VARBINVIEW("vortex.varbinview"),
2828
VORTEX_PCO("vortex.pco"),
29+
VORTEX_DECIMAL("vortex.decimal"),
30+
VORTEX_DECIMAL_BYTE_PARTS("vortex.decimal_byte_parts"),
31+
VORTEX_DATETIMEPARTS("vortex.datetimeparts"),
32+
VORTEX_ZSTD("vortex.zstd"),
33+
VORTEX_FIXED_SIZE_LIST("vortex.fixed_size_list"),
34+
VORTEX_LIST("vortex.list"),
35+
VORTEX_LISTVIEW("vortex.listview"),
36+
VORTEX_ALPRD("vortex.alprd"),
2937

3038
// Layout encoding IDs included so parser/registry can represent them safely
3139
VORTEX_FLAT("vortex.flat"),
@@ -37,15 +45,7 @@ public enum EncodingId {
3745
FASTLANES_FOR("fastlanes.for"),
3846
FASTLANES_DELTA("fastlanes.delta"),
3947
FASTLANES_RLE("fastlanes.rle"),
40-
41-
VORTEX_DECIMAL("vortex.decimal"),
42-
VORTEX_DECIMAL_BYTE_PARTS("vortex.decimal_byte_parts"),
43-
VORTEX_DATETIMEPARTS("vortex.datetimeparts"),
44-
VORTEX_ZSTD("vortex.zstd"),
45-
VORTEX_FIXED_SIZE_LIST("vortex.fixed_size_list"),
46-
VORTEX_LIST("vortex.list"),
47-
VORTEX_LISTVIEW("vortex.listview"),
48-
VORTEX_ALPRD("vortex.alprd");
48+
;
4949

5050
// O(1) access to EncodingId by its string representation
5151
private static final Map<String, EncodingId> LOOKUP = Stream.of(EncodingId.values())

core/src/main/java/io/github/dfa1/vortex/encoding/EncodingRegistry.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ private EncodingRegistry() {
2626
/// Load all [Encoding]s registered via `ServiceLoader`.
2727
public static EncodingRegistry loadAll() {
2828
var registry = new EncodingRegistry();
29-
for (Encoding c : ServiceLoader.load(Encoding.class)) {
30-
registry.register(c);
29+
for (Encoding encoding : ServiceLoader.load(Encoding.class)) {
30+
registry.register(encoding);
3131
}
3232
return registry;
3333
}
@@ -36,6 +36,10 @@ public static EncodingRegistry empty() {
3636
return new EncodingRegistry();
3737
}
3838

39+
public boolean hasEncoding(EncodingId encodingId) {
40+
return encodings.containsKey(encodingId);
41+
}
42+
3943
private static ArrayNode convertArrayNode(
4044
io.github.dfa1.vortex.fbs.ArrayNode fbs,
4145
List<String> encodingSpecs
@@ -60,7 +64,10 @@ private static ArrayNode convertArrayNode(
6064
}
6165

6266
public void register(Encoding encoding) {
63-
encodings.put(encoding.encodingId(), encoding);
67+
Encoding old = encodings.put(encoding.encodingId(), encoding);
68+
if (old != null) {
69+
throw new VortexException("encoding %s already registered".formatted(encoding.encodingId()));
70+
}
6471
}
6572

6673
/// Decode a flat segment from the file's memory-mapped region.
@@ -95,6 +102,7 @@ Array decode(DecodeContext ctx) {
95102
EncodingId id = ctx.node().encodingId();
96103
Encoding c = encodings.get(id);
97104
if (c == null) {
105+
System.out.println(encodings);
98106
throw new VortexException(id, "no encoding registered");
99107
}
100108
return c.decode(ctx);
Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
1-
io.github.dfa1.vortex.encoding.PrimitiveEncoding
2-
io.github.dfa1.vortex.encoding.BoolEncoding
3-
io.github.dfa1.vortex.encoding.DictEncoding
1+
io.github.dfa1.vortex.encoding.AlpEncoding
2+
io.github.dfa1.vortex.encoding.AlpRdEncoding
43
io.github.dfa1.vortex.encoding.BitpackedEncoding
4+
io.github.dfa1.vortex.encoding.BoolEncoding
5+
io.github.dfa1.vortex.encoding.ByteBoolEncoding
6+
io.github.dfa1.vortex.encoding.ChunkedEncoding
7+
io.github.dfa1.vortex.encoding.ConstantEncoding
8+
io.github.dfa1.vortex.encoding.DateTimePartsEncoding
9+
io.github.dfa1.vortex.encoding.DecimalBytePartsEncoding
10+
io.github.dfa1.vortex.encoding.DecimalEncoding
511
io.github.dfa1.vortex.encoding.DeltaEncoding
6-
io.github.dfa1.vortex.encoding.SequenceEncoding
12+
io.github.dfa1.vortex.encoding.DictEncoding
13+
io.github.dfa1.vortex.encoding.ExtEncoding
14+
io.github.dfa1.vortex.encoding.FixedSizeListEncoding
715
io.github.dfa1.vortex.encoding.FrameOfReferenceEncoding
8-
io.github.dfa1.vortex.encoding.SparseEncoding
9-
io.github.dfa1.vortex.encoding.AlpEncoding
10-
io.github.dfa1.vortex.encoding.RunEndEncoding
11-
io.github.dfa1.vortex.encoding.ConstantEncoding
12-
io.github.dfa1.vortex.encoding.VarBinEncoding
1316
io.github.dfa1.vortex.encoding.FsstEncoding
17+
io.github.dfa1.vortex.encoding.ListEncoding
18+
io.github.dfa1.vortex.encoding.ListViewEncoding
19+
io.github.dfa1.vortex.encoding.NullEncoding
1420
io.github.dfa1.vortex.encoding.PcoEncoding
21+
io.github.dfa1.vortex.encoding.PrimitiveEncoding
22+
io.github.dfa1.vortex.encoding.RleEncoding
23+
io.github.dfa1.vortex.encoding.RunEndEncoding
24+
io.github.dfa1.vortex.encoding.SequenceEncoding
25+
io.github.dfa1.vortex.encoding.SparseEncoding
1526
io.github.dfa1.vortex.encoding.StructEncoding
16-
io.github.dfa1.vortex.encoding.NullEncoding
17-
io.github.dfa1.vortex.encoding.ByteBoolEncoding
18-
io.github.dfa1.vortex.encoding.ZigZagEncoding
19-
io.github.dfa1.vortex.encoding.ExtEncoding
27+
io.github.dfa1.vortex.encoding.VarBinEncoding
2028
io.github.dfa1.vortex.encoding.VarBinViewEncoding
21-
io.github.dfa1.vortex.encoding.DecimalEncoding
22-
io.github.dfa1.vortex.encoding.DecimalBytePartsEncoding
23-
io.github.dfa1.vortex.encoding.DateTimePartsEncoding
29+
io.github.dfa1.vortex.encoding.ZigZagEncoding
2430
io.github.dfa1.vortex.encoding.ZstdEncoding
25-
io.github.dfa1.vortex.encoding.ChunkedEncoding
26-
io.github.dfa1.vortex.encoding.FixedSizeListEncoding
27-
io.github.dfa1.vortex.encoding.ListEncoding
28-
io.github.dfa1.vortex.encoding.ListViewEncoding
29-
io.github.dfa1.vortex.encoding.RleEncoding
30-
io.github.dfa1.vortex.encoding.AlpRdEncoding
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.github.dfa1.vortex.encoding;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.assertj.core.api.Assertions.assertThat;
6+
7+
class EncodingRegistryTest {
8+
9+
@Test
10+
void empty() {
11+
// Given
12+
EncodingRegistry sut = EncodingRegistry.empty();
13+
14+
// When
15+
boolean result1 = sut.hasEncoding(EncodingId.VORTEX_DECIMAL);
16+
17+
// Then
18+
assertThat(result1).isFalse();
19+
20+
// When
21+
sut.register(new DecimalEncoding());
22+
boolean result2 = sut.hasEncoding(EncodingId.VORTEX_DECIMAL);
23+
24+
// Then
25+
assertThat(result2).isTrue();
26+
}
27+
28+
@Test
29+
void all() {
30+
// Given
31+
EncodingRegistry sut = EncodingRegistry.loadAll();
32+
33+
// When
34+
for (EncodingId encodingId : EncodingId.values()) {
35+
if (!sut.hasEncoding(encodingId)) {
36+
System.out.println(encodingId);
37+
}
38+
//assertThat(sut.hasEncoding(encodingId)).describedAs("%s".formatted(encodingId)).isTrue();
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)