Add minExclusive and maxExclusive XSD datatype facets
This commit is contained in:
parent
09dceb0e35
commit
2c4b5f604a
21 changed files with 189 additions and 32 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
3
lib/rdf/xsd/facets/max_exclusive.ex
Normal file
3
lib/rdf/xsd/facets/max_exclusive.ex
Normal file
|
@ -0,0 +1,3 @@
|
|||
defmodule RDF.XSD.Facets.MaxExclusive do
|
||||
use RDF.XSD.Facet, name: :max_exclusive, type: integer
|
||||
end
|
3
lib/rdf/xsd/facets/min_exclusive.ex
Normal file
3
lib/rdf/xsd/facets/min_exclusive.ex
Normal file
|
@ -0,0 +1,3 @@
|
|||
defmodule RDF.XSD.Facets.MinExclusive do
|
||||
use RDF.XSD.Facet, name: :min_exclusive, type: integer
|
||||
end
|
|
@ -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()
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue