Skip to content

Commit 80ba4ca

Browse files
committed
ref PULSEDEV-36792 openml-lightgbm: Fix tests with unreleased resources
1 parent 3e40ef2 commit 80ba4ca

File tree

3 files changed

+106
-61
lines changed

3 files changed

+106
-61
lines changed

openml-lightgbm/lightgbm-provider/src/test/java/com/feedzai/openml/provider/lightgbm/SWIGChunkedArrayAPITest.java

Lines changed: 86 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,27 @@ public void doubleChunkedArrayValuesOK() {
6464
final int max_i = 10;
6565
final long chunk_size = 3;
6666
final doubleChunkedArray chunkedArray = new doubleChunkedArray(chunk_size);
67+
try {
68+
for (int i = 1; i <= max_i; ++i) {
69+
chunkedArray.add(i * 1.1);
70+
}
6771

68-
for (int i = 1; i <= max_i; ++i) {
69-
chunkedArray.add(i * 1.1);
70-
}
71-
72-
int chunk = 0;
73-
int pos = 0;
74-
for (int i = 0; i < max_i; ++i) {
75-
final double ref_value = (i+1) * 1.1;
76-
assertThat(chunkedArray.getitem(chunk, pos, -1))
77-
.as("Value at chunk %d, position %d", chunk, pos)
78-
.isCloseTo(ref_value, Offset.offset(1e-3));
79-
80-
++pos;
81-
if (pos == chunk_size) {
82-
++chunk;
83-
pos = 0;
72+
int chunk = 0;
73+
int pos = 0;
74+
for (int i = 0; i < max_i; ++i) {
75+
final double ref_value = (i + 1) * 1.1;
76+
assertThat(chunkedArray.getitem(chunk, pos, -1))
77+
.as("Value at chunk %d, position %d", chunk, pos)
78+
.isCloseTo(ref_value, Offset.offset(1e-3));
79+
80+
++pos;
81+
if (pos == chunk_size) {
82+
++chunk;
83+
pos = 0;
84+
}
8485
}
86+
} finally {
87+
chunkedArray.delete();
8588
}
8689
}
8790

@@ -94,14 +97,18 @@ public void doubleChunkedArrayOutOfBoundsError() {
9497
final double on_fail_sentinel_value = -1;
9598
final doubleChunkedArray chunkedArray = new doubleChunkedArray(3);
9699

97-
// Test out of bounds chunk (only 1 exists, not 11):
98-
assertThat(chunkedArray.getitem(10, 0, on_fail_sentinel_value))
99-
.as("out-of-bounds return sentinel value")
100-
.isCloseTo(on_fail_sentinel_value, Offset.offset(1e-3));
101-
// Test out of bounds on first chunk:
102-
assertThat(chunkedArray.getitem(0, 10, on_fail_sentinel_value))
103-
.as("out-of-bounds return sentinel value")
104-
.isCloseTo(on_fail_sentinel_value, Offset.offset(1e-3));
100+
try {
101+
// Test out of bounds chunk (only 1 exists, not 11):
102+
assertThat(chunkedArray.getitem(10, 0, on_fail_sentinel_value))
103+
.as("out-of-bounds return sentinel value")
104+
.isCloseTo(on_fail_sentinel_value, Offset.offset(1e-3));
105+
// Test out of bounds on first chunk:
106+
assertThat(chunkedArray.getitem(0, 10, on_fail_sentinel_value))
107+
.as("out-of-bounds return sentinel value")
108+
.isCloseTo(on_fail_sentinel_value, Offset.offset(1e-3));
109+
} finally {
110+
chunkedArray.delete();
111+
}
105112
}
106113

107114
/**
@@ -112,19 +119,27 @@ public void doubleChunkedArrayOutOfBoundsError() {
112119
@Test
113120
public void ChunkedArrayCoalesceTo() {
114121
final int numFeatures = 3;
115-
final int chunkSize = 2*numFeatures; // Must be multiple
122+
final int chunkSize = 2 * numFeatures; // Must be multiple
116123
final doubleChunkedArray chunkedArray = new doubleChunkedArray(chunkSize);
117-
// Fill 1 chunk + some part of other
118-
for (int i = 0; i < chunkSize + 1; ++i) {
119-
chunkedArray.add(i);
120-
}
121-
final SWIGTYPE_p_double swigArr = lightgbmlib.new_doubleArray(chunkedArray.get_add_count());
124+
try {
125+
// Fill 1 chunk + some part of other
126+
for (int i = 0; i < chunkSize + 1; ++i) {
127+
chunkedArray.add(i);
128+
}
129+
final SWIGTYPE_p_double swigArr = lightgbmlib.new_doubleArray(chunkedArray.get_add_count());
130+
try {
122131

123-
chunkedArray.coalesce_to(swigArr);
132+
chunkedArray.coalesce_to(swigArr);
124133

125-
for (int i = 0; i < chunkedArray.get_add_count(); ++i) {
126-
double v = lightgbmlib.doubleArray_getitem(swigArr, i);
127-
assertThat(v).as("coalescedArray[%d]", i).isCloseTo(i, Offset.offset(1e-3));
134+
for (int i = 0; i < chunkedArray.get_add_count(); ++i) {
135+
double v = lightgbmlib.doubleArray_getitem(swigArr, i);
136+
assertThat(v).as("coalescedArray[%d]", i).isCloseTo(i, Offset.offset(1e-3));
137+
}
138+
} finally {
139+
lightgbmlib.delete_doubleArray(swigArr);
140+
}
141+
} finally {
142+
chunkedArray.delete();
128143
}
129144
}
130145

@@ -135,35 +150,46 @@ public void ChunkedArrayCoalesceTo() {
135150
@Test
136151
public void LGBM_DatasetCreateFromMatsFromChunkedArray() {
137152
final int numFeatures = 3;
138-
final int chunkSize = 2*numFeatures; // Must be multiple
153+
final int chunkSize = 2 * numFeatures; // Must be multiple
139154
final doubleChunkedArray chunkedArray = new doubleChunkedArray(chunkSize);
140-
// Fill 1 chunk + some part of other
141-
for (int i = 0; i < chunkSize + 1; ++i) {
142-
chunkedArray.add(i);
143-
}
155+
try {
156+
// Fill 1 chunk + some part of other
157+
for (int i = 0; i < chunkSize + 1; ++i) {
158+
chunkedArray.add(i);
159+
}
144160

145-
final long numChunks = chunkedArray.get_chunks_count();
146-
SWIGTYPE_p_int chunkSizes = lightgbmlib.new_intArray(numChunks);
147-
for (int i = 0; i < numChunks - 1; ++i) {
148-
lightgbmlib.intArray_setitem(chunkSizes, i, chunkSize);
161+
final long numChunks = chunkedArray.get_chunks_count();
162+
final SWIGTYPE_p_int chunkSizes = lightgbmlib.new_intArray(numChunks);
163+
try {
164+
for (int i = 0; i < numChunks - 1; ++i) {
165+
lightgbmlib.intArray_setitem(chunkSizes, i, chunkSize);
166+
}
167+
lightgbmlib.intArray_setitem(chunkSizes, numChunks - 1, (int) chunkedArray.get_current_chunk_added_count());
168+
169+
final SWIGTYPE_p_p_void swigOutDatasetHandlePtr = lightgbmlib.voidpp_handle();
170+
try {
171+
final int returnCodeLGBM = lightgbmlib.LGBM_DatasetCreateFromMats(
172+
(int) chunkedArray.get_chunks_count(),
173+
chunkedArray.data_as_void(),
174+
lightgbmlibConstants.C_API_DTYPE_FLOAT64,
175+
chunkSizes,
176+
numFeatures,
177+
1,
178+
"", // parameters
179+
null,
180+
swigOutDatasetHandlePtr
181+
);
182+
183+
assertThat(returnCodeLGBM).as("LightGBM return code").isEqualTo(0);
184+
} finally {
185+
lightgbmlib.delete_voidpp(swigOutDatasetHandlePtr);
186+
}
187+
} finally {
188+
lightgbmlib.delete_intArray(chunkSizes);
189+
}
190+
} finally {
191+
chunkedArray.delete();
149192
}
150-
lightgbmlib.intArray_setitem(chunkSizes, numChunks-1, (int)chunkedArray.get_current_chunk_added_count());
151-
152-
final SWIGTYPE_p_p_void swigOutDatasetHandlePtr = lightgbmlib.voidpp_handle();;
153-
154-
final int returnCodeLGBM = lightgbmlib.LGBM_DatasetCreateFromMats(
155-
(int)chunkedArray.get_chunks_count(),
156-
chunkedArray.data_as_void(),
157-
lightgbmlibConstants.C_API_DTYPE_FLOAT64,
158-
chunkSizes,
159-
numFeatures,
160-
1,
161-
"", // parameters
162-
null,
163-
swigOutDatasetHandlePtr
164-
);
165-
166-
assertThat(returnCodeLGBM).as("LightGBM return code").isEqualTo(0);
167193
}
168194

169195
}

openml-lightgbm/lightgbm-provider/src/test/java/com/feedzai/openml/provider/lightgbm/SWIGResourcesTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.feedzai.openml.provider.lightgbm;
1919

2020
import com.feedzai.openml.provider.exception.ModelLoadingException;
21+
import org.junit.AfterClass;
2122
import org.junit.BeforeClass;
2223
import org.junit.Test;
2324

@@ -60,6 +61,15 @@ public static void setupFixture() throws ModelLoadingException, URISyntaxExcepti
6061
defaultSwig = new SWIGResources(modelPath.toString(), "");
6162
}
6263

64+
/**
65+
* Release/close resources
66+
*/
67+
@AfterClass
68+
public static void afterClass() {
69+
defaultSwig.close();
70+
}
71+
72+
6373
/**
6474
* Test SWIGResources() - all public members should be initialized.
6575
*/
@@ -91,7 +101,7 @@ public void constructorThrowsModelLoadingExceptionOnInvalidModelPath() {
91101
public void closeResetsAllPublicMembers() throws ModelLoadingException {
92102

93103
// Generate a new SWIGResources instance as it will be modified:
94-
SWIGResources swig = new SWIGResources(modelPath.toString(), "");
104+
final SWIGResources swig = new SWIGResources(modelPath.toString(), "");
95105
swig.close();
96106

97107
assertThat(swig.swigBoosterHandle).as("swigBoosterHandle").isNull();

openml-lightgbm/lightgbm-provider/src/test/java/com/feedzai/openml/provider/lightgbm/SWIGTrainDataTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.feedzai.openml.provider.lightgbm;
22

3+
import org.junit.After;
34
import org.junit.Before;
45
import org.junit.BeforeClass;
56
import org.junit.Test;
@@ -42,6 +43,14 @@ public void setupTest() {
4243
swigTrainData = new SWIGTrainData((int) NUM_FEATURES, NUM_INSTANCES_PER_CHUNK);
4344
}
4445

46+
/**
47+
* Release/close resources.
48+
*/
49+
@After
50+
public void tearDown() {
51+
swigTrainData.close();
52+
}
53+
4554
/**
4655
* Assert the features ChunkedArray has the proper size.
4756
*/

0 commit comments

Comments
 (0)