work on CatRank

This commit is contained in:
David Renshaw 2014-06-24 09:45:44 -04:00
parent 7df18d5646
commit b5168b17e5
2 changed files with 89 additions and 3 deletions

View file

@ -9,16 +9,78 @@ public class CatRank
extends TestCase<SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader, extends TestCase<SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader,
SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader, Integer> { SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader, Integer> {
static class ScoredResult implements Comparable<ScoredResult> {
public double score;
public SearchResult.Reader result;
public ScoredResult(double score, SearchResult.Reader result) {
this.score = score; this.result = result;
}
public int compareTo(ScoredResult other) {
if (this.score < other.score) {
return -1;
} else {
return 1;
}
}
}
static final String URL_PREFIX = "http://example.com";
public Integer setupRequest(Common.FastRand rng, SearchResultList.Builder request) { public Integer setupRequest(Common.FastRand rng, SearchResultList.Builder request) {
return 0; int count = rng.nextLessThan(1000);
int goodCount = 0;
StructList.Builder<SearchResult.Builder> list = request.initResults(count);
for (int i = 0; i < list.size(); ++i) {
SearchResult.Builder result = list.get(i);
result.setScore(1000.0 - (double)i);
int urlSize = rng.nextLessThan(100);
}
// ...
return goodCount;
} }
public void handleRequest(SearchResultList.Reader request, SearchResultList.Builder response) { public void handleRequest(SearchResultList.Reader request, SearchResultList.Builder response) {
java.util.ArrayList<ScoredResult> scoredResults = new java.util.ArrayList<ScoredResult>();
for (SearchResult.Reader result : request.getResults()) {
double score = result.getScore();
if (result.getSnippet().toString().contains(" cat ")) {
score *= 10000.0;
}
if (result.getSnippet().toString().contains(" dog ")) {
score /= 10000.0;
}
scoredResults.add(new ScoredResult(score, result));
}
java.util.Collections.sort(scoredResults);
StructList.Builder<SearchResult.Builder> list = response.initResults(scoredResults.size());
for (int i = 0; i < list.size(); ++i) {
SearchResult.Builder item = list.get(i);
ScoredResult result = scoredResults.get(i);
item.setScore(result.score);
item.setUrl(result.result.getUrl());
item.setSnippet(result.result.getSnippet());
}
} }
public boolean checkResponse(SearchResultList.Reader response, Integer expectedGoodCount) { public boolean checkResponse(SearchResultList.Reader response, Integer expectedGoodCount) {
return true; int goodCount = 0;
for (SearchResult.Reader result : response.getResults()) {
if (result.getScore() > 1001.0) {
goodCount += 1;
} else {
break;
}
}
return goodCount == expectedGoodCount;
} }
} }

View file

@ -42,7 +42,7 @@ public final class StructList {
} }
} }
public static final class Builder<T> { public static final class Builder<T> implements Iterable<T> {
public final ListBuilder builder; public final ListBuilder builder;
public final FromStructBuilder<T> factory; public final FromStructBuilder<T> factory;
@ -65,6 +65,30 @@ public final class StructList {
return this.factory.fromStructBuilder(this.builder.getStructElement(index)); return this.factory.fromStructBuilder(this.builder.getStructElement(index));
} }
public final class Iterator implements java.util.Iterator<T> {
public Builder<T> list;
public int idx = 0;
public Iterator(Builder<T> list) {
this.list = list;
}
public T next() {
return list.factory.fromStructBuilder(list.builder.getStructElement(idx++));
}
public boolean hasNext() {
return idx < list.size();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
public java.util.Iterator<T> iterator() {
return new Iterator(this);
}
} }
} }