Enabled Feed Tests and Added External Library tests
Feed tests had been switched off for a while due to having too many
sporadic failures. Now, we are switching them back on.
In addition, a new set of tests have been added to test that external
library works as expected.
Change-Id: Idd1fccd136fa2645b2707bbf7c04e60991ae8d4a
Reviewed-on: https://asterix-gerrit.ics.uci.edu/625
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: abdullah alamoudi <bamousaa@gmail.com>
diff --git a/asterix-external-data/src/test/resources/functional_tests.txt b/asterix-external-data/src/test/resources/functional_tests.txt
new file mode 100644
index 0000000..42c0e95
--- /dev/null
+++ b/asterix-external-data/src/test/resources/functional_tests.txt
@@ -0,0 +1,362 @@
+/////////////////////////////////
+echo Testing basic math...
+eval x = (1 + 2)
+same $x, 3
+eval x = (3 - 1)
+same $x, 2
+eval x = (2 * 3)
+same $x, 6
+eval x = (8 / 2)
+same $x, 4
+
+echo Testing extreme numbers...
+same string(real("INF")), "real(\"INF\")"
+same string(real("-INF")), "real(\"-INF\")"
+same string(real("NaN")), "real(\"NaN\")"
+diff real("NaN"), real("NaN")
+same real("INF"), real("INF")
+same real("-INF"), real("-INF")
+diff real("INF"), real("-INF")
+same 0.0, -(0.0)
+same 0.0, real("-0.0")
+same string(0.0), "0.0"
+same string(-0.0), "-0.0"
+
+/////////////////////////////////
+echo Testing basic attributes in a ClassAd...
+eval x = [
+ a = 1;
+ b = 2.0;
+ c = "alain";
+ d = true;
+ atime = absTime("2004-01-01");
+ rtime = relTime("2+25:14:16.123");
+ l = {1, 1, 2, 3, 5};
+ e = error;
+ u = undefined;
+ ]
+same $x.a, 1
+same $x.b, 2.0
+same $x.c, "alain"
+same $x.d, true
+same $x.atime, absTime("2004-01-01");
+same $x.rtime, relTime("2+25:14:16.123");
+same $x.l, {1, 1, 2, 3, 5}
+same $x.l[4], 5
+same $x.e, error
+same $x.u, undefined
+same isinteger($x.a), true
+same isinteger($x.b), false
+same isreal($x.b), true
+same isreal($x.c), false
+same isstring($x.c), true
+same isstring($x.d), false
+same isboolean($x.d), true
+same isboolean($x.c), false
+same isabstime($x.atime), true
+same isabstime($x.rtime), false
+same isreltime($x.rtime), true
+same isreltime($x.atime), false
+same islist($x.l), true
+same islist($x.a), false
+same iserror($x.e), true
+same iserror($x.u), false
+same isundefined($x.u), true
+same isundefined($x.e), false
+
+// Note that testing XML relies on the ClassAd from
+// the above testing.
+// echo Testing XML...
+// eval y = [ a = 2; b = "Lisp rocks"; ]
+// writexml tmp.xml {$x, $y}
+// readxml z tmp.xml
+// same $x, $z[0]
+// same $y, $z[1]
+
+/////////////////////////////////
+echo Testing select on lists...
+eval x = {
+ [a = 3; b = "I see London"],
+ [a = 2; b = "I see France"],
+ [a = 1; b = "I see Alain's funky pants"]
+ }
+same $x.a, {3, 2, 1}
+same $x.b, {"I see London", "I see France", "I see Alain's funky pants"}
+same $x.c, {undefined, undefined, undefined}
+same {}.a, {}
+
+/////////////////////////////////
+echo Testing subscripts
+eval x = [
+ a = 3;
+ b = "alain";
+ ab = 4;
+ ]
+same $x["a"], 3
+same $x["b"], "alain"
+same $x["c"], error
+eval d = $x["c"]
+same $x[strcat("a", "b")], 4
+eval x = {"a", "b", "c"}
+same $x[0], "a"
+same $x[1], "b"
+same $x[2], "c"
+same $x[3], error
+
+/////////////////////////////////
+echo Testing multiple semicolons...
+eval x = [
+ ;;
+ a = 3;;
+ b = 4;;
+ ]
+
+/////////////////////////////////
+echo Testing functions...
+same int(3), 3
+same int(3.9), 3
+same int("3.9"), 3
+same int(absTime("1970-01-01T:00:00:01Z")), 1
+same int(reltime("01:00:01")), 3601
+eval y = int(absTime("1970-01-01T:00:00:01Z"))
+same $y, 1
+
+same real(3), 3.0
+same real(3.9), 3.9
+same real("3.9"), 3.9
+same real(absTime("1970-01-01T:00:00:01Z")), 1.0
+same real(reltime("01:00:01")), 3601.0
+
+same string("alain"), "alain"
+same string(1), "1"
+
+same floor(3.9), 3
+same floor("3.9"), 3
+
+same ceiling(3.9), 4
+same ceiling("3.9"), 4
+
+same round(3.1), 3
+same round(3.9), 4
+
+same strcat("", "roy"), "roy"
+same strcat("alain", ""), "alain"
+same strcat("alain", "roy"), "alainroy"
+same strcat(14, " bottles of root beer"), "14 bottles of root beer"
+
+same substr("abcde", 1), "bcde"
+same substr("abcde", 4), "e"
+same substr("abcde", 5), ""
+same substr("abcde", 1, 2), "bc"
+same substr("abcde", 4, 2), "e"
+
+same strcmp("alain", "roy") < 0, true
+same strcmp("roy", "alain") > 0, true
+same strcmp("alain", "alain"), 0
+
+same stricmp("alain", "ALAIN"), 0
+same stricmp("alain", "roy") < 0, true
+
+same tolower("ALAIN"), "alain")
+same toupper("alain"), "ALAIN")
+same tolower(true), "true")
+same toupper(true), "TRUE")
+
+same member(1, {1, 2, 3}), true
+same member(4, {1, 2, 3}), false
+
+same regexp("Alain.*Roy", "Alain Aslag Roy"), true
+same regexp("alain.*roy", "Alain Aslag Roy"), false
+same regexp("alain.*roy", "Alain Aslag Roy", "i"), true
+
+//same regexpMember("b.*", {}), false
+//same regexpMember("b.*", {"aa"}), false
+//same regexpMember("b.*", {"aa", "bb"}), true
+//same regexpMember("b.*", {"bb", "aa"}), true
+//same regexpMember("b.*", {1, "bb"} ), error
+
+
+eval t = absTime("1970-01-02T:03:04:05Z")
+same splitTime($t).year, 1970
+same splitTime($t).month, 1
+same splitTime($t).day, 2
+same splitTime($t).hours, 3
+same splitTime($t).minutes, 4
+same splitTime($t).seconds, 5
+same splitTime($t).offset, 0
+
+
+
+eval t = absTime("1970-01-02T:03:04:05-06:00")
+eval tt = splitTime($t)
+same splitTime($t).year, 1970
+same splitTime($t).month, 1
+same splitTime($t).day, 2
+same splitTime($t).hours, 3
+same splitTime($t).minutes, 4
+same splitTime($t).seconds, 5
+same splitTime($t).offset, -21600
+
+
+
+eval t = relTime("1d2h3m4.5s")
+eval tt = splitTime($t)
+same splitTime($t).days, 1
+same splitTime($t).hours, 2
+same splitTime($t).minutes, 3
+same splittime($t).seconds, 4.5
+eval tt = splitTime($t)
+
+
+eval t = absTime("1997-08-30T16:04:05-0500")
+eval f = formatTime($t, "%m %d %Y")
+same $f, "08 30 1997"
+eval f = formatTime($t, "%H %M %S")
+same $f, "16 04 05"
+eval f = formatTime($t, "%A %a")
+same $f, "Saturday Sat"
+eval f = formatTime($t, "%B %b")
+same $f, "August Aug"
+eval f = formatTime(splitTime($t), "%H:%M:%S")
+same $f, "16:04:05"
+eval f = formatTime($t)
+same $f, "Sat Aug 30 16:04:05 1997"
+
+same size({}), 0
+same size({1}), 1
+same size({1, 2, 3, 4, 5}), 5
+same size([]), 0
+same size([a = 1;]), 1
+same size([a = 1; b = 2;]), 2
+same size(""), 0
+same size("a"), 1
+same size("ab"), 2
+same size(3), error
+same size(3.4), error
+
+eval list0 = {}
+eval list1 = {1}
+eval list5 = {1, 2, 3, 4, 5}
+
+same sum($list0), undefined
+same avg($list0), undefined
+same min($list0), undefined
+same max($list0), undefined
+// #### Do we really want these to be false and true?
+same anycompare("<", $list0, 3), false
+same allcompare("<", $list0, 3), true
+
+same sum($list1), 1
+same avg($list1), 1.0
+same min($list1), 1
+same max($list1), 1
+same anycompare("<", $list1, 3), true
+same allcompare("<", $list1, 3), true
+
+same sum($list5), 15
+same avg($list5), 3.0
+same min($list5), 1
+same max($list5), 5
+same anycompare("<", $list5, 3), true
+same allcompare("<", $list5, 3), false
+
+same ifThenElse(1+1==2, 3, 4), 3
+same ifThenElse(1+1==3,3,4), 4
+same ifThenElse(ERROR,3,4), ERROR
+same ifThenElse(UNDEFINED,3,4), UNDEFINED
+
+same interval(1), "1"
+same interval(60*2 + 1), "2:01"
+same interval(3600*3 + 60*2 + 1), "3:02:01"
+same interval(3600*24*4 + 3600*3 + 60*2 + 1), "4+03:02:01"
+
+//same regexps("[abc]*([def]*)[ghi]*","aaaabbbbcccccdddeeefffggghhhiii","\\1"), "dddeeefff"
+//same regexps("[abc]*([def]*)[ghi]*","abcdefghi","\\0"), "abcdefghi"
+//same regexps("[abc]*([def]*)[ghi]*","abcdefghi","\\2"), error
+//same regexps("[abc]*([def]*)[ghi]*","NO","\\0"), ""
+
+
+echo Testing eval
+same eval("1+1"), 2
+same eval(1+1), 2
+same eval("1+"), ERROR
+eval x = [ A = 1; B = 2; C = eval("A+B"); ]
+same $x.C, 3
+
+echo Testing boolean expressions
+echo Testing && operator
+same false, false && false
+same false, false && undefined
+same false, false && true
+same false, false && error
+
+same false, undefined && false
+same undefined, undefined && undefined
+same undefined, undefined && true
+same error, undefined && error
+
+same false, true && false
+same undefined, true && undefined
+same true, true && true
+same error, true && error
+
+same error, error && false
+same error, error && undefined
+same error, error && true
+same error, error && error
+
+
+echo Testing || operator
+same false, false || false
+same undefined, false || undefined
+same true, false || true
+same error, false || error
+
+same undefined, undefined || false
+same undefined, undefined || undefined
+same true, undefined || true
+same error, undefined || error
+
+same true, true || false
+same true, true || undefined
+same true, true || true
+same true, true || error
+
+same error, error || false
+same error, error || undefined
+same error, error || true
+same error, error || error
+
+
+echo Testing ! operator
+same true, !false
+same undefined, !undefined
+same false, !true
+same error, !error
+
+
+echo Testing ? operator
+same false, false ? true : false
+same true, false ? false : true
+same undefined, false ? true : undefined
+same true, false ? undefined : true
+
+same true, true ? true : false
+same false, true ? false : true
+same true, true ? true : undefined
+same undefined, true ? undefined : true
+
+echo Testing characters with negative ascii values
+// # the following used to not even parse on some systems
+same "–", "–"
+
+echo Testing stringListsIntersect()
+same true, stringListsIntersect("one,two","two,three")
+same false, stringListsIntersect("one,two","three,four")
+same false, stringListsIntersect("one,two","three,four",";")
+same true, stringListsIntersect("one,two","one")
+same true, stringListsIntersect("one, two","two, three")
+same true, stringListsIntersect("one,two","two,three",",")
+same true, stringListsIntersect("one;two","two;three",";")
+same undefined, stringListsIntersect("one,two",undefined)
+same undefined, stringListsIntersect(undefined,"one,two" )