X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flanguage%2Fexpressions%2Fevaluate.at;h=15641d6073f5ae39e1d7d4b54cdf06d82f34fd1d;hb=b39ac1bb6b18a5fa595c6bcbd4ce67e904d56dc5;hp=e56a3a457e53c46d4a6905d95c8521c355891556;hpb=9ade26c8349b4434008c46cf09bc7473ec743972;p=pspp diff --git a/tests/language/expressions/evaluate.at b/tests/language/expressions/evaluate.at index e56a3a457e..15641d6073 100644 --- a/tests/language/expressions/evaluate.at +++ b/tests/language/expressions/evaluate.at @@ -3,12 +3,13 @@ m4_define([CHECK_EXPR_EVAL], AT_DATA([evaluate.sps], [set mxwarn 1000. set mxerr 1000. +set epoch 1940. m4_foreach([check], [m4_shift($@)], [DEBUG EVALUATE NOOPT m4_argn(4, check)/[]m4_car(check). DEBUG EVALUATE m4_argn(4, check)/[]m4_car(check). ])]) AT_CAPTURE_FILE([evaluate.sps]) - m4_pushdef([i], [2]) + m4_pushdef([i], [3]) AT_CHECK([pspp --testing-mode --error-file=- --no-output evaluate.sps], [m4_if(m4_bregexp([m4_foreach([check], [m4_shift($@)], [m4_argn(3, check)])], [error:]), [-1], [0], [1])], [stdout]) @@ -333,15 +334,37 @@ CHECK_EXPR_EVAL([exp lg10 ln sqrt abs mod mod10 rnd trunc], [[rnd(5.6)], [6.00]], [[rnd(-5.4)], [-5.00]], [[rnd(-5.6)], [-6.00]], + [[rnd(5.56, .1)], [5.60]], + [[rnd(-5.56, .1)], [-5.60]], + [[rnd(.5)], [1.00]], + [[rnd(.5 - 2**-53)], [1.00]], + [[rnd(.5 - 2**-52)], [1.00]], + [[rnd(.5 - 2**-51)], [1.00]], + [[rnd(.5 - 2**-45)], [0.00]], + [[rnd(.5 - 2**-45, 1, 10)], [1.00]], [[rnd('x')], [error], - [error: DEBUG EVALUATE: Type mismatch invoking RND(number) as rnd(string).]], + [error: DEBUG EVALUATE: Function invocation rnd(string) does not match any known function. Candidates are: +RND(number) +RND(number, number) +RND(number, number, number).]], [[trunc(1.2)], [1.00]], [[trunc(1.9)], [1.00]], [[trunc(-1.2)], [-1.00]], [[trunc(-1.9)], [-1.00]], + [[trunc(5.06, .1)], [5.00]], + [[trunc(-5.06, .1)], [-5.00]], + [[trunc(1)], [1.00]], + [[trunc(1 - 2**-53)], [1.00]], + [[trunc(1 - 2**-52)], [1.00]], + [[trunc(1 - 2**-51)], [1.00]], + [[trunc(1 - 2**-45)], [0.00]], + [[trunc(1 - 2**-45, 1, 10)], [1.00]], [[trunc('x')], [error], - [error: DEBUG EVALUATE: Type mismatch invoking TRUNC(number) as trunc(string).]]) + [error: DEBUG EVALUATE: Function invocation trunc(string) does not match any known function. Candidates are: +TRUNC(number) +TRUNC(number, number) +TRUNC(number, number, number).]]) CHECK_EXPR_EVAL([acos arsin artan cos sin tan], [[acos(.5) / 3.14159 * 180], [60.00]], @@ -487,7 +510,7 @@ ANY(string, string[, string]...).]], [[any('a', 'a ', 'b', 'c')], [true]], [[any('b ', 'a', 'b', 'c')], [true]], [[any('c ', 'a', 'b', 'c ')], [true]], - [[any(a, 'b', 'c', 'd')], [error], + [[any(a10, 'b', 'c', 'd')], [error], [error: DEBUG EVALUATE: Function invocation any(format, string, string, string) does not match any known function. Candidates are: ANY(number, number[, number]...) ANY(string, string[, string]...).]], @@ -621,7 +644,7 @@ MIN(string[, string]...).]], [[min("1", "2")], ["1"]], [[min("1")], ["1"]]) -CHECK_EXPR_EVAL([cfvar mean sd sum variance], +CHECK_EXPR_EVAL([cfvar mean median sd sum variance], [[cfvar(1, 2, 3, 4, 5)], [0.53]], [[cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5)], [0.53]], [[cfvar(1, 2)], [0.47]], @@ -649,6 +672,25 @@ CHECK_EXPR_EVAL([cfvar mean sd sum variance], [[mean.4(1, 2, 3)], [error], [error: DEBUG EVALUATE: With MEAN(number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]], + [[median(1, 2, 3, 4, 5)], [3.00]], + [[median(2, 3, 4, 5, 1)], [3.00]], + [[median(2, 3, 4, 1, 5)], [3.00]], + [[median(2, 1, 4, 5, 3)], [3.00]], + [[median(1, 2, 3, 4)], [2.50]], + [[median(2, 3, 1, 4)], [2.50]], + [[median(2, 3, 4, 1)], [2.50]], + [[median(2, 1, 4, 3)], [2.50]], + [[median(1, $sysmis, 3, 4, 5)], [3.50]], + [[median(2, 3, 4, 5, $sysmis, 1)], [3.00]], + [[median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5)], [3.00]], + [[median(1, 2, 3)], [2.00]], + [[median(1)], [1.00]], + [[median(1, 2)], [1.50]], + [[median(1, 2, $sysmis)], [1.50]], + [[median(1, $sysmis, $sysmis)], [1.00]], + [[median($sysmis, $sysmis, $sysmis)], [sysmis]], + [[median.3(1, 2, $sysmis)], [sysmis]], + [[median.2(1, $sysmis)], [sysmis]], [[sd(1, 2, 3, 4, 5)], [1.58]], [[sd(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.58]], @@ -758,6 +800,7 @@ CHECK_EXPR_EVAL([concat index rindex length lower], [[rindex('abcbcde', 'abc', 1)], [5.00]], [[rindex('abcbcde', 'bccb', 2)], [4.00]], [[rindex('abcbcde', 'bcbc', 2)], [4.00]], + [[rindex('abcbcde', 'bcbc', 0)], [sysmis]], [[rindex('abcbcde', 'bcbc', $sysmis)], [sysmis]], [[rindex('abcbcde', 'bcbcg', 2)], [sysmis]], [[rindex('abcbcde', 'bcbcg', $sysmis)], [sysmis]], @@ -797,7 +840,22 @@ RINDEX(string, string, number).]], [[lower(1)], [error], [error: DEBUG EVALUATE: Type mismatch invoking LOWER(string) as lower(number).]]) -CHECK_EXPR_EVAL([lpad number ltrim lpad rtrim rpad string substr upcase], +CHECK_EXPR_EVAL([replace], + [[replace('banana', 'an', 'AN')], ["bANANa"]], + [[replace('banana', 'an', 'a')], ["baaa"]], + [[replace('banana', 'an', '')], ["ba"]], + [[replace('banana', 'na', '')], ["ba"]], + [[replace('banana', 'ba', 'BA')], ["BAnana"]], + [[replace('banana', 'na', 'xyzzy')], ["baxyzzyxyzzy"]], + [[replace('banana', 'an', 'xyzzy', 1)], ["bxyzzyana"]], + [[replace('banana', 'an', 'xyzzy', 1.5)], ["bxyzzyana"]], + [[replace('banana', 'bananana', 'xyzzy')], ["banana"]], + [[replace('banana', '', 'xyzzy')], ["banana"]], + [[replace('banana', 'ba', '', 0)], ["banana"]], + [[replace('banana', 'ba', '', -1)], ["banana"]], + [[replace('banana', 'ba', '', $sysmis)], ["banana"]]) + +CHECK_EXPR_EVAL([lpad number ltrim lpad rtrim rpad string strunc substr upcase], [[lpad('abc', -1)], [""]], [[lpad('abc', 0)], ["abc"]], [[lpad('abc', 2)], ["abc"]], @@ -953,6 +1011,29 @@ dnl E has a minimum width of 6 on output: [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(number, format).]], [[string(123, e6.0)], ["1E+002"]], + [[strunc('a c ', 9)], ["a c"]], + [[strunc('a c ', 7)], ["a c"]], + [[strunc('a c ', 6)], ["a c"]], + [[strunc('a c ', 5)], ["a c"]], + [[strunc('a c ', 4)], ["a c"]], + [[strunc('a c ', 3)], ["a c"]], + [[strunc('a c ', 2)], ["a"]], + [[strunc('a c ', 1)], ["a"]], + [[strunc('a c ', 0)], [""]], + [[strunc('a c ', -1)], [""]], + [[strunc('a c ', $sysmis)], [""]], + [[strunc(' abc ', 9)], [" abc"]], + [[strunc(' abc ', 8)], [" abc"]], + [[strunc(' abc ', 7)], [" abc"]], + [[strunc(' abc ', 6)], [" abc"]], + [[strunc(' abc ', 5)], [" abc"]], + [[strunc(' abc ', 4)], [" ab"]], + [[strunc(' abc ', 3)], [" a"]], + [[strunc(' abc ', 2)], [""]], + [[strunc(' abc ', 1)], [""]], + [[strunc(' abc ', -1)], [""]], + [[strunc(' abc ', $sysmis)], [""]], + [[substr('abcdefgh', -5)], [""]], [[substr('abcdefgh', 0)], [""]], [[substr('abcdefgh', 1)], ["abcdefgh"]], @@ -1740,7 +1821,42 @@ CHECK_EXPR_EVAL([datediff], [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters')], [222.00]], [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters')], [15.00]], [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters')], [16.00]], - [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters')], [11.00]]) + [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters')], [11.00]], + +dnl time of day is significant for DATEDIFF + [[datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days')], + [5.00]], + [[datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days')], + [4.00]], + [[datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks')], + [2.00]], + [[datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks')], + [1.00]], + [[datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months')], + [5.00]], + [[datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months')], + [4.00]], + [[datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years')], + [9.00]], + [[datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years')], + [8.00]], + + [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days')], + [-5.00]], + [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days')], + [-4.00]], + [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks')], + [-2.00]], + [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks')], + [-1.00]], + [[datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months')], + [-5.00]], + [[datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months')], + [-4.00]], + [[datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years')], + [-9.00]], + [[datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years')], + [-8.00]]) CHECK_EXPR_EVAL([datesum], dnl DATESUM with non-leap year @@ -1813,7 +1929,13 @@ dnl DATESUM with leap year [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648))], [0.04]], [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680))], [0.10]], [[ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768))], [-0.17]], - [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819))], [0.21]]) + [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819))], [0.21]], + +dnl DATESUM preserves time-of-day for units of days and longer. + [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'days') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [5.00]], + [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'weeks') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [35.00]], + [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'months') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [153.00]], + [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'years') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [1827.00]]) CHECK_EXPR_EVAL([miscellaneous], dnl These test values are from Applied Statistics, Algorithm AS 310.