package water;
import com.amazonaws.util.json.JSONArray;
import dontweave.gson.JsonArray;
import dontweave.gson.JsonObject;
import junit.framework.Assert;
import org.junit.Test;
import water.api.TypeaheadKeysRequest;
import water.util.Utils;
import java.util.ArrayList;
/**
* Created by tomasnykodym on 5/23/14.
*/
public class TypeAheadTest extends TestUtil {
private static class TypeAheadReqestTest extends TypeaheadKeysRequest{
final String _f;
public TypeAheadReqestTest(String filter){
super("",filter,null);
_f = filter;
}
public JsonArray doTest(){ return serve(_f, 1000,0); }
}
@Test
public void testTypeAhead(){
ArrayList<Key> keys = new ArrayList<Key>();
try {
for (int i = 0; i < 1e2; ++i) {
Key k = Key.makeSystem(Key.rand());
keys.add(k);
DKV.put(k, new Value(k, new Utils.IcedInt(i)));
}
// add 100 user keys with same prefix
for (int i = 0; i < 1e2; ++i) {
Key k = Key.make("key" + i);
keys.add(k);
DKV.put(k, new Value(k, new Utils.IcedInt(i)));
}
for (int i = 0; i < 1e2; ++i) {
Key k = Key.make("kei" + i);
keys.add(k);
DKV.put(k, new Value(k, new Utils.IcedInt(i)));
}
// add some random user keys
for (int i = 0; i < 1e2; ++i) {
Key k = Key.make();
if (k.toString().startsWith("k")) k = Key.make();
keys.add(k);
DKV.put(k, new Utils.IcedInt(i));
}
long t = System.currentTimeMillis();
H2O.KeySnapshot.globalSnapshot();
for (int i = 0; i < 1e2; ++i) {
Assert.assertEquals(200, new TypeAheadReqestTest("k").doTest().size());
Assert.assertEquals(200, new TypeAheadReqestTest("ke").doTest().size());
Assert.assertEquals(100, new TypeAheadReqestTest("key").doTest().size());
Assert.assertEquals(0 < i && i < 10 ? 11 : 1, new TypeAheadReqestTest("key" + i).doTest().size());
}
// make sure type-ahead latency is low enough...
// (not really great test for that...but more realistic test would take too long to run within build.sh tests...)
Assert.assertTrue((System.currentTimeMillis() - t) < 1000);
} finally {
for (Key k : keys) DKV.remove(k);
}
}
}