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