# be present in the basic Exim binary which we require in order to run these
# tests at all. Specialized expansion tests also exist for optional features
# in other test scripts.
+munge dnssec
exim -be
reduce: ${reduce {<, 1,2,3}{0}{${eval:$value+$item}}}
reduce: ${reduce {3:0:9:4:6}{0}{${if >{$item}{$value}{$item}{$value}}}}
+listnamed: ${listnamed:dlist}
+listnamed: ${listnamed:+dlist}
+listnamed: ${listnamed:hlist}
+listnamed: ${listnamed:elist}
+listnamed: ${listnamed:flist}
+listnamed: ${listnamed:nolist}
+listnamed: ${listnamed_d:dlist}
+listnamed: ${listnamed_d:hlist}
+listnamed: ${listnamed_z:dlist}
+
+listcount: ${listcount:a:b:c}
+listcount: ${listcount:}
+listcount: ${listcount:<;a;b;c}
+listcount: ${listcount:${listnamed:dlist}}
+
# Tests with iscntrl() and illegal separators
map: ${map{<\n a\n\nb\nc}{'$item'}}
md5: ${if eq {1}{2}{${md5:invalid}}{NO}}
mask: ${if eq {1}{2}{${mask:invalid}}{NO}}
+# Number suffixes in conditions
+1k: ${if >{1}{1k}{n}{y}}
+1K: ${if >{1}{1K}{n}{y}}
+1M: ${if >{1}{1M}{n}{y}}
+1G: ${if >{1}{1G}{n}{y}}
+
# Numeric overflow
+# >32b should work, >64b not
4096M ${if >{1}{4096M}{y}{n}}
4096000000 ${if >{1}{4096000000}{y}{n}}
+4611686018427387904 ${if >{1}{4611686018427387904} {y}{n}}
+46116860184273879040 ${if >{1}{46116860184273879040}{y}{n}}
# Conditions
abcdea a ${tr{abcdea}{a}{}}
abcdea abc z ${tr{abcdea}{abc}{z}}
+# Boolean
+"TrUe" ${if bool{TrUe}{true}{false}} EXPECT: true
+"FALSE" ${if bool{FALSE}{true}{false}} EXPECT: false
+" yes" ${if bool{ yes}{true}{false}} EXPECT: true
+" no" ${if bool{ no}{true}{false}} EXPECT: false
+"yes " ${if bool{yes }{true}{false}} EXPECT: true
+"-1" ${if bool{-1}{true}{false}} EXPECT: error
+"0" ${if bool{0}{true}{false}} EXPECT: false
+"1" ${if bool{1}{true}{false}} EXPECT: true
+" 0 " ${if bool{ 0 }{true}{false}} EXPECT: false
+" 1 " ${if bool{ 1 }{true}{false}} EXPECT: true
+"1111111111111111111" ${if bool{1111111111111111111}{true}{false}} EXPECT: true
+"9" ${if bool{9}{true}{false}} EXPECT: true
+" " ${if bool{ }{true}{false}} EXPECT: false
+"text" ${if bool{text}{true}{false}} EXPECT: error
+" text" ${if bool{ text}{true}{false}} EXPECT: error
+"text " ${if bool{text }{true}{false}} EXPECT: error
+" text " ${if bool{ text }{true}{false}} EXPECT: error
+"00" ${if bool{00}{true}{false}} EXPECT: false
+"!true" ${if !bool{true}{true}{false}} EXPECT: false
+"!false" ${if !bool{false}{true}{false}} EXPECT: true
+
+"TrUe" ${if bool_lax{TrUe}{true}{false}} EXPECT: true
+"FALSE" ${if bool_lax{FALSE}{true}{false}} EXPECT: false
+" yes" ${if bool_lax{ yes}{true}{false}} EXPECT: true
+" no" ${if bool_lax{ no}{true}{false}} EXPECT: false
+"yes " ${if bool_lax{yes }{true}{false}} EXPECT: true
+"-1" ${if bool_lax{-1}{true}{false}} EXPECT: true
+"0" ${if bool_lax{0}{true}{false}} EXPECT: false
+"1" ${if bool_lax{1}{true}{false}} EXPECT: true
+" 0 " ${if bool_lax{ 0 }{true}{false}} EXPECT: false
+" 1 " ${if bool_lax{ 1 }{true}{false}} EXPECT: true
+"1111111111111111111" ${if bool_lax{1111111111111111111}{true}{false}} EXPECT: true
+"9" ${if bool_lax{9}{true}{false}} EXPECT: true
+" " ${if bool_lax{ }{true}{false}} EXPECT: false
+"text" ${if bool_lax{text}{true}{false}} EXPECT: true
+" text" ${if bool_lax{ text}{true}{false}} EXPECT: true
+"text " ${if bool_lax{text }{true}{false}} EXPECT: true
+" text " ${if bool_lax{ text }{true}{false}} EXPECT: true
+"00" ${if bool_lax{00}{true}{false}} EXPECT: true
+"!true" ${if !bool_lax{true}{true}{false}} EXPECT: false
+"!false" ${if !bool_lax{false}{true}{false}} EXPECT: true
+
# RFC 2047
abcd ${rfc2047:abcd}