towerops/test/towerops/numeric_test.exs

81 lines
2.4 KiB
Elixir

defmodule Towerops.NumericTest do
use ExUnit.Case, async: true
alias Towerops.Numeric
describe "parse_integer/1" do
test "returns {:ok, int} for integer" do
assert {:ok, 42} = Numeric.parse_integer(42)
assert {:ok, 0} = Numeric.parse_integer(0)
assert {:ok, -5} = Numeric.parse_integer(-5)
end
test "returns {:ok, int} for integer string" do
assert {:ok, 42} = Numeric.parse_integer("42")
assert {:ok, -5} = Numeric.parse_integer("-5")
end
test "parses integer from string with trailing non-numeric" do
assert {:ok, 42} = Numeric.parse_integer("42abc")
end
test "returns :error for unparseable string" do
assert :error = Numeric.parse_integer("abc")
end
test "returns :error for empty string" do
assert :error = Numeric.parse_integer("")
end
test "returns :error for null string" do
assert :error = Numeric.parse_integer("null")
end
test "returns :error for non-integer types" do
assert :error = Numeric.parse_integer(nil)
assert :error = Numeric.parse_integer(:atom)
assert :error = Numeric.parse_integer([1, 2, 3])
assert :error = Numeric.parse_integer(%{})
assert :error = Numeric.parse_integer(3.14)
end
end
describe "parse_float/1" do
test "returns {:ok, float} for float" do
assert {:ok, 4.2} = Numeric.parse_float(4.2)
assert {:ok, +0.0} = Numeric.parse_float(0.0)
end
test "returns {:ok, float} for integer (converted)" do
assert {:ok, 42.0} = Numeric.parse_float(42)
assert {:ok, +0.0} = Numeric.parse_float(0)
end
test "returns {:ok, float} for float string" do
assert {:ok, 4.2} = Numeric.parse_float("4.2")
assert {:ok, -3.14} = Numeric.parse_float("-3.14")
end
test "returns {:ok, float} for integer string" do
assert {:ok, 42.0} = Numeric.parse_float("42")
end
test "returns :error for unparseable string" do
assert :error = Numeric.parse_float("abc")
end
test "returns :error for empty string" do
assert :error = Numeric.parse_float("")
end
test "returns :error for null string" do
assert :error = Numeric.parse_float("null")
end
test "returns :error for non-numeric types" do
assert :error = Numeric.parse_float(nil)
assert :error = Numeric.parse_float(:atom)
assert :error = Numeric.parse_float([1, 2, 3])
end
end
end