package edu.stanford.nlp.sempre.test;
import edu.stanford.nlp.sempre.FbFormulasInfo;
import edu.stanford.nlp.sempre.FbFormulasInfo.BinaryFormulaInfo;
import edu.stanford.nlp.sempre.FbFormulasInfo.UnaryFormulaInfo;
import edu.stanford.nlp.sempre.Formula;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
public class FbFormulasTest {
@Test
public void formulaInfo() {
FbFormulasInfo infoRepos = FbFormulasInfo.getSingleton();
//1
BinaryFormulaInfo bInfo = infoRepos.getBinaryInfo(Formula.fromString("(lambda x (!fb:education.education.specialization (!fb:education.field_of_study.students_majoring (var x))))"));
assertEquals(521.0, bInfo.popularity, 0.0001);
assertEquals("fb:education.field_of_study", bInfo.expectedType1);
assertEquals("fb:education.field_of_study", bInfo.expectedType2);
boolean contains = bInfo.descriptions.contains("specialization") && bInfo.descriptions.contains("students majoring in this field");
assertEquals(true, contains);
//2
bInfo=infoRepos.getBinaryInfo(Formula.fromString("!fb:broadcast.content.broadcast"));
assertEquals(4838.0, bInfo.popularity,0.0001);
assertEquals("fb:broadcast.broadcast", bInfo.expectedType1);
assertEquals("fb:broadcast.content", bInfo.expectedType2);
contains = bInfo.descriptions.contains("broadcasts");
assertEquals(true, contains);
//3
UnaryFormulaInfo uInfo = infoRepos.getUnaryInfo(Formula.fromString("(fb:type.object.type fb:location.country)"));
assertEquals(574.0, uInfo.popularity,0.0001);
contains = uInfo.descriptions.contains("country") && uInfo.descriptions.contains("empire");
assertEquals(true, contains);
assertEquals("fb:location.country",uInfo.types.iterator().next());
//4
uInfo = infoRepos.getUnaryInfo(Formula.fromString("(fb:people.person.profession fb:en.wrestler)"));
assertEquals(1449.0, uInfo.popularity,0.0001);
contains = uInfo.descriptions.contains("wrestler")
&& uInfo.descriptions.contains("professional wrestler")
&& uInfo.descriptions.contains("pro wrestler");
assertEquals(true, contains);
assertEquals("fb:people.person",uInfo.types.iterator().next());
}
}