Skip to content

Commit

Permalink
Compute matrix diagonal on normalization #252 (#304)
Browse files Browse the repository at this point in the history
* Compute matrix diagonal on normalization #252
  • Loading branch information
szirbucz authored and magwas committed Mar 30, 2019
1 parent ee99b3c commit aa932fa
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/main/java/org/rulez/demokracia/pdengine/BeatTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.rulez.demokracia.pdengine.dataobjects.Pair;
import org.rulez.demokracia.types.MapMatrix;

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

public enum Direction {
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/org/rulez/demokracia/pdengine/Normalizable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.rulez.demokracia.pdengine;
import org.rulez.demokracia.pdengine.dataobjects.Pair;

public interface Normalizable extends ContainingBeats {

long serialVersionUID = 1L;

default void normalize() {
for (String key : getKeyCollection()) {
setElement(key, key, new Pair(0, 0));
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.rulez.demokracia.pdengine.persistence.BaseEntity;

public class PairEntity extends BaseEntity {

private static final long serialVersionUID = 1L;
public int winning;
public int losing;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,30 @@
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.rulez.demokracia.pdengine.RandomUtils;

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

private static final long serialVersionUID = 1L;

@Id
public String id;

public BaseEntity() {
id = RandomUtils.createRandomKey();
}


public BaseEntity() {
id = RandomUtils.createRandomKey();
}

@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this, "id");
}

@Override
public boolean equals(final Object other) {
return EqualsBuilder.reflectionEquals(this, other, "id");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.rulez.demokracia.pdengine;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

import org.junit.Test;
import org.rulez.demokracia.pdengine.annotations.TestedBehaviour;
import org.rulez.demokracia.pdengine.annotations.TestedFeature;
import org.rulez.demokracia.pdengine.annotations.TestedOperation;
import org.rulez.demokracia.pdengine.dataobjects.Pair;
import org.rulez.demokracia.pdengine.dataobjects.VoteEntity;

@TestedFeature("Supporting functionality")
@TestedOperation("BaseEntity")
@TestedBehaviour("None of the entities count id into the equals and hashCode.")
public class BaseEntityHashEqualsTest {


@Test
public void entities_with_equal_fields_are_equal() {
Pair pair1 = new Pair(12, 42);
Pair pair2 = new Pair(12, 42);
assertNotEquals(pair1.id, pair2.id);
assertEquals(pair1, pair2);
}

@Test
public void entities_with_different_fields_are_not_equal() {
Pair pair1 = new Pair(12, 42);
Pair pair2 = new Pair(12, 69);
assertNotEquals(pair1, pair2);
}

@Test
public void equal_entities_have_the_same_hash_code() {
Pair pair1 = new Pair(12, 42);
Pair pair2 = new Pair(12, 42);
assertEquals(pair1.hashCode(), pair2.hashCode());
}

@Test
public void hashCode_should_return_different_hash_on_different_entities() {
Pair pair = new Pair(10, 10);
VoteEntity vote = new VoteEntity();
assertNotEquals(pair.hashCode(), vote.hashCode());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.rulez.demokracia.pdengine;

import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;
import org.rulez.demokracia.pdengine.annotations.TestedBehaviour;
import org.rulez.demokracia.pdengine.annotations.TestedFeature;
import org.rulez.demokracia.pdengine.annotations.TestedOperation;
import org.rulez.demokracia.pdengine.dataobjects.Pair;
import org.rulez.demokracia.pdengine.exception.ReportedException;
import org.rulez.demokracia.pdengine.testhelpers.CreatedBeatTable;

@TestedFeature("Schulze method")
@TestedOperation("normalize beat matrix")
public class BeatTableNormalizationTest extends CreatedBeatTable {

@Override
@Before
public void setUp() throws ReportedException {
super.setUp();
createNewBeatTableWithComplexData();
}

@TestedBehaviour("the diagonal elements are (0,0)")
@Test
public void normalization_sets_the_diagonal_to_0_0() {
beatTable.normalize();
beatTable.getKeyCollection().forEach(k -> assertDiagonalElementIsZero(k));
}

private void assertDiagonalElementIsZero(final String key) {
Pair element = beatTable.getElement(key, key);
assertEquals(new Pair(0, 0), element);
}
}

0 comments on commit aa932fa

Please sign in to comment.