81 lines
2.4 KiB
Elixir
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
|