Skip to content

Commit d170732

Browse files
committed
vtype: adding equals/hashCode for VNumber
1 parent 273c471 commit d170732

12 files changed

Lines changed: 396 additions & 285 deletions

File tree

epics-vtype/vtype/src/main/java/org/epics/vtype/VNumber.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package org.epics.vtype;
66

7+
import java.util.Objects;
78
import org.epics.util.number.UByte;
89
import org.epics.util.number.UInteger;
910
import org.epics.util.number.ULong;
@@ -80,5 +81,34 @@ public static VNumber of(Number value, Alarm alarm, Time time, Display display){
8081
}
8182
throw new IllegalArgumentException("Only standard Java implementations of Number and EPICS unsigned numbers are supported");
8283
}
84+
85+
@Override
86+
public final boolean equals(Object obj) {
87+
if (this == obj) {
88+
return true;
89+
}
90+
91+
if (obj instanceof VNumber) {
92+
VNumber other = (VNumber) obj;
93+
94+
return getClass().equals(other.getClass()) &&
95+
getValue().equals(other.getValue()) &&
96+
getAlarm().equals(other.getAlarm()) &&
97+
getTime().equals(other.getTime()) &&
98+
getDisplay().equals(other.getDisplay());
99+
}
100+
101+
return false;
102+
}
103+
104+
@Override
105+
public final int hashCode() {
106+
int hash = 7;
107+
hash = 23 * hash + Objects.hashCode(getValue());
108+
hash = 23 * hash + Objects.hashCode(getAlarm());
109+
hash = 23 * hash + Objects.hashCode(getTime());
110+
hash = 23 * hash + Objects.hashCode(getDisplay());
111+
return hash;
112+
}
83113

84114
}

epics-vtype/vtype/src/test/java/org/epics/vtype/FeatureTestVNumber.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
*/
55
package org.epics.vtype;
66

