lytlang/test/lytlang_test.exs

75 lines
1.5 KiB
Elixir

defmodule LytlangTest do
use ExUnit.Case, async: false
doctest Lytlang
test "arithmetic" do
[
{"2", 2},
{"1 + 2", 3},
{"2 + 3 + 8", 13},
{"(2 + 3) * 8", 40},
{"2 * 3 + 8", 14},
{"2 + 3 * 8", 26},
{"2 * (3 + 8)", 22},
{"2 + (3 * 8)", 26},
{"8 - 3", 5},
{"8 / 4", 2.0},
{"8 // 4", 2},
{"a = 8\na + 9", 17},
{"a_number = 8\na_number + 9", 17},
{"2 + 3", 5}
]
|> Enum.map(fn {string, val} ->
assert Lytlang.eval(string) == val
end)
end
test "lists" do
[
{"[]", []},
{"[2]", [2]},
{"[2, 3]", [2, 3]},
{"[2, [3, 4], [5, [6, [7]]]]", [2, [3, 4], [5, [6, [7]]]]},
{"[2, 3, 4, 5, 6, 7]", [2, 3, 4, 5, 6, 7]}
]
|> Enum.map(fn {string, val} ->
assert Lytlang.eval(string) == val
end)
end
test "tuples" do
[
{"<>", {}},
{"<2>", {2}},
{"<2, 3>", {2, 3}},
{"<2, <3, 4>, <5, <6, <7>>>>", {2, {3, 4}, {5, {6, {7}}}}},
{"<2, 3, 4, 5, 6, 7>", {2, 3, 4, 5, 6, 7}}
]
|> Enum.map(fn {string, val} ->
assert Lytlang.eval(string) == val
end)
end
test "strings" do
[
{"\"\"", ""},
{"\"abcd\"", "abcd"}
]
|> Enum.map(fn {string, val} ->
assert Lytlang.eval(string) == val
end)
end
test "maps" do
[
{"{}", %{}},
{"{x : 9}", %{:x => 9}},
{"{x : 9}", %{x: 9}},
{"{x: 9}", %{x: 9}}
]
|> Enum.map(fn {string, val} ->
assert Lytlang.eval(string) == val
end)
end
end