Files
n8n-openai-adapter/test/erlang/operators_test.erl
T
2011-06-24 10:36:06 -03:00

255 lines
10 KiB
Erlang

-module(operators_test).
-include("elixir.hrl").
-include_lib("eunit/include/eunit.hrl").
% Booleans
booleans_test() ->
{nil, _} = elixir:eval("nil"),
{true, _} = elixir:eval("true"),
{false, _} = elixir:eval("false").
if_test() ->
{1, _} = elixir:eval("if true; 1; end"),
{nil, _} = elixir:eval("if false; 1; end"),
{2, _} = elixir:eval("if false; 1; else 2; end"),
{2, _} = elixir:eval("if false; 1; else; 2; end"),
{3, _} = elixir:eval("if false; 1; elsif true; 3; else; 2; end"),
{3, _} = elixir:eval("if false\n 1\n elsif true\n 3\n else\n 2\n end"),
{3, _} = elixir:eval("if false then 1 elsif true then 3 else 2 end").
unless_test() ->
{1, _} = elixir:eval("unless false; 1; end"),
{nil, _} = elixir:eval("unless true; 1; end"),
{2, _} = elixir:eval("unless true; 1; else 2; end"),
{2, _} = elixir:eval("unless true; 1; else; 2; end"),
{3, _} = elixir:eval("unless true; 1; elsif true; 3; else; 2; end").
vars_if_test() ->
F = fun() ->
{1, [{foo,1}]} = elixir:eval("if foo = 1; true; else; false; end; foo"),
elixir:eval("module Bar\ndef foo; 1; end\ndef bar(x); if x; foo = 2; else; foo = foo; end; foo; end\nend"),
{1, _} = elixir:eval("Bar.bar(false)"),
{2, _} = elixir:eval("Bar.bar(true)")
end,
test_helper:run_and_remove(F, ['Bar']).
multi_assigned_if_test() ->
{3, _} = elixir:eval("x = 1\nif true\nx = 2\nx = 3\nelse true\nend\nx"),
{3, _} = elixir:eval("x = 1\nif true\n\~x = 1\nx = 2\nx = 3\nelse true\nend\nx"),
{1, _} = elixir:eval("if true\nx = 1\nelse true\nend\nx"),
{nil, _} = elixir:eval("if false\nx = 1\nelse true\nend\nx").
case_test() ->
{true, _} = elixir:eval("case 1 match 2 then false match 1 then true end"),
{true, [{x,1}]} = elixir:eval("case 1 match {x,y} then false match x then true end"),
{true, [{x,1},{y,2}]} = elixir:eval("case {1,2} match {x,y} then true match {1,x} then false end"),
{true, [{x,1},{y,2}]} = elixir:eval("case {1,2} match {x,y}\ntrue\nmatch {1,x}\nfalse\nend"),
{true, _} = elixir:eval("case {1,2} match {3,4}\nfalse\nelse true\nend"),
{true, _} = elixir:eval("case {1,2} match {3,4}, {1,2}\ntrue\nend").
multi_assigned_case_test() ->
{3, _} = elixir:eval("x = 1\ncase true match true\nx = 2\nx = 3\nelse true\nend\nx"),
{3, _} = elixir:eval("x = 1\ncase 1 match \~x\nx = 2\nx = 3\nelse true\nend\nx"),
{1, _} = elixir:eval("case true match true\nx = 1\nelse true\nend\nx"),
{nil, _} = elixir:eval("case true match false\nx = 1\nelse true\nend\nx").
vars_case_test() ->
F = fun() ->
elixir:eval("module Bar\ndef foo; 1; end\ndef bar(x); case x match true then foo = 2 match false then foo = foo end; foo; end\nend"),
{1, _} = elixir:eval("Bar.bar(false)"),
{2, _} = elixir:eval("Bar.bar(true)"),
elixir:eval("module Baz\ndef foo; 1; end\ndef bar(x); case x match {foo,2} then \~foo = 2 match false then foo = foo end; foo; end\nend"),
{1, _} = elixir:eval("Baz.bar(false)"),
{2, _} = elixir:eval("Baz.bar({2, 2})"),
?assertError({badmatch, 2}, elixir:eval("Baz.bar({1, 2})"))
end,
test_helper:run_and_remove(F, ['Bar', 'Baz']).
%% Comparison
equal_test() ->
{true,_} = elixir:eval("'a == 'a"),
{true,_} = elixir:eval("1 == 1"),
{true,_} = elixir:eval("~q(a) == ~q(a)"),
{true,_} = elixir:eval("{1,2} == {1,2}"),
{true,_} = elixir:eval("[1,2] == [1,2]"),
{false,_} = elixir:eval("'a == 'b"),
{false,_} = elixir:eval("1 == 2"),
{false,_} = elixir:eval("~q(a) == ~q(b)"),
{false,_} = elixir:eval("{1,2} == {1,3}"),
{false,_} = elixir:eval("[1,2] == [1,3]").
not_equal_test() ->
{false,_} = elixir:eval("'a != 'a"),
{false,_} = elixir:eval("1 != 1"),
{false,_} = elixir:eval("~q(a) != ~q(a)"),
{false,_} = elixir:eval("{1,2} != {1,2}"),
{false,_} = elixir:eval("[1,2] != [1,2]"),
{true,_} = elixir:eval("'a != 'b"),
{true,_} = elixir:eval("1 != 2"),
{true,_} = elixir:eval("~q(a) != ~q(b)"),
{true,_} = elixir:eval("{1,2} != {1,3}"),
{true,_} = elixir:eval("[1,2] != [1,3]").
not_exclamation_mark_test() ->
{false,_} = elixir:eval("!'a"),
{false,_} = elixir:eval("!true"),
{false,_} = elixir:eval("!1"),
{false,_} = elixir:eval("![]"),
{true,_} = elixir:eval("!nil"),
{true,_} = elixir:eval("!false").
notnot_exclamation_mark_test() ->
{true,_} = elixir:eval("!!'a"),
{true,_} = elixir:eval("!!true"),
{true,_} = elixir:eval("!!1"),
{true,_} = elixir:eval("!![]"),
{false,_} = elixir:eval("!!nil"),
{false,_} = elixir:eval("!!false").
less_greater_test() ->
{true,_} = elixir:eval("1 < 2"),
{true,_} = elixir:eval("1 < 'a"),
{false,_} = elixir:eval("1 < 1.0"),
{false,_} = elixir:eval("1 < 1"),
{true,_} = elixir:eval("1 <= 1.0"),
{true,_} = elixir:eval("1 <= 1"),
{true,_} = elixir:eval("1 <= 'a"),
{false,_} = elixir:eval("1 > 2"),
{false,_} = elixir:eval("1 > 'a"),
{false,_} = elixir:eval("1 > 1.0"),
{false,_} = elixir:eval("1 > 1"),
{true,_} = elixir:eval("1 >= 1.0"),
{true,_} = elixir:eval("1 >= 1"),
{false,_} = elixir:eval("1 >= 'a").
integer_and_float_test() ->
{true,_} = elixir:eval("1 == 1"),
{false,_} = elixir:eval("1 != 1"),
{true,_} = elixir:eval("1 == 1.0"),
{false,_} = elixir:eval("1 != 1.0"),
{true,_} = elixir:eval("1 =:= 1"),
{false,_} = elixir:eval("1 =!= 1"),
{false,_} = elixir:eval("1 =:= 1.0"),
{true,_} = elixir:eval("1 =!= 1.0").
and_test() ->
F = fun() ->
elixir:eval("module Bar\ndef foo; true; end\ndef bar; false; end\ndef baz(x); x==1; end\nend"),
{true, _} = elixir:eval("true and true"),
{false, _} = elixir:eval("true and false"),
{false, _} = elixir:eval("false and true"),
{false, _} = elixir:eval("false and false"),
{true, _} = elixir:eval("Bar.foo and Bar.foo"),
{false, _} = elixir:eval("Bar.foo and Bar.bar"),
{true, _} = elixir:eval("Bar.foo and Bar.baz 1"),
{false, _} = elixir:eval("Bar.foo and Bar.baz 2"),
{true, _} = elixir:eval("1 == 1 and 2 < 3"),
{true, _} = elixir:eval("false and false or true"),
?assertError(badarg, elixir:eval("1 and 2"))
end,
test_helper:run_and_remove(F, ['Bar']).
or_test() ->
F = fun() ->
elixir:eval("module Bar\ndef foo; true; end\ndef bar; false; end\ndef baz(x); x==1; end\nend"),
{true, _} = elixir:eval("true or true"),
{true, _} = elixir:eval("true or false"),
{true, _} = elixir:eval("false or true"),
{false, _} = elixir:eval("false or false"),
{true, _} = elixir:eval("Bar.foo or Bar.foo"),
{true, _} = elixir:eval("Bar.foo or Bar.bar"),
{false, _} = elixir:eval("Bar.bar or Bar.bar"),
{true, _} = elixir:eval("Bar.bar or Bar.baz 1"),
{false, _} = elixir:eval("Bar.bar or Bar.baz 2"),
?assertError(badarg, elixir:eval("1 or 2"))
end,
test_helper:run_and_remove(F, ['Bar']).
andalso_test() ->
F = fun() ->
elixir:eval("module Bar\ndef foo; true; end\ndef bar; false; end\ndef baz(x); x==1; end\nend"),
{true, _} = elixir:eval("true andalso true"),
{false, _} = elixir:eval("true andalso false"),
{false, _} = elixir:eval("false andalso true"),
{false, _} = elixir:eval("false andalso false"),
{true, _} = elixir:eval("Bar.foo andalso Bar.foo"),
{false, _} = elixir:eval("Bar.foo andalso Bar.bar"),
{true, _} = elixir:eval("Bar.foo andalso Bar.baz 1"),
{false, _} = elixir:eval("Bar.foo andalso Bar.baz 2"),
{true, _} = elixir:eval("false andalso false orelse true"),
{3, _} = elixir:eval("Bar.foo andalso 1 + 2"),
{false, _} = elixir:eval("Bar.bar andalso Erlang.error('bad)"),
?assertError({badarg, 1}, elixir:eval("1 andalso 2"))
end,
test_helper:run_and_remove(F, ['Bar']).
orelse_test() ->
F = fun() ->
elixir:eval("module Bar\ndef foo; true; end\ndef bar; false; end\ndef baz(x); x==1; end\nend"),
{true, _} = elixir:eval("true orelse true"),
{true, _} = elixir:eval("true orelse false"),
{true, _} = elixir:eval("false orelse true"),
{false, _} = elixir:eval("false orelse false"),
{true, _} = elixir:eval("Bar.foo orelse Bar.foo"),
{true, _} = elixir:eval("Bar.foo orelse Bar.bar"),
{false, _} = elixir:eval("Bar.bar orelse Bar.bar"),
{true, _} = elixir:eval("Bar.bar orelse Bar.baz 1"),
{false, _} = elixir:eval("Bar.bar orelse Bar.baz 2"),
{3, _} = elixir:eval("Bar.bar orelse 1 + 2"),
{true, _} = elixir:eval("Bar.foo orelse Erlang.error('bad)"),
?assertError({badarg, 1}, elixir:eval("1 orelse 2"))
end,
test_helper:run_and_remove(F, ['Bar']).
not_test() ->
{false, _} = elixir:eval("not true"),
{true, _} = elixir:eval("not false"),
?assertError(badarg, elixir:eval("not 1")).
andand_test() ->
F = fun() ->
elixir:eval("module Bar\ndef foo; true; end\ndef bar; false; end\ndef baz(x); x==1; end\nend"),
{true, _} = elixir:eval("true && true"),
{false, _} = elixir:eval("true && false"),
{false, _} = elixir:eval("false && true"),
{false, _} = elixir:eval("false && false"),
{true, _} = elixir:eval("Bar.foo && Bar.foo"),
{false, _} = elixir:eval("Bar.foo && Bar.bar"),
{true, _} = elixir:eval("Bar.foo && Bar.baz 1"),
{false, _} = elixir:eval("Bar.foo && Bar.baz 2"),
{true, _} = elixir:eval("1 == 1 && 2 < 3"),
{3, _} = elixir:eval("Bar.foo && 1 + 2"),
{false, _} = elixir:eval("Bar.bar && Erlang.error('bad)"),
{2, _} = elixir:eval("1 && 2"),
{nil, _} = elixir:eval("nil && 2"),
{false, _} = elixir:eval("false && false or true")
end,
test_helper:run_and_remove(F, ['Bar']).
oror_test() ->
F = fun() ->
elixir:eval("module Bar\ndef foo; true; end\ndef bar; false; end\ndef baz(x); x==1; end\nend"),
{true, _} = elixir:eval("true || true"),
{true, _} = elixir:eval("true || false"),
{true, _} = elixir:eval("false || true"),
{false, _} = elixir:eval("false || false"),
{true, _} = elixir:eval("Bar.foo || Bar.foo"),
{true, _} = elixir:eval("Bar.foo || Bar.bar"),
{false, _} = elixir:eval("Bar.bar || Bar.bar"),
{true, _} = elixir:eval("Bar.bar || Bar.baz 1"),
{false, _} = elixir:eval("Bar.bar || Bar.baz 2"),
{false, _} = elixir:eval("1 == 2 || 2 > 3"),
{3, _} = elixir:eval("Bar.bar || 1 + 2"),
{true, _} = elixir:eval("Bar.foo || Erlang.error('bad)"),
{1, _} = elixir:eval("1 || 2"),
{2, _} = elixir:eval("nil || 2"),
{true, _} = elixir:eval("false && false || true")
end,
test_helper:run_and_remove(F, ['Bar']).
begin_test() ->
{1,_} = elixir:eval("begin 1 end"),
{1,[{x,1}]} = elixir:eval("begin\nx=1\nend\nx"),
{1,[{x,1}]} = elixir:eval("begin;x=1;end;x").