work on CatRank
This commit is contained in:
parent
7df18d5646
commit
b5168b17e5
2 changed files with 89 additions and 3 deletions
|
@ -9,16 +9,78 @@ public class CatRank
|
|||
extends TestCase<SearchResultList.Factory, SearchResultList.Builder, SearchResultList.Reader,
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
return true;
|
||||
int goodCount = 0;
|
||||
for (SearchResult.Reader result : response.getResults()) {
|
||||
if (result.getScore() > 1001.0) {
|
||||
goodCount += 1;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return goodCount == expectedGoodCount;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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 FromStructBuilder<T> factory;
|
||||
|
||||
|
@ -65,6 +65,30 @@ public final class StructList {
|
|||
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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue