rangeExpr-28 to rangeExpr-32 contain queries with long strings of digits. The query in rangeExpr-28 is:
18446744073709551616 to 18446744073709551620
As XML Schema requires implementations to support only 18 digits, I suggest that either a) the test cases contains smaller integer values, or b) error FORG0001 be accepted.
I suspect FOCA0003 (Input value too large for integer) might be more appropriate.
Fixed to use FOCA0003.
It seems that currently we don't allow an implementation to raise a static error in such cases; it has to be a dynamic error - which has the virtue that you can use try/catch on it.
I don't think FOCA0003 is the correct error for this situation. The bullet that raises FOCA0003 begins with "If ST is xs:decimal, xs:float or xs:double, then ..."
I believe that the rules that apply are:
The value of the numeric literal is determined by casting it to the appropriate type according to the rules for casting from xs:untypedAtomic to a numeric type as specified in Section 18.2 Casting from xs:string and xs:untypedAtomic (FO30).
18.2 Casting from xs:string and xs:untypedAtomic
When casting to a numeric type:
o If the value is too large or too small to be accurately represented by the implementation, it is handled as an overflow or underflow as defined in 4.2 Arithmetic operators on numeric values.
4.2 Arithmetic operators on numeric values
o For xs:integer operations, implementations that support limited-precision integer operations ·must· select from the following options:
o They ·may· choose to always raise an error [err:FOAR0002].
o They ·may· provide an ·implementation-defined· mechanism that allows users to choose between raising an error and returning a result that is modulo the largest representable integer value. See [ISO 10967].
So, I now believe that FOAR0002 should be returned.
Agreed. Will commit the change when I'm on a better internet connection.