From 2c4b5f604a8dd73a42a2555f35d5ab18272b5632 Mon Sep 17 00:00:00 2001 From: Marcel Otto Date: Sun, 17 May 2020 21:51:03 +0200 Subject: [PATCH] Add minExclusive and maxExclusive XSD datatype facets --- lib/rdf/xsd/datatypes/decimal.ex | 12 ++++++++++++ lib/rdf/xsd/datatypes/double.ex | 13 +++++++++++++ lib/rdf/xsd/datatypes/integer.ex | 13 +++++++++++++ lib/rdf/xsd/facets/max_exclusive.ex | 3 +++ lib/rdf/xsd/facets/min_exclusive.ex | 3 +++ test/unit/xsd/datatypes/byte_test.exs | 12 ++++++++++-- test/unit/xsd/datatypes/decimal_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/double_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/float_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/int_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/integer_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/long_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/negative_integer_test.exs | 11 +++++++++-- .../xsd/datatypes/non_negative_integer_test.exs | 11 +++++++++-- .../xsd/datatypes/non_positive_integer_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/positive_integer_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/short_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/unsigned_byte_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/unsigned_int_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/unsigned_long_test.exs | 11 +++++++++-- test/unit/xsd/datatypes/unsigned_short_test.exs | 11 +++++++++-- 21 files changed, 189 insertions(+), 32 deletions(-) create mode 100644 lib/rdf/xsd/facets/max_exclusive.ex create mode 100644 lib/rdf/xsd/facets/min_exclusive.ex diff --git a/lib/rdf/xsd/datatypes/decimal.ex b/lib/rdf/xsd/datatypes/decimal.ex index 0e2b038..cf05c3b 100644 --- a/lib/rdf/xsd/datatypes/decimal.ex +++ b/lib/rdf/xsd/datatypes/decimal.ex @@ -14,6 +14,8 @@ defmodule RDF.XSD.Decimal do def_applicable_facet RDF.XSD.Facets.MinInclusive def_applicable_facet RDF.XSD.Facets.MaxInclusive + def_applicable_facet RDF.XSD.Facets.MinExclusive + def_applicable_facet RDF.XSD.Facets.MaxExclusive @doc false def min_inclusive_conform?(min_inclusive, value, _lexical) do @@ -25,6 +27,16 @@ defmodule RDF.XSD.Decimal do not (D.cmp(value, D.new(max_inclusive)) == :gt) end + @doc false + def min_exclusive_conform?(min_exclusive, value, _lexical) do + D.cmp(value, D.new(min_exclusive)) == :gt + end + + @doc false + def max_exclusive_conform?(max_exclusive, value, _lexical) do + D.cmp(value, D.new(max_exclusive)) == :lt + end + @impl RDF.XSD.Datatype def lexical_mapping(lexical, opts) do diff --git a/lib/rdf/xsd/datatypes/double.ex b/lib/rdf/xsd/datatypes/double.ex index c6ef10f..0638ae6 100644 --- a/lib/rdf/xsd/datatypes/double.ex +++ b/lib/rdf/xsd/datatypes/double.ex @@ -15,6 +15,8 @@ defmodule RDF.XSD.Double do def_applicable_facet RDF.XSD.Facets.MinInclusive def_applicable_facet RDF.XSD.Facets.MaxInclusive + def_applicable_facet RDF.XSD.Facets.MinExclusive + def_applicable_facet RDF.XSD.Facets.MaxExclusive @doc false def min_inclusive_conform?(min_inclusive, value, _lexical) do @@ -26,6 +28,17 @@ defmodule RDF.XSD.Double do value <= max_inclusive end + @doc false + def min_exclusive_conform?(min_exclusive, value, _lexical) do + value > min_exclusive + end + + @doc false + def max_exclusive_conform?(max_exclusive, value, _lexical) do + value < max_exclusive + end + + @impl RDF.XSD.Datatype def lexical_mapping(lexical, opts) do case Float.parse(lexical) do diff --git a/lib/rdf/xsd/datatypes/integer.ex b/lib/rdf/xsd/datatypes/integer.ex index b8e3044..f186574 100644 --- a/lib/rdf/xsd/datatypes/integer.ex +++ b/lib/rdf/xsd/datatypes/integer.ex @@ -14,6 +14,9 @@ defmodule RDF.XSD.Integer do def_applicable_facet RDF.XSD.Facets.MinInclusive def_applicable_facet RDF.XSD.Facets.MaxInclusive + def_applicable_facet RDF.XSD.Facets.MinExclusive + def_applicable_facet RDF.XSD.Facets.MaxExclusive + @doc false def min_inclusive_conform?(min_inclusive, value, _lexical) do @@ -25,6 +28,16 @@ defmodule RDF.XSD.Integer do value <= max_inclusive end + @doc false + def min_exclusive_conform?(min_exclusive, value, _lexical) do + value > min_exclusive + end + + @doc false + def max_exclusive_conform?(max_exclusive, value, _lexical) do + value < max_exclusive + end + @impl RDF.XSD.Datatype def lexical_mapping(lexical, _) do case Integer.parse(lexical) do diff --git a/lib/rdf/xsd/facets/max_exclusive.ex b/lib/rdf/xsd/facets/max_exclusive.ex new file mode 100644 index 0000000..bbad52f --- /dev/null +++ b/lib/rdf/xsd/facets/max_exclusive.ex @@ -0,0 +1,3 @@ +defmodule RDF.XSD.Facets.MaxExclusive do + use RDF.XSD.Facet, name: :max_exclusive, type: integer +end diff --git a/lib/rdf/xsd/facets/min_exclusive.ex b/lib/rdf/xsd/facets/min_exclusive.ex new file mode 100644 index 0000000..b7d12b4 --- /dev/null +++ b/lib/rdf/xsd/facets/min_exclusive.ex @@ -0,0 +1,3 @@ +defmodule RDF.XSD.Facets.MinExclusive do + use RDF.XSD.Facet, name: :min_exclusive, type: integer +end diff --git a/test/unit/xsd/datatypes/byte_test.exs b/test/unit/xsd/datatypes/byte_test.exs index 5bf09d5..a9870c4 100644 --- a/test/unit/xsd/datatypes/byte_test.exs +++ b/test/unit/xsd/datatypes/byte_test.exs @@ -5,10 +5,18 @@ defmodule RDF.XSD.ByteTest do base: RDF.XSD.Short, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: -128, - max_inclusive: 127 + max_inclusive: 127, + min_exclusive: nil, + max_exclusive: nil + }, valid: RDF.XSD.TestData.valid_bytes(), invalid: RDF.XSD.TestData.invalid_bytes() diff --git a/test/unit/xsd/datatypes/decimal_test.exs b/test/unit/xsd/datatypes/decimal_test.exs index b583586..025f24d 100644 --- a/test/unit/xsd/datatypes/decimal_test.exs +++ b/test/unit/xsd/datatypes/decimal_test.exs @@ -6,10 +6,17 @@ defmodule RDF.XSD.DecimalTest do name: "decimal", primitive: true, comparable_datatypes: [RDF.XSD.Integer, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: nil, - max_inclusive: nil + max_inclusive: nil, + min_exclusive: nil, + max_exclusive: nil }, valid: %{ # input => {value, lexical, canonicalized} diff --git a/test/unit/xsd/datatypes/double_test.exs b/test/unit/xsd/datatypes/double_test.exs index 0d111bc..a607c75 100644 --- a/test/unit/xsd/datatypes/double_test.exs +++ b/test/unit/xsd/datatypes/double_test.exs @@ -4,10 +4,17 @@ defmodule RDF.XSD.DoubleTest do name: "double", primitive: true, comparable_datatypes: [RDF.XSD.Integer, RDF.XSD.Decimal], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: nil, - max_inclusive: nil + max_inclusive: nil, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_floats(), invalid: RDF.XSD.TestData.invalid_floats() diff --git a/test/unit/xsd/datatypes/float_test.exs b/test/unit/xsd/datatypes/float_test.exs index 33b8dd1..7d48d54 100644 --- a/test/unit/xsd/datatypes/float_test.exs +++ b/test/unit/xsd/datatypes/float_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.FloatTest do base: RDF.XSD.Double, base_primitive: RDF.XSD.Double, comparable_datatypes: [RDF.XSD.Integer, RDF.XSD.Decimal], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: nil, - max_inclusive: nil + max_inclusive: nil, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_floats(), invalid: RDF.XSD.TestData.invalid_floats() diff --git a/test/unit/xsd/datatypes/int_test.exs b/test/unit/xsd/datatypes/int_test.exs index a460810..cb46703 100644 --- a/test/unit/xsd/datatypes/int_test.exs +++ b/test/unit/xsd/datatypes/int_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.IntTest do base: RDF.XSD.Long, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: -2_147_483_648, - max_inclusive: 2_147_483_647 + max_inclusive: 2_147_483_647, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_ints(), invalid: RDF.XSD.TestData.invalid_ints() diff --git a/test/unit/xsd/datatypes/integer_test.exs b/test/unit/xsd/datatypes/integer_test.exs index 16c8f11..9e0efb2 100644 --- a/test/unit/xsd/datatypes/integer_test.exs +++ b/test/unit/xsd/datatypes/integer_test.exs @@ -4,10 +4,17 @@ defmodule RDF.XSD.IntegerTest do name: "integer", primitive: true, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: nil, - max_inclusive: nil + max_inclusive: nil, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_integers(), invalid: RDF.XSD.TestData.invalid_integers() diff --git a/test/unit/xsd/datatypes/long_test.exs b/test/unit/xsd/datatypes/long_test.exs index e3c2e46..df47cf5 100644 --- a/test/unit/xsd/datatypes/long_test.exs +++ b/test/unit/xsd/datatypes/long_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.LongTest do base: RDF.XSD.Integer, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: -9_223_372_036_854_775_808, - max_inclusive: 9_223_372_036_854_775_807 + max_inclusive: 9_223_372_036_854_775_807, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_longs(), invalid: RDF.XSD.TestData.invalid_longs() diff --git a/test/unit/xsd/datatypes/negative_integer_test.exs b/test/unit/xsd/datatypes/negative_integer_test.exs index a0ebf39..e15d81c 100644 --- a/test/unit/xsd/datatypes/negative_integer_test.exs +++ b/test/unit/xsd/datatypes/negative_integer_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.NegativeIntegerTest do base: RDF.XSD.NonPositiveInteger, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: nil, - max_inclusive: -1 + max_inclusive: -1, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_negative_integers(), invalid: RDF.XSD.TestData.invalid_negative_integers() diff --git a/test/unit/xsd/datatypes/non_negative_integer_test.exs b/test/unit/xsd/datatypes/non_negative_integer_test.exs index 7206817..9e3d1cd 100644 --- a/test/unit/xsd/datatypes/non_negative_integer_test.exs +++ b/test/unit/xsd/datatypes/non_negative_integer_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.NonNegativeIntegerTest do base: RDF.XSD.Integer, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: 0, - max_inclusive: nil + max_inclusive: nil, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_non_negative_integers(), invalid: RDF.XSD.TestData.invalid_non_negative_integers() diff --git a/test/unit/xsd/datatypes/non_positive_integer_test.exs b/test/unit/xsd/datatypes/non_positive_integer_test.exs index a7888e5..d727dde 100644 --- a/test/unit/xsd/datatypes/non_positive_integer_test.exs +++ b/test/unit/xsd/datatypes/non_positive_integer_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.NonPositiveIntegerTest do base: RDF.XSD.Integer, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: nil, - max_inclusive: 0 + max_inclusive: 0, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_non_positive_integers(), invalid: RDF.XSD.TestData.invalid_non_positive_integers() diff --git a/test/unit/xsd/datatypes/positive_integer_test.exs b/test/unit/xsd/datatypes/positive_integer_test.exs index 1ca5523..b376d25 100644 --- a/test/unit/xsd/datatypes/positive_integer_test.exs +++ b/test/unit/xsd/datatypes/positive_integer_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.PositiveIntegerTest do base: RDF.XSD.NonNegativeInteger, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: 1, - max_inclusive: nil + max_inclusive: nil, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_positive_integers(), invalid: RDF.XSD.TestData.invalid_positive_integers() diff --git a/test/unit/xsd/datatypes/short_test.exs b/test/unit/xsd/datatypes/short_test.exs index 065a35a..078f303 100644 --- a/test/unit/xsd/datatypes/short_test.exs +++ b/test/unit/xsd/datatypes/short_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.ShortTest do base: RDF.XSD.Int, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: -32768, - max_inclusive: 32767 + max_inclusive: 32767, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_shorts(), invalid: RDF.XSD.TestData.invalid_shorts() diff --git a/test/unit/xsd/datatypes/unsigned_byte_test.exs b/test/unit/xsd/datatypes/unsigned_byte_test.exs index 84a2eb1..901564d 100644 --- a/test/unit/xsd/datatypes/unsigned_byte_test.exs +++ b/test/unit/xsd/datatypes/unsigned_byte_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.UnsignedByteTest do base: RDF.XSD.UnsignedShort, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: 0, - max_inclusive: 255 + max_inclusive: 255, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_unsigned_bytes(), invalid: RDF.XSD.TestData.invalid_unsigned_bytes() diff --git a/test/unit/xsd/datatypes/unsigned_int_test.exs b/test/unit/xsd/datatypes/unsigned_int_test.exs index 5212e87..dcfe19c 100644 --- a/test/unit/xsd/datatypes/unsigned_int_test.exs +++ b/test/unit/xsd/datatypes/unsigned_int_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.UnsignedIntTest do base: RDF.XSD.UnsignedLong, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: 0, - max_inclusive: 4_294_967_295 + max_inclusive: 4_294_967_295, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_unsigned_ints(), invalid: RDF.XSD.TestData.invalid_unsigned_ints() diff --git a/test/unit/xsd/datatypes/unsigned_long_test.exs b/test/unit/xsd/datatypes/unsigned_long_test.exs index 130043d..ee66345 100644 --- a/test/unit/xsd/datatypes/unsigned_long_test.exs +++ b/test/unit/xsd/datatypes/unsigned_long_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.UnsignedLongTest do base: RDF.XSD.NonNegativeInteger, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: 0, - max_inclusive: 18_446_744_073_709_551_615 + max_inclusive: 18_446_744_073_709_551_615, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_unsigned_longs(), invalid: RDF.XSD.TestData.invalid_unsigned_longs() diff --git a/test/unit/xsd/datatypes/unsigned_short_test.exs b/test/unit/xsd/datatypes/unsigned_short_test.exs index 83c46a9..a346da1 100644 --- a/test/unit/xsd/datatypes/unsigned_short_test.exs +++ b/test/unit/xsd/datatypes/unsigned_short_test.exs @@ -5,10 +5,17 @@ defmodule RDF.XSD.UnsignedShortTest do base: RDF.XSD.UnsignedInt, base_primitive: RDF.XSD.Integer, comparable_datatypes: [RDF.XSD.Decimal, RDF.XSD.Double], - applicable_facets: [RDF.XSD.Facets.MinInclusive, RDF.XSD.Facets.MaxInclusive], + applicable_facets: [ + RDF.XSD.Facets.MinInclusive, + RDF.XSD.Facets.MaxInclusive, + RDF.XSD.Facets.MinExclusive, + RDF.XSD.Facets.MaxExclusive, + ], facets: %{ min_inclusive: 0, - max_inclusive: 65535 + max_inclusive: 65535, + min_exclusive: nil, + max_exclusive: nil }, valid: RDF.XSD.TestData.valid_unsigned_shorts(), invalid: RDF.XSD.TestData.invalid_unsigned_shorts()