74 lines
1.5 KiB
Elixir
74 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
|