When running the test CqlIntervalOperatorsTest:Except:DecimalIntervalExcept1to3, the test runner reports:
Test CqlIntervalOperatorsTest:Except:DecimalIntervalExcept1to3 status: fail expected: Interval [ 1.0, 3.99999999 ] actual: { low: 1, lowClosed: true, high: 4, highClosed: false }
My engine is returning the following result:
{
"resourceType": "Parameters",
"parameters": [
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-cqlType",
"valueString": "Interval<System.Decimal>"
}
],
"name": "return",
"part": [
{
"name": "low",
"valueDecimal": 1
},
{
"name": "lowClosed",
"valueBoolean": true
},
{
"name": "high",
"valueDecimal": 4
},
{
"name": "highClosed",
"valueBoolean": false
}
]
}
]
}
The CQL IG FHIR type mapping does not map Interval<System.Decimal> to a specific FHIR type, so it uses the same mapping approach as Tuples (e.g., using part). I've confirmed that this works correctly in some test cases, so I think the basic shape of the representation is correct.
In this case, I suspect the runner is not detecting my engine's result as equal to the expected result because we've chosen to represent the high value as an open boundary (e.g., Interval [ 1.0, 4.0 ) rather than Interval [ 1.0, 3.99999999 ]).
When running the test
CqlIntervalOperatorsTest:Except:DecimalIntervalExcept1to3, the test runner reports:My engine is returning the following result:
{ "resourceType": "Parameters", "parameters": [ { "extension": [ { "url": "http://hl7.org/fhir/StructureDefinition/cqf-cqlType", "valueString": "Interval<System.Decimal>" } ], "name": "return", "part": [ { "name": "low", "valueDecimal": 1 }, { "name": "lowClosed", "valueBoolean": true }, { "name": "high", "valueDecimal": 4 }, { "name": "highClosed", "valueBoolean": false } ] } ] }The CQL IG FHIR type mapping does not map
Interval<System.Decimal>to a specific FHIR type, so it uses the same mapping approach as Tuples (e.g., usingpart). I've confirmed that this works correctly in some test cases, so I think the basic shape of the representation is correct.In this case, I suspect the runner is not detecting my engine's result as equal to the expected result because we've chosen to represent the high value as an open boundary (e.g.,
Interval [ 1.0, 4.0 )rather thanInterval [ 1.0, 3.99999999 ]).