From b408b5416f8f5afde24d8e0b3b6b6ce28a73c845 Mon Sep 17 00:00:00 2001 From: Petru Conduraru Date: Wed, 5 Aug 2026 17:33:14 +0300 Subject: [PATCH 1/2] Add test cases for bounded property restrictions Addresses the restriction half of #371: no official fixture exercised a restriction facet (minInclusive/maxInclusive/minExclusive/maxExclusive) against an IfcPropertyBoundedValue before this change. Adds two families under Documentation/ImplementersDocumentation/TestCases/property: - a two sided restriction, checking both bounds against an inclusive and an exclusive end - a one sided restriction, checking that only the constrained bound is required and that SetPointValue alone does not satisfy it Hand authored to match the format produced by CreateTestCases, since the .NET build could not be run locally. Validated against Schema/ids.xsd and against a fixed IfcTester implementation. AI-assisted with Claude Code. --- ...operty_requires_the_matching_bound_2_3.ids | 33 +++++++++ ...operty_requires_the_matching_bound_2_3.ifc | 19 +++++ ...operty_requires_the_matching_bound_3_3.ids | 33 +++++++++ ...operty_requires_the_matching_bound_3_3.ifc | 19 +++++ ..._requires_both_bounds_within_range_2_3.ids | 34 +++++++++ ..._requires_both_bounds_within_range_2_3.ifc | 19 +++++ ...operty_requires_the_matching_bound_1_3.ids | 33 +++++++++ ...operty_requires_the_matching_bound_1_3.ifc | 19 +++++ ..._requires_both_bounds_within_range_1_3.ids | 34 +++++++++ ..._requires_both_bounds_within_range_1_3.ifc | 19 +++++ ..._requires_both_bounds_within_range_3_3.ids | 34 +++++++++ ..._requires_both_bounds_within_range_3_3.ifc | 19 +++++ .../TestCases/scripts.md | 74 +++++++++++++++++++ 13 files changed, 389 insertions(+) create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ifc diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids new file mode 100644 index 0000000..1b2a7d5 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids @@ -0,0 +1,33 @@ + + + + A one sided restriction on a bounded property requires the matching bound 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ifc new file mode 100644 index 0000000..2349165 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1FmBKp01LBiACpwVaAschw',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('1hllvgXn57QwBEuxoC9LPl',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('2PwdJaXF581fbt6kTURaVH',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('3o8fYQECLFrx$lRlXPKtoD',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(40000.),$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids new file mode 100644 index 0000000..2d7a488 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids @@ -0,0 +1,33 @@ + + + + A one sided restriction on a bounded property requires the matching bound 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ifc new file mode 100644 index 0000000..f6a609c --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('3O0sv4DyTAAB$5skbLZ$xY',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('0E9xCMduPANAiCLhBW3Lnp',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('3YsK9JUPb7mflgt_hgZmde',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('2H77sYlnH92PsHk4BbyUXQ',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,$,$,$,IFCLENGTHMEASURE(25000.)); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids new file mode 100644 index 0000000..733b80e --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids @@ -0,0 +1,34 @@ + + + + A restriction on a bounded property requires both bounds within range 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ifc new file mode 100644 index 0000000..c60e3c7 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1z7Ch67On8teDImg33F4uf',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('0Nl6oJf2r5DhAqAvk9lDzI',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('035Z2$ojr5Hv04f6le26W9',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1LS78BbKj1qu7Rp6_vqATo',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(30000.),IFCLENGTHMEASURE(20000.),$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids new file mode 100644 index 0000000..fb54a00 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids @@ -0,0 +1,33 @@ + + + + A one sided restriction on a bounded property requires the matching bound 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ifc new file mode 100644 index 0000000..3a16163 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('21n1xf2$LE0eQPHILQ4EOB',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('0u6mB2q4H0DQDI$$L1C4zL',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16$JOcbxT2kO1NGP6PDoRX',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('2OvTcy5W5E0Aoph4cLPsGG',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,$,IFCLENGTHMEASURE(25000.),$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids new file mode 100644 index 0000000..ba655b8 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids @@ -0,0 +1,34 @@ + + + + A restriction on a bounded property requires both bounds within range 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ifc new file mode 100644 index 0000000..79d8c4d --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('3Q_A$GN6j3Cv5CiwXBhwZo',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('30Usig1498rOyRQvqnBfVR',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('1HGx84yxr60RyH5PdDhPy5',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('0oWwNmtmv0XRz$6qsSkwCW',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(35000.),IFCLENGTHMEASURE(25000.),$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids new file mode 100644 index 0000000..d1f5cf7 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids @@ -0,0 +1,34 @@ + + + + A restriction on a bounded property requires both bounds within range 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ifc new file mode 100644 index 0000000..b196989 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('19pSBO1vTBNgzebcXi_wcC',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2W7hvDehr4HgNrABTNhmZF',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('3DKto$qK15D9xBybBax7WX',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('2Z1OozacT118eUKavrG1BU',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(40000.),IFCLENGTHMEASURE(30000.),$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/scripts.md b/Documentation/ImplementersDocumentation/TestCases/scripts.md index 0a0dd2e..c3bad4e 100644 --- a/Documentation/ImplementersDocumentation/TestCases/scripts.md +++ b/Documentation/ImplementersDocumentation/TestCases/scripts.md @@ -1953,6 +1953,80 @@ Requirements: Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,''2'' ``` +### A restriction on a bounded property requires both bounds within range 1/3 + +A restriction facet (minInclusive, maxInclusive, minExclusive, maxExclusive) applied to a +property checks an IfcPropertyBoundedValue by its LowerBoundValue and UpperBoundValue. +SetPointValue is not considered, as it does not constrain the range of the property. +Both bounds must lie within the restriction for the specification to pass. + +``` ids property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids +A restriction on a bounded property requires both bounds within range 1/3 +Entity: ''IFCWALL'' +Requirements: +Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinExclusive(''20'') MaxInclusive(''40'') +``` + +### A restriction on a bounded property requires both bounds within range 2/3 + +The lower bound sits exactly on the excluded end of the restriction, so it fails. + +``` ids property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids +A restriction on a bounded property requires both bounds within range 2/3 +Entity: ''IFCWALL'' +Requirements: +Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinExclusive(''20'') MaxInclusive(''40'') +``` + +### A restriction on a bounded property requires both bounds within range 3/3 + +The upper bound sits exactly on the included end of the restriction, so it passes. + +``` ids property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids +A restriction on a bounded property requires both bounds within range 3/3 +Entity: ''IFCWALL'' +Requirements: +Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinExclusive(''20'') MaxInclusive(''40'') +``` + +### A one sided restriction on a bounded property requires the matching bound 1/3 + +When a restriction only constrains one end (here minInclusive), only the corresponding +bound of the IfcPropertyBoundedValue needs to be present and within range. The unconstrained +end may be absent. + +``` ids property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids +A one sided restriction on a bounded property requires the matching bound 1/3 +Entity: ''IFCWALL'' +Requirements: +Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinInclusive(''20'') +``` + +### A one sided restriction on a bounded property requires the matching bound 2/3 + +The constrained end (LowerBoundValue) is missing, so the specification fails even though an +UpperBoundValue is present. + +``` ids property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids +A one sided restriction on a bounded property requires the matching bound 2/3 +Entity: ''IFCWALL'' +Requirements: +Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinInclusive(''20'') +``` + +### A one sided restriction on a bounded property requires the matching bound 3/3 + +Only a SetPointValue is present, with neither a LowerBoundValue nor an UpperBoundValue. +SetPointValue is excluded from restriction checking, so this fails even though its value +would otherwise satisfy the restriction. + +``` ids property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids +A one sided restriction on a bounded property requires the matching bound 3/3 +Entity: ''IFCWALL'' +Requirements: +Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinInclusive(''20'') +``` + ### Any matching value in a list property will pass 1/3 ``` ids property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ids From f09e04eda1a632399ecad9978ea1f3af2d80464f Mon Sep 17 00:00:00 2001 From: Petru Conduraru Date: Thu, 6 Aug 2026 15:54:19 +0300 Subject: [PATCH 2/2] Regenerate IDS fixtures via CreateTestCases --- ...a_bounded_property_requires_both_bounds_within_range_2_3.ids | 2 +- ...a_bounded_property_requires_both_bounds_within_range_1_3.ids | 2 +- ...a_bounded_property_requires_both_bounds_within_range_3_3.ids | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids index 733b80e..23c9895 100644 --- a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids +++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids @@ -23,8 +23,8 @@ - + diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids index ba655b8..52aac7e 100644 --- a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids @@ -23,8 +23,8 @@ - + diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids index d1f5cf7..a7d3894 100644 --- a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids +++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids @@ -23,8 +23,8 @@ - +