7+
import java.text.DecimalFormat;
78
import java.time.Instant;
9+
import org.epics.util.stats.Range;
810
import org.junit.Test;
911
import static org.junit.Assert.*;
1012
import static org.hamcrest.Matchers.*;
@@ -19,6 +21,8 @@ public abstract class FeatureTestVNumber<N extends Number, V extends VNumber> {
1921

2022
abstract N getValue();
2123

24+
abstract N getAnotherValue();
25+
2226
abstract V of(N value, Alarm alarm, Time time, Display display);
2327

2428
abstract String getToString();
@@ -64,4 +68,31 @@ public void of5() {
6468
of(getValue(), Alarm.none(), Time.now(), null);
6569
}
6670

71+
@Test
72+
public void equals1() {
73+
Alarm alarm = Alarm.of(AlarmSeverity.MINOR, AlarmStatus.DB, "LOW");
74+
Time time = Time.of(Instant.ofEpochSecond(1354719441, 521786982));
75+
Time now = Time.now();
76+
assertThat(of(getValue(), alarm, time, Display.none()), equalTo(of(getValue(), alarm, time, Display.none())));
77+
assertThat(of(getAnotherValue(), Alarm.none(), now, Display.none()), equalTo(of(getAnotherValue(), Alarm.none(), now, Display.none())));
78+
assertThat(of(getValue(), alarm, time, Display.none()), not(equalTo(null)));
79+
assertThat(of(getValue(), alarm, time, Display.none()), not(equalTo(of(getAnotherValue(), alarm, time, Display.none()))));
80+
assertThat(of(getValue(), alarm, time, Display.none()), not(equalTo(of(getValue(), Alarm.none(), time, Display.none()))));
81+
assertThat(of(getValue(), alarm, time, Display.none()), not(equalTo(of(getValue(), alarm, now, Display.none()))));
82+
assertThat(of(getValue(), alarm, time, Display.none()), not(equalTo(of(getValue(), alarm, time, Display.of(Range.undefined(), Range.undefined(), Range.undefined(), Range.undefined(), "meters", new DecimalFormat())))));
83+
}
84+
85+
@Test
86+
public void hashCode1() {
87+
Alarm alarm = Alarm.of(AlarmSeverity.MINOR, AlarmStatus.DB, "LOW");
88+
Time time = Time.of(Instant.ofEpochSecond(1354719441, 521786982));
89+
Time now = Time.now();
90+
assertThat(of(getValue(), alarm, time, Display.none()).hashCode(), equalTo(of(getValue(), alarm, time, Display.none()).hashCode()));
91+
assertThat(of(getAnotherValue(), Alarm.none(), now, Display.none()).hashCode(), equalTo(of(getAnotherValue(), Alarm.none(), now, Display.none()).hashCode()));
92+
assertThat(of(getValue(), alarm, time, Display.none()).hashCode(), not(equalTo(of(getAnotherValue(), alarm, time, Display.none()).hashCode())));
93+
assertThat(of(getValue(), alarm, time, Display.none()).hashCode(), not(equalTo(of(getValue(), Alarm.none(), time, Display.none()).hashCode())));
94+
assertThat(of(getValue(), alarm, time, Display.none()).hashCode(), not(equalTo(of(getValue(), alarm, now, Display.none()).hashCode())));
95+
assertThat(of(getValue(), alarm, time, Display.none()).hashCode(), not(equalTo(of(getValue(), alarm, time, Display.of(Range.undefined(), Range.undefined(), Range.undefined(), Range.undefined(), "meters", new DecimalFormat())).hashCode())));
96+
}
97+
6798
}
Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
1-
/**
2-
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3-
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4-
*/
5-
package org.epics.vtype;
6-
7-
/**
8-
*
9-
* @author carcassi
10-
*/
11-
public class VByteTest extends FeatureTestVNumber<Byte, VByte> {
12-
13-
@Override
14-
Byte getValue() {
15-
return 1;
16-
}
17-
18-
@Override
19-
VByte of(Byte value, Alarm alarm, Time time, Display display) {
20-
return VByte.of(value, alarm, time, display);
21-
}
22-
23-
@Override
24-
String getToString() {
25-
return "VByte[1, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
26-
}
27-
28-
}
1+
/**
2+
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3+
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4+
*/
5+
package org.epics.vtype;
6+
7+
/**
8+
*
9+
* @author carcassi
10+
*/
11+
public class VByteTest extends FeatureTestVNumber<Byte, VByte> {
12+
13+
@Override
14+
Byte getValue() {
15+
return 1;
16+
}
17+
18+
@Override
19+
Byte getAnotherValue() {
20+
return 0;
21+
}
22+
23+
@Override
24+
VByte of(Byte value, Alarm alarm, Time time, Display display) {
25+
return VByte.of(value, alarm, time, display);
26+
}
27+
28+
@Override
29+
String getToString() {
30+
return "VByte[1, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
31+
}
32+
33+
}
Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
1-
/**
2-
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3-
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4-
*/
5-
package org.epics.vtype;
6-
7-
/**
8-
*
9-
* @author carcassi
10-
*/
11-
public class VDoubleTest extends FeatureTestVNumber<Double, VDouble> {
12-
13-
@Override
14-
Double getValue() {
15-
return 1.0;
16-
}
17-
18-
@Override
19-
VDouble of(Double value, Alarm alarm, Time time, Display display) {
20-
return VDouble.of(value, alarm, time, display);
21-
}
22-
23-
@Override
24-
String getToString() {
25-
return "VDouble[1.0, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
26-
}
27-
28-
}
1+
/**
2+
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3+
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4+
*/
5+
package org.epics.vtype;
6+
7+
/**
8+
*
9+
* @author carcassi
10+
*/
11+
public class VDoubleTest extends FeatureTestVNumber<Double, VDouble> {
12+
13+
@Override
14+
Double getValue() {
15+
return 1.0;
16+
}
17+
18+
@Override
19+
Double getAnotherValue() {
20+
return 0.0;
21+
}
22+
23+
@Override
24+
VDouble of(Double value, Alarm alarm, Time time, Display display) {
25+
return VDouble.of(value, alarm, time, display);
26+
}
27+
28+
@Override
29+
String getToString() {
30+
return "VDouble[1.0, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
31+
}
32+
33+
}
Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
1-
/**
2-
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3-
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4-
*/
5-
package org.epics.vtype;
6-
7-
/**
8-
*
9-
* @author carcassi
10-
*/
11-
public class VFloatTest extends FeatureTestVNumber<Float, VFloat> {
12-
13-
@Override
14-
Float getValue() {
15-
return 1.0f;
16-
}
17-
18-
@Override
19-
VFloat of(Float value, Alarm alarm, Time time, Display display) {
20-
return VFloat.of(value, alarm, time, display);
21-
}
22-
23-
@Override
24-
String getToString() {
25-
return "VFloat[1.0, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
26-
}
27-
1+
/**
2+
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3+
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4+
*/
5+
package org.epics.vtype;
6+
7+
/**
8+
*
9+
* @author carcassi
10+
*/
11+
public class VFloatTest extends FeatureTestVNumber<Float, VFloat> {
12+
13+
@Override
14+
Float getValue() {
15+
return 1.0f;
16+
}
17+
18+
@Override
19+
Float getAnotherValue() {
20+
return 0.0f;
21+
}
22+
23+
@Override
24+
VFloat of(Float value, Alarm alarm, Time time, Display display) {
25+
return VFloat.of(value, alarm, time, display);
26+
}
27+
28+
@Override
29+
String getToString() {
30+
return "VFloat[1.0, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
31+
}
32+
2833
}
Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
1-
/**
2-
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3-
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4-
*/
5-
package org.epics.vtype;
6-
7-
/**
8-
*
9-
* @author carcassi
10-
*/
11-
public class VIntTest extends FeatureTestVNumber<Integer, VInt> {
12-
13-
@Override
14-
Integer getValue() {
15-
return 1;
16-
}
17-
18-
@Override
19-
VInt of(Integer value, Alarm alarm, Time time, Display display) {
20-
return VInt.of(value, alarm, time, display);
21-
}
22-
23-
@Override
24-
String getToString() {
25-
return "VInt[1, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
26-
}
27-
1+
/**
2+
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
3+
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
4+
*/
5+
package org.epics.vtype;
6+
7+
/**
8+
*
9+
* @author carcassi
10+
*/
11+
public class VIntTest extends FeatureTestVNumber<Integer, VInt> {
12+
13+
@Override
14+
Integer getValue() {
15+
return 1;
16+
}
17+
18+
@Override
19+
Integer getAnotherValue() {
20+
return 0;
21+
}
22+
23+
@Override
24+
VInt of(Integer value, Alarm alarm, Time time, Display display) {
25+
return VInt.of(value, alarm, time, display);
26+
}
27+
28+
@Override
29+
String getToString() {
30+
return "VInt[1, MINOR(DB) - LOW, 2012-12-05T14:57:21.521786982Z]";
31+
}
32+
2833
}

0 commit comments

Comments
 (0)