@@ -27,32 +27,32 @@ func TestChunk(t *testing.T) {
27
27
)
28
28
defer os .Remove (fn )
29
29
30
- dclp , err := NewPropList (P_DATASET_CREATE )
30
+ dcpl , err := NewPropList (P_DATASET_CREATE )
31
31
if err != nil {
32
32
t .Fatal (err )
33
33
}
34
- defer dclp .Close ()
35
- err = dclp .SetChunk (cdims )
34
+ defer dcpl .Close ()
35
+ err = dcpl .SetChunk (cdims )
36
36
if err != nil {
37
37
t .Fatal (err )
38
38
}
39
39
40
- cdims_ , err := dclp .GetChunk (len (cdims ))
40
+ cdimsChunk , err := dcpl .GetChunk (len (cdims ))
41
41
if err != nil {
42
42
t .Fatal (err )
43
43
}
44
- for i , cdim := range cdims_ {
44
+ for i , cdim := range cdimsChunk {
45
45
if cdim != cdims [i ] {
46
46
t .Fatalf ("chunked dimensions mismatch: %d != %d" , cdims [i ], cdim )
47
47
}
48
48
}
49
49
50
- data0 , err := save (fn , dsn , dims , dclp )
50
+ data0 , err := save (fn , dsn , dims , dcpl )
51
51
if err != nil {
52
52
t .Fatal (err )
53
53
}
54
54
55
- data1 , err := load (fn , dsn )
55
+ data1 , err := load (fn , dsn , nil )
56
56
if err != nil {
57
57
t .Fatal (err )
58
58
}
@@ -73,26 +73,26 @@ func TestDeflate(t *testing.T) {
73
73
)
74
74
defer os .Remove (fn )
75
75
76
- dclp , err := NewPropList (P_DATASET_CREATE )
76
+ dcpl , err := NewPropList (P_DATASET_CREATE )
77
77
if err != nil {
78
78
t .Fatal (err )
79
79
}
80
- defer dclp .Close ()
81
- err = dclp .SetChunk (cdims )
80
+ defer dcpl .Close ()
81
+ err = dcpl .SetChunk (cdims )
82
82
if err != nil {
83
83
t .Fatal (err )
84
84
}
85
- err = dclp .SetDeflate (DefaultCompression )
85
+ err = dcpl .SetDeflate (DefaultCompression )
86
86
if err != nil {
87
87
t .Fatal (err )
88
88
}
89
89
90
- data0 , err := save (fn , dsn , dims , dclp )
90
+ data0 , err := save (fn , dsn , dims , dcpl )
91
91
if err != nil {
92
92
t .Fatal (err )
93
93
}
94
94
95
- data1 , err := load (fn , dsn )
95
+ data1 , err := load (fn , dsn , nil )
96
96
if err != nil {
97
97
t .Fatal (err )
98
98
}
@@ -102,7 +102,78 @@ func TestDeflate(t *testing.T) {
102
102
}
103
103
}
104
104
105
- func save (fn , dsn string , dims []uint , dclp * PropList ) ([]float64 , error ) {
105
+ func TestChunkCache (t * testing.T ) {
106
+ DisplayErrors (true )
107
+ defer DisplayErrors (false )
108
+ var (
109
+ fn = "test_chunk_cache.h5"
110
+ dsn = "dset_chunk_cache"
111
+ dims = []uint {1000 , 1000 }
112
+ cdims = []uint {100 , 100 }
113
+ )
114
+ defer os .Remove (fn )
115
+
116
+ dcpl , err := NewPropList (P_DATASET_CREATE )
117
+ if err != nil {
118
+ t .Fatal (err )
119
+ }
120
+ defer dcpl .Close ()
121
+ err = dcpl .SetChunk (cdims )
122
+ if err != nil {
123
+ t .Fatal (err )
124
+ }
125
+
126
+ cdimsChunk , err := dcpl .GetChunk (len (cdims ))
127
+ if err != nil {
128
+ t .Fatal (err )
129
+ }
130
+ for i , cdim := range cdimsChunk {
131
+ if cdim != cdims [i ] {
132
+ t .Fatalf ("chunked dimensions mismatch: %d != %d" , cdims [i ], cdim )
133
+ }
134
+ }
135
+
136
+ data0 , err := save (fn , dsn , dims , dcpl )
137
+ if err != nil {
138
+ t .Fatal (err )
139
+ }
140
+
141
+ dapl , err := NewPropList (P_DATASET_ACCESS )
142
+ if err != nil {
143
+ t .Fatal (err )
144
+ }
145
+ defer dapl .Close ()
146
+
147
+ nslots , nbytes , w0 , err := dapl .GetChunkCache ()
148
+ if err != nil {
149
+ t .Fatal (err )
150
+ }
151
+
152
+ nslotsNew , nbytesNew , w0New := nslots * 4 , nbytes * 2 , w0 / 3
153
+ if err := dapl .SetChunkCache (nslotsNew , nbytesNew , w0New ); err != nil {
154
+ t .Fatal (err )
155
+ }
156
+ if err := checkChunkCache (nslotsNew , nbytesNew , w0New , dapl ); err != nil {
157
+ t .Fatal (err )
158
+ }
159
+
160
+ data1 , err := load (fn , dsn , dapl )
161
+ if err != nil {
162
+ t .Fatal (err )
163
+ }
164
+ if err := compare (data0 , data1 ); err != nil {
165
+ t .Fatal (err )
166
+ }
167
+
168
+ if err := dapl .SetChunkCache (D_CHUNK_CACHE_NSLOTS_DEFAULT , D_CHUNK_CACHE_NBYTES_DEFAULT , D_CHUNK_CACHE_W0_DEFAULT ); err != nil {
169
+ t .Fatal (err )
170
+ }
171
+ if err := checkChunkCache (nslots , nbytes , w0 , dapl ); err != nil {
172
+ t .Fatal (err )
173
+ }
174
+ }
175
+
176
+ func save (fn , dsn string , dims []uint , dcpl * PropList ) ([]float64 , error ) {
106
177
f , err := CreateFile (fn , F_ACC_TRUNC )
107
178
if err != nil {
108
179
return nil , err
@@ -114,7 +185,7 @@ func save(fn, dsn string, dims []uint, dclp *PropList) ([]float64, error) {
114
185
return nil , err
115
186
}
116
187
117
- dset , err := f .CreateDatasetWith (dsn , T_NATIVE_DOUBLE , dspace , dclp )
188
+ dset , err := f .CreateDatasetWith (dsn , T_NATIVE_DOUBLE , dspace , dcpl )
118
189
if err != nil {
119
190
return nil , err
120
191
}
@@ -132,14 +203,19 @@ func save(fn, dsn string, dims []uint, dclp *PropList) ([]float64, error) {
132
203
return data , nil
133
204
}
134
205
135
- func load (fn , dsn string ) ([]float64 , error ) {
206
+ func load (fn , dsn string , dapl * PropList ) ([]float64 , error ) {
136
207
f , err := OpenFile (fn , F_ACC_RDONLY )
137
208
if err != nil {
138
209
return nil , err
139
210
}
140
211
defer f .Close ()
141
212
142
- dset , _ := f .OpenDataset (dsn )
213
+ var dset * Dataset
214
+ if dapl == nil {
215
+ dset , err = f .OpenDataset (dsn )
216
+ } else {
217
+ dset , err = f .OpenDatasetWith (dsn , dapl )
218
+ }
143
219
if err != nil {
144
220
return nil , err
145
221
}
@@ -168,3 +244,21 @@ func compare(ds0, ds1 []float64) error {
168
244
}
169
245
return nil
170
246
}
247
+
248
+ func checkChunkCache (nslots , nbytes int , w0 float64 , dapl * PropList ) error {
249
+ nslotsCache , nbytesCache , w0Cache , err := dapl .GetChunkCache ()
250
+ if err != nil {
251
+ return err
252
+ }
253
+
254
+ if nslotsCache != nslots {
255
+ return fmt .Errorf ("`nslots` mismatch: %d != %d" , nslots , nslotsCache )
256
+ }
257
+ if nbytesCache != nbytes {
258
+ return fmt .Errorf ("`nbytes` mismatch: %d != %d" , nbytes , nbytesCache )
259
+ }
260
+ if math .Abs (w0Cache - w0 ) > 1e-5 {
261
+ return fmt .Errorf ("`w0` mismatch: %.6f != %.6f" , w0 , w0Cache )
262
+ }
263
+ return nil
264
+ }
0 commit comments