Skip to content

Commit 33f57b7

Browse files
committed
add ome v0.4 and v0.5 tests
1 parent 67c0970 commit 33f57b7

1 file changed

Lines changed: 205 additions & 0 deletions

File tree

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
package dev.zarr.zarrjava;
2+
3+
import dev.zarr.zarrjava.ome.MultiscaleImage;
4+
import dev.zarr.zarrjava.ome.MultiscalesMetadataImage;
5+
import dev.zarr.zarrjava.ome.UnifiedMultiscaleNode;
6+
import dev.zarr.zarrjava.ome.UnifiedSinglescaleNode;
7+
import dev.zarr.zarrjava.ome.metadata.Axis;
8+
import dev.zarr.zarrjava.ome.metadata.CoordinateTransformation;
9+
import dev.zarr.zarrjava.ome.metadata.MultiscalesEntry;
10+
import dev.zarr.zarrjava.store.FilesystemStore;
11+
import dev.zarr.zarrjava.store.StoreHandle;
12+
import dev.zarr.zarrjava.v3.Array;
13+
import dev.zarr.zarrjava.v3.DataType;
14+
import org.junit.jupiter.api.Test;
15+
16+
import java.util.Arrays;
17+
import java.util.Collections;
18+
import java.util.List;
19+
20+
import static org.junit.jupiter.api.Assertions.*;
21+
22+
public class OmeZarrTest extends ZarrTest {
23+
24+
private StoreHandle storeHandle(java.nio.file.Path path) throws Exception {
25+
return new FilesystemStore(path).resolve();
26+
}
27+
28+
// ── v0.5 read tests ──────────────────────────────────────────────────────
29+
30+
@Test
31+
void readV05_axesAndDatasets() throws Exception {
32+
MultiscaleImage image = MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.5")));
33+
34+
assertInstanceOf(dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.class, image);
35+
36+
UnifiedMultiscaleNode node = image.getMultiscaleNode(0);
37+
assertEquals("test_image", node.name);
38+
assertEquals(5, node.axes.size());
39+
assertEquals(2, node.nodes.size());
40+
41+
List<String> axisNames = Arrays.asList("t", "c", "z", "y", "x");
42+
for (int i = 0; i < axisNames.size(); i++) {
43+
assertEquals(axisNames.get(i), node.axes.get(i).name);
44+
}
45+
46+
List<String> axisTypes = Arrays.asList("time", "channel", "space", "space", "space");
47+
for (int i = 0; i < axisTypes.size(); i++) {
48+
assertEquals(axisTypes.get(i), node.axes.get(i).type);
49+
}
50+
51+
UnifiedSinglescaleNode scaleNode0 = node.nodes.get(0);
52+
assertEquals("0", scaleNode0.path);
53+
assertEquals("scale", scaleNode0.coordinateTransformations.get(0).type);
54+
}
55+
56+
@Test
57+
void readV04_axesAndDatasets() throws Exception {
58+
MultiscaleImage image = MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.4")));
59+
60+
assertInstanceOf(dev.zarr.zarrjava.ome.v0_4.MultiscaleImage.class, image);
61+
62+
UnifiedMultiscaleNode node = image.getMultiscaleNode(0);
63+
assertEquals("test_image", node.name);
64+
assertEquals(5, node.axes.size());
65+
assertEquals(2, node.nodes.size());
66+
67+
List<String> axisNames = Arrays.asList("t", "c", "z", "y", "x");
68+
for (int i = 0; i < axisNames.size(); i++) {
69+
assertEquals(axisNames.get(i), node.axes.get(i).name);
70+
}
71+
72+
List<String> axisTypes = Arrays.asList("time", "channel", "space", "space", "space");
73+
for (int i = 0; i < axisTypes.size(); i++) {
74+
assertEquals(axisTypes.get(i), node.axes.get(i).type);
75+
}
76+
77+
UnifiedSinglescaleNode scaleNode0 = node.nodes.get(0);
78+
assertEquals("0", scaleNode0.path);
79+
assertEquals("scale", scaleNode0.coordinateTransformations.get(0).type);
80+
}
81+
82+
@Test
83+
void readV05_getAxisNames() throws Exception {
84+
MultiscaleImage image = MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.5")));
85+
assertEquals(Arrays.asList("t", "c", "z", "y", "x"), image.getAxisNames());
86+
}
87+
88+
@Test
89+
void readV05_openScaleLevel() throws Exception {
90+
MultiscaleImage image = MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.5")));
91+
92+
dev.zarr.zarrjava.core.Array level0 = image.openScaleLevel(0);
93+
assertArrayEquals(new long[]{1, 2, 8, 16, 16}, level0.metadata().shape);
94+
95+
dev.zarr.zarrjava.core.Array level1 = image.openScaleLevel(1);
96+
assertArrayEquals(new long[]{1, 2, 4, 8, 8}, level1.metadata().shape);
97+
}
98+
99+
@Test
100+
void readV04_openScaleLevel() throws Exception {
101+
MultiscaleImage image = MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.4")));
102+
103+
dev.zarr.zarrjava.core.Array level0 = image.openScaleLevel(0);
104+
assertArrayEquals(new long[]{1, 2, 8, 16, 16}, level0.metadata().shape);
105+
106+
dev.zarr.zarrjava.core.Array level1 = image.openScaleLevel(1);
107+
assertArrayEquals(new long[]{1, 2, 4, 8, 8}, level1.metadata().shape);
108+
}
109+
110+
@Test
111+
void readV05_scaleLevelCount() throws Exception {
112+
MultiscaleImage image = MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.5")));
113+
assertEquals(2, image.getScaleLevelCount());
114+
}
115+
116+
// ── v0.5 write tests ─────────────────────────────────────────────────────
117+
118+
@Test
119+
void writeV05_createAndReopen() throws Exception {
120+
List<Axis> axes = Arrays.asList(
121+
new Axis("z", "space", "micrometer"),
122+
new Axis("y", "space", "micrometer")
123+
);
124+
MultiscalesEntry entry = new MultiscalesEntry(axes, Collections.emptyList());
125+
126+
StoreHandle handle = storeHandle(TESTOUTPUT.resolve("ome_v05_create"));
127+
dev.zarr.zarrjava.ome.v0_5.MultiscaleImage created =
128+
dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.create(handle, entry);
129+
130+
dev.zarr.zarrjava.v3.ArrayMetadata arrayMetadata = Array.metadataBuilder()
131+
.withShape(16, 16)
132+
.withChunkShape(16, 16)
133+
.withDataType(DataType.FLOAT32)
134+
.build();
135+
List<CoordinateTransformation> transforms =
136+
Collections.singletonList(CoordinateTransformation.scale(Arrays.asList(0.5, 0.5)));
137+
created.createScaleLevel("0", arrayMetadata, transforms);
138+
139+
MultiscaleImage reopened = MultiscaleImage.open(handle);
140+
assertInstanceOf(dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.class, reopened);
141+
assertEquals(Arrays.asList("z", "y"), reopened.getAxisNames());
142+
assertEquals(1, reopened.getScaleLevelCount());
143+
assertEquals("0", reopened.getMultiscaleNode(0).nodes.get(0).path);
144+
}
145+
146+
// ── v0.4 write tests ─────────────────────────────────────────────────────
147+
148+
@Test
149+
void writeV04_createAndReopen() throws Exception {
150+
List<Axis> axes = Arrays.asList(
151+
new Axis("z", "space", "micrometer"),
152+
new Axis("y", "space", "micrometer")
153+
);
154+
MultiscalesEntry entry = new MultiscalesEntry(axes, Collections.emptyList());
155+
156+
StoreHandle handle = storeHandle(TESTOUTPUT.resolve("ome_v04_create"));
157+
dev.zarr.zarrjava.ome.v0_4.MultiscaleImage created =
158+
dev.zarr.zarrjava.ome.v0_4.MultiscaleImage.create(handle, entry);
159+
160+
dev.zarr.zarrjava.v2.ArrayMetadata arrayMetadata = new dev.zarr.zarrjava.v2.ArrayMetadata(
161+
2,
162+
new long[]{16, 16},
163+
new int[]{16, 16},
164+
dev.zarr.zarrjava.v2.DataType.FLOAT32,
165+
0,
166+
dev.zarr.zarrjava.v2.Order.C,
167+
null,
168+
null,
169+
null
170+
);
171+
List<CoordinateTransformation> transforms =
172+
Collections.singletonList(CoordinateTransformation.scale(Arrays.asList(0.5, 0.5)));
173+
created.createScaleLevel("0", arrayMetadata, transforms);
174+
175+
MultiscaleImage reopened = MultiscaleImage.open(handle);
176+
assertInstanceOf(dev.zarr.zarrjava.ome.v0_4.MultiscaleImage.class, reopened);
177+
assertEquals(Arrays.asList("z", "y"), reopened.getAxisNames());
178+
assertEquals(1, reopened.getScaleLevelCount());
179+
assertEquals("0", reopened.getMultiscaleNode(0).nodes.get(0).path);
180+
}
181+
182+
// ── typed metadata tests ─────────────────────────────────────────────────
183+
184+
@Test
185+
void readV05_typedMetadata() throws Exception {
186+
MultiscalesMetadataImage<?> image =
187+
(MultiscalesMetadataImage<?>) MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.5")));
188+
189+
MultiscalesEntry entry = image.getMultiscalesEntry(0);
190+
assertEquals("test_image", entry.name);
191+
assertNull(entry.version);
192+
193+
List<Double> expectedScale = Arrays.asList(1.0, 1.0, 0.5, 0.5, 0.5);
194+
assertEquals(expectedScale, entry.datasets.get(0).coordinateTransformations.get(0).scale);
195+
}
196+
197+
@Test
198+
void readV04_entryHasVersion() throws Exception {
199+
MultiscalesMetadataImage<?> image =
200+
(MultiscalesMetadataImage<?>) MultiscaleImage.open(storeHandle(TESTDATA.resolve("ome/v0.4")));
201+
202+
MultiscalesEntry entry = image.getMultiscalesEntry(0);
203+
assertEquals("0.4", entry.version);
204+
}
205+
}

0 commit comments

Comments
 (0)