package edu.stanford.nlp.sempre.test;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import edu.stanford.nlp.sempre.*;
import fig.basic.Pair;
import fig.basic.Evaluation;
import org.testng.annotations.Test;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static org.testng.AssertJUnit.assertEquals;
/**
* Various end-to-end sanity checks.
*
* @author Roy Frostig
* @author Percy Liang
*/
public class SystemSanityTest {
private static Builder makeBuilder(String grammarPath) {
Grammar g = new Grammar();
g.read(grammarPath);
Builder b = new Builder();
b.grammar = g;
b.executor = new FormulaMatchExecutor();
b.buildUnspecified();
return b;
}
private static Dataset makeDataset() {
Dataset d = new Dataset();
d.readFromPathPairs(Collections.singletonList(
Pair.newPair("train", "freebase/data/unittest-learn.examples")));
return d;
}
private static Map<String, List<Evaluation>> learn(Builder builder, Dataset dataset) {
Map<String, List<Evaluation>> evals = Maps.newHashMap();
new Learner(builder.parser, builder.params, dataset).learn(3, evals);
return evals;
}
@Test(groups = { "sparql", "corenlp" })
public void easyEndToEnd() {
LanguageAnalyzer.setSingleton(new SimpleAnalyzer());
// Make sure learning works
Dataset dataset = makeDataset();
String[] grammarPaths = new String[] {
"freebase/data/unittest-learn.grammar",
"freebase/data/unittest-learn-ccg.grammar",
};
for (String grammarPath : grammarPaths) {
Builder builder = makeBuilder(grammarPath);
FeatureExtractor.opts.featureDomains.add("rule");
Map<String, List<Evaluation>> evals = learn(builder, dataset);
assertEquals(1.0d, Iterables.getLast(evals.get("train")).getFig("correct").min());
}
}
}