private ArdenValue eval(String data, String logic, String action, ExecutionContext context)
     throws Exception {
   MedicalLogicModule mlm = ActionTests.parseTemplate(data, logic, action);
   ArdenValue[] result = mlm.run(context, null);
   Assert.assertEquals(1, result.length);
   return result[0];
 }
  @Test
  public void JDBCExecutionContextRead() throws Exception {
    if (loadSQLite() == null) {
      return;
    }
    String[] args = new String[] {"-e", "jdbc:sqlite:"};
    CommandLineOptions options = CliFactory.parseArguments(CommandLineOptions.class, args);

    ExecutionContext testContext = new JDBCExecutionContext(options);
    MedicalLogicModule mlm =
        ActionTests.parseTemplate(
            "varA := read {drop table if exists person};\n"
                + "varB := read {create table person (id integer, name string)};\n"
                + "varC := read {insert into person values (1, 'A')};\n"
                + "varD := read {insert into person values (2, 'B')};\n"
                + "(varE, varF) := read {select * from person};\n",
            "conclude true;",
            "return (varE, varF);");
    ArdenValue[] result = mlm.run(testContext, null);
    Assert.assertEquals(1, result.length);

    ArdenValue[] expected = {
      new ArdenNumber(1), new ArdenNumber(2), new ArdenString("A"), new ArdenString("B")
    };
    ArdenValue[] resultList = ((ArdenList) (result[0])).values;

    Assert.assertArrayEquals(expected, resultList);
  }
 @Test
 public void RecursiveMlm() throws Exception {
   MedicalLogicModule mlm =
       ActionTests.parseTemplate(
           "this := MLM mlm_self; arg := ARGUMENT;",
           "If arg > 1 THEN"
               + "  result := CALL this WITH (arg-1);"
               + "ELSE"
               + "  result := 1;"
               + "ENDIF; conclude true;",
           "return result * arg;");
   ArdenValue[] result = mlm.run(new TestContext(), new ArdenValue[] {new ArdenNumber(10)});
   Assert.assertEquals(1, result.length);
   Assert.assertEquals("3628800", result[0].toString());
 }