Skip to content

Commit 709d191

Browse files
authored
Merge pull request ta4j#1127 from gretard/fix/num-serialization
Update Num interface to implement Serializable
2 parents a361c9b + 4dd439a commit 709d191

File tree

6 files changed

+39
-1
lines changed

6 files changed

+39
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Changelog for `ta4j`, roughly following [keepachangelog.com](http://keepachangel
4747
- **PreviousValueIndicator** returns `NaN` if the (n-th) previous value of an indicator does not exist, i.e. if the (n-th) previous is below the first available index.
4848
- **EnterAndHoldReturnCriterion** fixes exception thrown when bar series was empty
4949
- **BaseBarSeries** fixed `UnsupportedOperationException` when creating a bar series that is based on an unmodifiable collection
50+
- **Num** implements Serializable
5051

5152
### Changed
5253
- **BarSeriesManager** consider finishIndex when running backtest

ta4j-core/src/main/java/org/ta4j/core/num/DecimalNum.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
*/
5050
public final class DecimalNum implements Num {
5151

52+
private static final long serialVersionUID = 1L;
53+
5254
private static final int DEFAULT_PRECISION = 32;
5355
private static final Logger log = LoggerFactory.getLogger(DecimalNum.class);
5456

ta4j-core/src/main/java/org/ta4j/core/num/DoubleNum.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
*/
3636
public class DoubleNum implements Num {
3737

38+
private static final long serialVersionUID = 1L;
39+
3840
public static final DoubleNum ZERO = DoubleNum.valueOf(0);
3941
private static final DoubleNum ONE = DoubleNum.valueOf(1);
4042
private static final DoubleNum HUNDRED = DoubleNum.valueOf(100);

ta4j-core/src/main/java/org/ta4j/core/num/NaN.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
*/
4646
public class NaN implements Num {
4747

48+
private static final long serialVersionUID = 1L;
49+
4850
/** A static Not-a-Number instance. */
4951
public static final Num NaN = new NaN();
5052

ta4j-core/src/main/java/org/ta4j/core/num/Num.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
*/
2424
package org.ta4j.core.num;
2525

26+
import java.io.Serializable;
2627
import java.math.BigDecimal;
2728
import java.math.MathContext;
2829
import java.math.RoundingMode;
@@ -37,7 +38,7 @@
3738
* @see DoubleNum
3839
* @see DecimalNum
3940
*/
40-
public interface Num extends Comparable<Num> {
41+
public interface Num extends Comparable<Num>, Serializable {
4142

4243
/**
4344
* @return the Num of 0

ta4j-core/src/test/java/org/ta4j/core/num/NumTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,18 @@
2525

2626
import static junit.framework.TestCase.assertEquals;
2727
import static junit.framework.TestCase.assertFalse;
28+
import static org.junit.Assert.assertNotSame;
2829
import static org.junit.Assert.assertTrue;
2930
import static org.ta4j.core.TestUtils.assertNumEquals;
3031
import static org.ta4j.core.TestUtils.assertNumNotEquals;
3132
import static org.ta4j.core.num.NaN.NaN;
3233

34+
import java.io.ByteArrayInputStream;
35+
import java.io.ByteArrayOutputStream;
3336
import java.io.IOException;
3437
import java.io.InputStream;
38+
import java.io.ObjectInputStream;
39+
import java.io.ObjectOutputStream;
3540
import java.math.BigDecimal;
3641
import java.math.MathContext;
3742
import java.math.RoundingMode;
@@ -346,4 +351,29 @@ public void sqrtOddExponent() {
346351
assertNumEquals("547722.55750516611345696978280080", sqrt);
347352
}
348353

354+
@Test
355+
public void testSerialization() throws Exception {
356+
Num numVal = numFunction.apply(1.3);
357+
serializeDeserialize(numVal);
358+
}
359+
360+
private static void serializeDeserialize(Num o) throws IOException, ClassNotFoundException {
361+
byte[] array;
362+
try (var baos = new ByteArrayOutputStream()) {
363+
try (var out = new ObjectOutputStream(baos)) {
364+
out.writeObject(o);
365+
array = baos.toByteArray();
366+
}
367+
368+
}
369+
try (var baos = new ByteArrayInputStream(array)) {
370+
try (var out = new ObjectInputStream(baos)) {
371+
var deserialized = (Num) out.readObject();
372+
assertNotSame(o, deserialized);
373+
assertEquals(deserialized.doubleValue(), o.doubleValue());
374+
}
375+
376+
}
377+
}
378+
349379
}

0 commit comments

Comments
 (0)