diff --git a/lib/rdf/term.ex b/lib/rdf/term.ex index d2ce399..348b593 100644 --- a/lib/rdf/term.ex +++ b/lib/rdf/term.ex @@ -100,6 +100,12 @@ defimpl RDF.Term, for: Float do def coerce(term), do: RDF.Double.new(term) end +defimpl RDF.Term, for: Decimal do + def equal?(term1, term2), do: term1 == term2 + def equal_value?(term1, term2), do: RDF.Term.equal_value?(coerce(term1), term2) + def coerce(term), do: RDF.Decimal.new(term) +end + defimpl RDF.Term, for: DateTime do def equal?(term1, term2), do: term1 == term2 def equal_value?(term1, term2), do: RDF.Term.equal_value?(coerce(term1), term2) diff --git a/test/unit/equality_test.exs b/test/unit/equality_test.exs index 9ee6b99..271d7f7 100644 --- a/test/unit/equality_test.exs +++ b/test/unit/equality_test.exs @@ -2,7 +2,7 @@ defmodule RDF.EqualityTest do use RDF.Test.Case alias RDF.NS.XSD - + alias Decimal, as: D describe "RDF.IRI" do @term_equal_iris [ @@ -185,13 +185,17 @@ defmodule RDF.EqualityTest do @value_equal_numerics_by_coercion [ {RDF.integer(42), 42}, {RDF.integer(42), 42.0}, + {RDF.integer(42), D.new(42)}, {RDF.decimal(42), 42}, {RDF.decimal(3.14), 3.14}, + {RDF.decimal(3.14), D.new(3.14)}, {RDF.double(42), 42}, {RDF.double(3.14), 3.14}, + {RDF.double(3.14), D.new(3.14)}, ] @value_unequal_numerics_by_coercion [ {RDF.integer(3), 3.14}, + {RDF.integer(3), D.new(3.14)}, {RDF.double(3.14), 3}, {RDF.decimal(3.14), 3}, ] diff --git a/test/unit/term_test.exs b/test/unit/term_test.exs index be7c232..7924a5a 100644 --- a/test/unit/term_test.exs +++ b/test/unit/term_test.exs @@ -3,6 +3,8 @@ defmodule RDF.TermTest do doctest RDF.Term + alias Decimal, as: D + describe "coerce/1" do test "with RDF.IRI" do assert RDF.Term.coerce(~I) == ~I @@ -33,6 +35,10 @@ defmodule RDF.TermTest do assert RDF.Term.coerce(3.14) == RDF.double(3.14) end + test "with decimal" do + assert D.new(3.14) |> RDF.Term.coerce() == RDF.decimal(3.14) + end + test "with datetime" do assert DateTime.from_iso8601("2002-04-02T12:00:00+00:00") |> elem(1) |> RDF.Term.coerce() == DateTime.from_iso8601("2002-04-02T12:00:00+00:00") |> elem(1) |> RDF.datetime()