Current section
Files
Jump to
Current section
Files
test/droll_test.exs
defmodule DrollTest do
use ExUnit.Case
doctest Droll
describe "parse/1" do
test "num dice" do
assert Droll.parse("d6") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 6, modifier: 0, operation: :+}}
assert Droll.parse("1d6") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 6, modifier: 0, operation: :+}}
assert Droll.parse("10d6") ==
{:ok, %Droll.Formula{num_dice: 10, num_sides: 6, modifier: 0, operation: :+}}
assert Droll.parse("100d6") ==
{:ok, %Droll.Formula{num_dice: 100, num_sides: 6, modifier: 0, operation: :+}}
end
test "num sides" do
assert Droll.parse("d6") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 6, modifier: 0, operation: :+}}
assert Droll.parse("d60") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 60, modifier: 0, operation: :+}}
assert Droll.parse("d600") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 600, modifier: 0, operation: :+}}
end
test "no modifier" do
assert Droll.parse("d20") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 0, operation: :+}}
assert Droll.parse("2d20") ==
{:ok, %Droll.Formula{num_dice: 2, num_sides: 20, modifier: 0, operation: :+}}
end
test "addition modifier" do
assert Droll.parse("d20") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 0, operation: :+}}
assert Droll.parse("d20+1") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 1, operation: :+}}
assert Droll.parse("d20+5") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 5, operation: :+}}
end
test "subtraction modifier" do
assert Droll.parse("d20-1") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 1, operation: :-}}
assert Droll.parse("d20-5") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 5, operation: :-}}
end
test "multiplication modifier" do
assert Droll.parse("d20x1") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 1, operation: :x}}
assert Droll.parse("d20x5") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 5, operation: :x}}
end
test "division modifier" do
assert Droll.parse("d20/1") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 1, operation: :/}}
assert Droll.parse("d20/5") ==
{:ok, %Droll.Formula{num_dice: 1, num_sides: 20, modifier: 5, operation: :/}}
end
end
describe "errors" do
test "no input" do
assert Droll.parse("") == {:error, "could not decode formula"}
end
test "invalid input" do
assert Droll.parse("asdf") == {:error, "could not decode formula. unexpected input: 'a'"}
end
test "syntax error" do
assert Droll.parse("1dd") == {:error, "could not decode formula"}
assert Droll.parse("1d10++") == {:error, "could not decode formula"}
assert Droll.parse("d") == {:error, "could not decode formula"}
end
end
end