diff options
| -rw-r--r-- | data/testing/empty.sqlite3 (renamed from data/empty.sqlite3) | bin | 8192 -> 8192 bytes | |||
| -rw-r--r-- | src/main/java/edu/brown/cs/student/term/hub/Holder.java | 24 | ||||
| -rw-r--r-- | src/main/java/edu/brown/cs/student/term/hub/HubSearch.java | 3 | ||||
| -rw-r--r-- | src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java | 23 | ||||
| -rw-r--r-- | src/test/java/edu/brown/cs/student/DBQuerierTest.java | 2 | ||||
| -rw-r--r-- | src/test/java/edu/brown/cs/student/HubRankTest.java | 45 | ||||
| -rw-r--r-- | src/test/java/edu/brown/cs/student/LinkMapperTest.java | 2 | ||||
| -rw-r--r-- | src/test/java/edu/brown/cs/student/SuspicionRankerTest.java | 13 |
8 files changed, 95 insertions, 17 deletions
diff --git a/data/empty.sqlite3 b/data/testing/empty.sqlite3 Binary files differindex 3d10907..3d10907 100644 --- a/data/empty.sqlite3 +++ b/data/testing/empty.sqlite3 diff --git a/src/main/java/edu/brown/cs/student/term/hub/Holder.java b/src/main/java/edu/brown/cs/student/term/hub/Holder.java index 1151e74..2d11079 100644 --- a/src/main/java/edu/brown/cs/student/term/hub/Holder.java +++ b/src/main/java/edu/brown/cs/student/term/hub/Holder.java @@ -1,15 +1,17 @@ package edu.brown.cs.student.term.hub; -import java.util.Objects; +import java.util.*; public class Holder { private int id; private String name; private double suspicionScore; + private Set<Holder> followers; public Holder(int id, String name) { this.id = id; this.name = name; + followers = new HashSet<>(); } public int getId() { @@ -26,11 +28,29 @@ public class Holder { return name; } + public Set<Holder> getFollowers() { + return followers; + } + + public void addFollower(Holder follower){ + followers.add(follower); + } + @Override - public String toString() { + public String toString() { return name; } + + public String toTestString() { + return "Holder{" + + "id=" + id + + ", name='" + name + '\'' + + ", suspicionScore=" + suspicionScore + + ", followers=" + followers + + '}'; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java b/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java index ccefeef..86b883f 100644 --- a/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java +++ b/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java @@ -60,9 +60,12 @@ public class HubSearch { who followed leader or the number of people who follower followed --- probably the second option ;( */ Set<Holder> peopleFollowed = followerToLeaderMap.get(follower); + int numberFollowed = peopleFollowed.size(); if(peopleFollowed.contains(leader)){ + //constructs the leader to follower links as we go for use later on + leader.addFollower(follower); return ((damp / numHolders) + (1 - damp) * (1.0 / numberFollowed)); } else if(numberFollowed == 0){ return ((damp / numHolders) + (1 - damp) * (1.0 / numHolders)); diff --git a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java index 9f5f9c1..b52a47a 100644 --- a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java +++ b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java @@ -17,8 +17,11 @@ public class SuspicionRanker { public <K, V extends Comparable<V>> V getMaxOfMap(Map<K, V> map) { Map.Entry<K, V> maxEntry = Collections.max(map.entrySet(), Map.Entry.comparingByValue()); - System.out.println(maxEntry); - System.out.println(maxEntry.getValue()); + return maxEntry.getValue(); + } + + public <K, V extends Comparable<V>> V getMinOfMap(Map<K, V> map) { + Map.Entry<K, V> maxEntry = Collections.min(map.entrySet(), Map.Entry.comparingByValue()); return maxEntry.getValue(); } @@ -36,11 +39,27 @@ public class SuspicionRanker { Map<Integer, Double> profitMap = pc.getProfitMap(); double profitMax = getMaxOfMap(profitMap); + /*if all of our values are negative, we need to flip sides so that the + * biggest loser doesn't end up being the most suspicious person*/ + if(profitMax <= 0) { + profitMax = Math.abs(getMinOfMap(profitMap)); + } + + System.out.println("the max: " + profitMax); + + /*if both the min we found and max we found are 0, then we have + the special case where all the values are 0, in which case we + need to avoid dividing by 0*/ + if(profitMax == 0){ + profitMax = 1; + } + double hubMax = getMaxOfMap(holderToHubScore); for (Holder guy : holderToHubScore.keySet()) { double normalizedProfitScore = profitMap.get(guy.getId()) / profitMax; + double normalizedHubScore = holderToHubScore.get(guy) / hubMax; double suspicionScore = normalizedHubScore * 0.6 + normalizedProfitScore * 0.4; guy.setSuspicionScore(suspicionScore); diff --git a/src/test/java/edu/brown/cs/student/DBQuerierTest.java b/src/test/java/edu/brown/cs/student/DBQuerierTest.java index b3ea140..4bcb193 100644 --- a/src/test/java/edu/brown/cs/student/DBQuerierTest.java +++ b/src/test/java/edu/brown/cs/student/DBQuerierTest.java @@ -54,7 +54,7 @@ public class DBQuerierTest { @Test public void testEmptyDatabase(){ try{ - db = new DatabaseQuerier("data/empty.sqlite3"); + db = new DatabaseQuerier("data/testing/empty.sqlite3"); } catch(Exception e){ System.out.println("DBQuerier Test, couldn't connect to db???"); } diff --git a/src/test/java/edu/brown/cs/student/HubRankTest.java b/src/test/java/edu/brown/cs/student/HubRankTest.java index cbe6112..07fd282 100644 --- a/src/test/java/edu/brown/cs/student/HubRankTest.java +++ b/src/test/java/edu/brown/cs/student/HubRankTest.java @@ -24,6 +24,13 @@ public class HubRankTest { private DatabaseQuerier db; + Holder don = new Holder(1, "Don"); + Holder mitch = new Holder(2, "Mitch"); + Holder nancy = new Holder(3, "Nancy"); + Holder midge = new Holder(4, "Midge"); + Holder bob = new Holder(5, "Bob"); + Holder jane = new Holder(6, "Jane"); + @Before public void setUp() { try{ @@ -41,7 +48,7 @@ public class HubRankTest { @Test public void testEmptyDB(){ try{ - db = new DatabaseQuerier("data/empty.sqlite3"); + db = new DatabaseQuerier("data/testing/empty.sqlite3"); } catch(Exception e){ System.out.println("DBQuerier Test, couldn't connect to db???"); } @@ -79,12 +86,6 @@ public class HubRankTest { LinkMapper lm = new LinkMapper(db); HubSearch hub = new HubSearch(lm); Map<Holder, Double> hubRanks = hub.runHubSearch(start, end); - Holder don = new Holder(1, "Don"); - Holder mitch = new Holder(2, "Mitch"); - Holder nancy = new Holder(3, "Nancy"); - Holder midge = new Holder(4, "Midge"); - Holder bob = new Holder(5, "Bob"); - Holder jane = new Holder(6, "Jane"); System.out.println(hubRanks); assertTrue(hubRanks.get(mitch) > hubRanks.get(don)); @@ -95,4 +96,34 @@ public class HubRankTest { tearDown(); } + + @Test + public void testFollowersSetsConstructedProperly(){ + setUp(); + LinkMapper lm = new LinkMapper(db); + HubSearch hub = new HubSearch(lm); + Map<Holder, Double> hubRanks = hub.runHubSearch(start, end); + + for(Holder person: hubRanks.keySet()){ + System.out.println(person.getName() + " " + person.getFollowers()); + if(person.equals(don)) { + assertTrue(person.getFollowers().contains(mitch)); + assertTrue(person.getFollowers().contains(nancy)); + assertTrue(person.getFollowers().contains(midge)); + } else if(person.equals(bob)){ + assertTrue(person.getFollowers().contains(mitch)); + assertTrue(person.getFollowers().contains(midge)); + } else if(person.equals(nancy)){ + assertTrue(person.getFollowers().contains(midge)); + } else if(person.equals(mitch)){ + assertTrue(person.getFollowers().contains(nancy)); + assertTrue(person.getFollowers().contains(midge)); + assertTrue(person.getFollowers().contains(bob)); + } else{ + assertTrue(person.getFollowers().isEmpty()); + } + } + + tearDown(); + } } diff --git a/src/test/java/edu/brown/cs/student/LinkMapperTest.java b/src/test/java/edu/brown/cs/student/LinkMapperTest.java index 3d4bedc..643f63a 100644 --- a/src/test/java/edu/brown/cs/student/LinkMapperTest.java +++ b/src/test/java/edu/brown/cs/student/LinkMapperTest.java @@ -76,7 +76,7 @@ public class LinkMapperTest { @Test public void testEmptyDB(){ try{ - db = new DatabaseQuerier("data/empty.sqlite3"); + db = new DatabaseQuerier("data/testing/empty.sqlite3"); } catch(Exception e){ System.out.println("DBQuerier Test, couldn't connect to db???"); } diff --git a/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java b/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java index d641507..266eb30 100644 --- a/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java +++ b/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java @@ -10,8 +10,11 @@ import org.junit.Before; import org.junit.Test; import java.time.Instant; +import java.util.Comparator; import java.util.List; import java.util.Map; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class SuspicionRankerTest { @@ -39,14 +42,16 @@ public class SuspicionRankerTest { } @Test - public void testMapper(){ + public void testSuspicionRanksOnMockData(){ setUp(); SuspicionRanker r = new SuspicionRanker(db); List<Holder> him = r.getSuspicionScoreList(start, end); - //System.out.println(him); - for(Holder guy: him){ - System.out.println(guy.getName() + " " + guy.getSuspicionScore()); + //assertEquals(6, him.size()); + for(Holder p: him){ + System.out.println(p.toTestString()); } tearDown(); } + + } |
