package edu.stanford.nlp.sempre.test;
import edu.stanford.nlp.sempre.*;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
/**
* Test JavaExecutor.
* @author Percy Liang
*/
public class JavaExecutorTest {
JavaExecutor executor = new JavaExecutor();
private static Formula F(String s) { return Formula.fromString(s); }
private static Value V(double x) { return new NumberValue(x); }
private static Value V(String x) { return Values.fromString(x); }
@Test public void numbers() {
assertEquals(V(8), executor.execute(F("(call + (number 3) (number 5))"), null).value);
assertEquals(V(6), executor.execute(F("(call + (call - (number 10) (number 9)) (number 5))"), null).value);
assertEquals(V(1), executor.execute(F("(call java.lang.Math.cos (number 0))"), null).value);
assertEquals(V(1), executor.execute(F("((lambda x (call java.lang.Math.cos (var x))) (number 0))"), null).value); // Make sure beta reduction is called
}
@Test public void conditionals() {
assertEquals(V("(string no)"), executor.execute(F("(call if (boolean false) (string yes) (string no))"), null).value);
assertEquals(V("(string yes)"), executor.execute(F("(call if (call < (number 3) (number 4)) (string yes) (string no))"), null).value);
}
@Test public void strings() {
assertEquals(V(5), executor.execute(F("(call .length (string hello))"), null).value);
assertEquals(V("(string abcdef)"), executor.execute(F("(call .concat (string abc) (string def))"), null).value);
}
@Test public void higherOrder() {
assertEquals(V("(list (number 10) (number 40))"), executor.execute(F("(call map (list (number 1) (number 4)) (lambda x (call * (number 10) (var x))))"), null).value);
assertEquals(V("(list (number 4))"), executor.execute(F("(call select (list (number 1) (number 4)) (lambda x (call == (number 0) (call % (var x) (number 2)))))"), null).value);
// assertEquals(V("(list (number 5))"), executor.execute(F("(call reduce (list (number 1) (number 4)) +)")).value); // Not implemented yet
}
}