Skip to content

Commit ca8de78

Browse files
szirbuczmagwas
authored andcommitted
Compute matrix diagonal on normalization #252 (#304)
* Compute matrix diagonal on normalization #252
1 parent 9896509 commit ca8de78

File tree

6 files changed

+116
-8
lines changed

6 files changed

+116
-8
lines changed

src/main/java/org/rulez/demokracia/pdengine/BeatTable.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.rulez.demokracia.pdengine.dataobjects.Pair;
77
import org.rulez.demokracia.types.MapMatrix;
88

9-
public class BeatTable extends MapMatrix<String, Pair> implements TransitiveClosable {
9+
public class BeatTable extends MapMatrix<String, Pair> implements TransitiveClosable, Normalizable {
1010
private static final long serialVersionUID = 1L;
1111

1212
public enum Direction {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.rulez.demokracia.pdengine;
2+
import org.rulez.demokracia.pdengine.dataobjects.Pair;
3+
4+
public interface Normalizable extends ContainingBeats {
5+
6+
long serialVersionUID = 1L;
7+
8+
default void normalize() {
9+
for (String key : getKeyCollection()) {
10+
setElement(key, key, new Pair(0, 0));
11+
}
12+
}
13+
14+
}

src/main/java/org/rulez/demokracia/pdengine/dataobjects/PairEntity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.rulez.demokracia.pdengine.persistence.BaseEntity;
44

55
public class PairEntity extends BaseEntity {
6-
6+
77
private static final long serialVersionUID = 1L;
88
public int winning;
99
public int losing;

src/main/java/org/rulez/demokracia/pdengine/persistence/BaseEntity.java

+17-6
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,30 @@
77
import javax.persistence.Inheritance;
88
import javax.persistence.InheritanceType;
99

10+
import org.apache.commons.lang3.builder.EqualsBuilder;
11+
import org.apache.commons.lang3.builder.HashCodeBuilder;
1012
import org.rulez.demokracia.pdengine.RandomUtils;
1113

1214
@Entity
1315
@Inheritance(strategy = InheritanceType.JOINED)
1416
public abstract class BaseEntity implements Serializable {
1517

1618
private static final long serialVersionUID = 1L;
17-
19+
1820
@Id
1921
public String id;
20-
21-
public BaseEntity() {
22-
id = RandomUtils.createRandomKey();
23-
}
24-
22+
23+
public BaseEntity() {
24+
id = RandomUtils.createRandomKey();
25+
}
26+
27+
@Override
28+
public int hashCode() {
29+
return HashCodeBuilder.reflectionHashCode(this, "id");
30+
}
31+
32+
@Override
33+
public boolean equals(final Object other) {
34+
return EqualsBuilder.reflectionEquals(this, other, "id");
35+
}
2536
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.rulez.demokracia.pdengine;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotEquals;
5+
6+
import org.junit.Test;
7+
import org.rulez.demokracia.pdengine.annotations.TestedBehaviour;
8+
import org.rulez.demokracia.pdengine.annotations.TestedFeature;
9+
import org.rulez.demokracia.pdengine.annotations.TestedOperation;
10+
import org.rulez.demokracia.pdengine.dataobjects.Pair;
11+
import org.rulez.demokracia.pdengine.dataobjects.VoteEntity;
12+
13+
@TestedFeature("Supporting functionality")
14+
@TestedOperation("BaseEntity")
15+
@TestedBehaviour("None of the entities count id into the equals and hashCode.")
16+
public class BaseEntityHashEqualsTest {
17+
18+
19+
@Test
20+
public void entities_with_equal_fields_are_equal() {
21+
Pair pair1 = new Pair(12, 42);
22+
Pair pair2 = new Pair(12, 42);
23+
assertNotEquals(pair1.id, pair2.id);
24+
assertEquals(pair1, pair2);
25+
}
26+
27+
@Test
28+
public void entities_with_different_fields_are_not_equal() {
29+
Pair pair1 = new Pair(12, 42);
30+
Pair pair2 = new Pair(12, 69);
31+
assertNotEquals(pair1, pair2);
32+
}
33+
34+
@Test
35+
public void equal_entities_have_the_same_hash_code() {
36+
Pair pair1 = new Pair(12, 42);
37+
Pair pair2 = new Pair(12, 42);
38+
assertEquals(pair1.hashCode(), pair2.hashCode());
39+
}
40+
41+
@Test
42+
public void hashCode_should_return_different_hash_on_different_entities() {
43+
Pair pair = new Pair(10, 10);
44+
VoteEntity vote = new VoteEntity();
45+
assertNotEquals(pair.hashCode(), vote.hashCode());
46+
}
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.rulez.demokracia.pdengine;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import org.junit.Before;
6+
import org.junit.Test;
7+
import org.rulez.demokracia.pdengine.annotations.TestedBehaviour;
8+
import org.rulez.demokracia.pdengine.annotations.TestedFeature;
9+
import org.rulez.demokracia.pdengine.annotations.TestedOperation;
10+
import org.rulez.demokracia.pdengine.dataobjects.Pair;
11+
import org.rulez.demokracia.pdengine.exception.ReportedException;
12+
import org.rulez.demokracia.pdengine.testhelpers.CreatedBeatTable;
13+
14+
@TestedFeature("Schulze method")
15+
@TestedOperation("normalize beat matrix")
16+
public class BeatTableNormalizationTest extends CreatedBeatTable {
17+
18+
@Override
19+
@Before
20+
public void setUp() throws ReportedException {
21+
super.setUp();
22+
createNewBeatTableWithComplexData();
23+
}
24+
25+
@TestedBehaviour("the diagonal elements are (0,0)")
26+
@Test
27+
public void normalization_sets_the_diagonal_to_0_0() {
28+
beatTable.normalize();
29+
beatTable.getKeyCollection().forEach(k -> assertDiagonalElementIsZero(k));
30+
}
31+
32+
private void assertDiagonalElementIsZero(final String key) {
33+
Pair element = beatTable.getElement(key, key);
34+
assertEquals(new Pair(0, 0), element);
35+
}
36+
}

0 commit comments

Comments
 (0)