Skip to content

Commit 3130604

Browse files
authored
Merge pull request #514 from Hopding/robust-classifier-type-comparison-513
Changed use of "==" operator to Class.isAssignableFrom method
2 parents bec5f6f + ed46d0e commit 3130604

File tree

3 files changed

+84
-6
lines changed

3 files changed

+84
-6
lines changed

src/main/java/org/numenta/nupic/model/Synapse.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ public boolean equals(Object obj) {
239239
return false;
240240
if(synapseIndex != other.synapseIndex)
241241
return false;
242+
if(permanence != other.permanence)
243+
return false;
242244
return true;
243245
}
244246
}

src/main/java/org/numenta/nupic/network/Layer.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1934,21 +1934,24 @@ NamedTuple makeClassifiers(MultiEncoder encoder) {
19341934
int i = 0;
19351935
for(EncoderTuple et : encoder.getEncoders(encoder)) {
19361936
names[i] = et.getName();
1937-
Object fieldClassifier = inferredFields.get(et.getName());
1938-
if(fieldClassifier == CLAClassifier.class) {
1937+
Class fieldClassifier = inferredFields.get(et.getName());
1938+
if(fieldClassifier == null) {
1939+
LOGGER.info("Not classifying \"" + et.getName() + "\" input field");
1940+
}
1941+
else if(CLAClassifier.class.isAssignableFrom(fieldClassifier)) {
19391942
LOGGER.info("Classifying \"" + et.getName() + "\" input field with CLAClassifier");
19401943
ca[i] = new CLAClassifier();
1941-
} else if(fieldClassifier == SDRClassifier.class) {
1944+
}
1945+
else if(SDRClassifier.class.isAssignableFrom(fieldClassifier)) {
19421946
LOGGER.info("Classifying \"" + et.getName() + "\" input field with SDRClassifier");
19431947
ca[i] = new SDRClassifier();
1944-
} else if(fieldClassifier != null) {
1948+
}
1949+
else {
19451950
throw new IllegalStateException(
19461951
"Invalid Classifier class token, \"" + fieldClassifier + "\",\n\t" +
19471952
"specified for, \"" + et.getName() + "\", input field.\n\t" +
19481953
"Valid class tokens are CLAClassifier.class and SDRClassifier.class"
19491954
);
1950-
} else { // fieldClassifier is null
1951-
LOGGER.info("Not classifying \"" + et.getName() + "\" input field");
19521955
}
19531956
i++;
19541957
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.numenta.nupic.model;
2+
3+
import org.junit.Test;
4+
import static org.junit.Assert.*;
5+
6+
public class SynapseTest {
7+
@Test
8+
public void testSynapseEquality() {
9+
// Make stuff we need to perform the tests
10+
Column column = new Column(1, 0);
11+
Cell cell1 = new Cell(column, 0);
12+
Cell cell2 = new Cell(column, 1);
13+
DistalDendrite segment1 = new DistalDendrite(cell1, 0, 0, 0);
14+
DistalDendrite segment2 = new DistalDendrite(cell1, 1, 1, 1);
15+
16+
// These are the Synapse objects we will use for the tests
17+
Synapse synapse1 = new Synapse();
18+
Synapse synapse2 = new Synapse();
19+
20+
/* ----- These are the equality tests: ----- */
21+
// synapse1 should equal itself
22+
assertTrue(synapse1.equals(synapse1));
23+
24+
// synapse1 should not equal null
25+
assertFalse(synapse1.equals(null));
26+
27+
// synapse1 should not equal a non-Synapse object
28+
assertFalse(synapse1.equals("This is not a Synapse object"));
29+
30+
// synapse1 should not equal synapse2 because synapse2's
31+
// inputIndex != synapse1's inputIndex
32+
synapse1.setPresynapticCell(cell1);
33+
assertFalse(synapse1.equals(synapse2));
34+
35+
// synapse1 should not equal synapse2 because synapse1's
36+
// segment is null, but synapse2's segment is not null
37+
synapse2 = new Synapse(cell1, segment1, 0, 0);
38+
assertFalse(synapse1.equals(synapse2));
39+
40+
// synapse1 should not equal synapse2 because synapse1's
41+
// segment != synapse2's segment
42+
synapse1 = new Synapse(cell1, segment2, 0, 0);
43+
assertFalse(synapse1.equals(synapse2));
44+
45+
// synapse1 should not equal synapse2 because synapse1's
46+
// sourceCell is null, but synapse2's sourceCell is not null
47+
synapse1.setPresynapticCell(null);
48+
assertFalse(synapse1.equals(synapse2));
49+
50+
// synapse1 should not equal synapse2 because synapse1's
51+
// sourceCell != synapse2's sourceCell
52+
synapse1.setPresynapticCell(cell2);
53+
assertFalse(synapse1.equals(synapse2));
54+
55+
// synapse1 should not equal synapse2 because synapse1's
56+
// synapseIndex != synapse2's synapseIndex
57+
synapse1 = new Synapse(cell1, segment1, 0, 0);
58+
synapse2 = new Synapse(cell1, segment1, 1, 0);
59+
assertFalse(synapse1.equals(synapse2));
60+
61+
// synapse1 should not equal synapse2 because synapse1's
62+
// permanence != synapse2's permanence
63+
synapse1 = new Synapse(cell1, segment1, 0, 0);
64+
synapse2 = new Synapse(cell1, segment1, 0, 1);
65+
assertFalse(synapse1.equals(synapse2));
66+
67+
// synapse1 should equal synapse2 because all of their
68+
// relevant properties are equal
69+
synapse1 = new Synapse(cell1, segment1, 0, 0);
70+
synapse2 = new Synapse(cell1, segment1, 0, 0);
71+
assertTrue(synapse1.equals(synapse2));
72+
}
73+
}

0 commit comments

Comments
 (0)