From 7df7ee00b76766877b1bf0561b556ce7a9c7fe8e Mon Sep 17 00:00:00 2001 From: Petru Conduraru Date: Thu, 6 Aug 2026 11:49:22 +0300 Subject: [PATCH 1/4] Add IFC2X3 occurrence type mapping testcase atomczak on #116 (2024-08-26): "documentation already in place, missing one pass/fail test case to verify it." PR #301 merged the ifc2x3-occurrence-type-mapping-table.md but no fixture in TestCases exercises it, and no PR after #301 references #116. Adds a pass/fail pair under Documentation/ImplementersDocumentation/ TestCases/entity using the IfcAirTerminal example the issue itself raises: applicability matches the real IFC2X3 occurrence class IfcFlowTerminal, and the requirement checks the entity facet name IFCAIRTERMINAL, which only resolves via the mapping table's IfcAirTerminalType. The fail fixture reuses the same specification against an IfcFlowTerminal typed by IfcElectricApplianceType instead, so a false pass could not be mistaken for a correctly-checked type mismatch. A third control fixture (untyped IfcFlowTerminal) also fails, confirming applicability alone does not vacuously pass. Hand authored to match the format produced by CreateTestCases, since the .NET build could not be run locally. Validated against Schema/ids.xsd (plus a deliberately malformed control) and against IfcOpenShell's IfcTester (src/ifctester, the implementation of IfcOpenShell#7212), which returned the expected pass/fail/fail verdicts for the pass, fail and control fixtures. AI-assisted with Claude Code. --- ...esolves_via_the_type_mapping_table_2_2.ids | 25 ++++++++++++++++ ...esolves_via_the_type_mapping_table_2_2.ifc | 12 ++++++++ ...esolves_via_the_type_mapping_table_1_2.ids | 25 ++++++++++++++++ ...esolves_via_the_type_mapping_table_1_2.ifc | 12 ++++++++ .../TestCases/scripts.md | 30 +++++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids new file mode 100644 index 0000000..71b68a5 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids @@ -0,0 +1,25 @@ + + + + In IFC2X3 an entity name resolves via the type mapping table 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCFLOWTERMINAL + + + + + + + IFCAIRTERMINAL + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc new file mode 100644 index 0000000..b6b3faa --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T11:45:14',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('10gxdJeWr2ww3Zq_ToPC9T',$,$,$,$,$,$,$); +#2=IFCELECTRICAPPLIANCETYPE('0qZf4B1Uj6Guf8xSiv33y_',$,$,$,$,$,$,$,$,$); +#3=IFCRELDEFINESBYTYPE('3fLFTzUYz3DxtWu1PO9GzS',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids new file mode 100644 index 0000000..d07221e --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids @@ -0,0 +1,25 @@ + + + + In IFC2X3 an entity name resolves via the type mapping table 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCFLOWTERMINAL + + + + + + + IFCAIRTERMINAL + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc new file mode 100644 index 0000000..5d6d6a3 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T11:45:05',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('0e2DNPIaj26RuQ161RxEHD',$,$,$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('0EgXPTnD904BWuHp$QbGkL',$,$,$,$,$,$,$,$,$); +#3=IFCRELDEFINESBYTYPE('23ku2hyMP9zAK1nmSZW8n_',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/scripts.md b/Documentation/ImplementersDocumentation/TestCases/scripts.md index f14ad12..7db5ded 100644 --- a/Documentation/ImplementersDocumentation/TestCases/scripts.md +++ b/Documentation/ImplementersDocumentation/TestCases/scripts.md @@ -959,6 +959,36 @@ Requirements: Entity: ''IfcWall'' ``` +### In IFC2X3 an entity name resolves via the type mapping table 1/2 + +The [IFC2X3 occurrence and type mapping table](../ifc2x3-occurrence-type-mapping-table.md) +lets an IFC2X3 model be checked with the IFC4 entity name `IfcAirTerminal` +even though that class does not exist in IFC2X3. Applicability matches the +real IFC2X3 occurrence class `IfcFlowTerminal`, and the requirement checks +that it is typed by `IfcAirTerminalType`. + +``` ids entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids +In IFC2X3 an entity name resolves via the type mapping table 1/2 +IFC2X3 +Entity: ''IFCFLOWTERMINAL'' +Requirements: +Entity: ''IFCAIRTERMINAL'' +``` + +### In IFC2X3 an entity name resolves via the type mapping table 2/2 + +Same specification as the case above, run against an `IfcFlowTerminal` +typed by `IfcElectricApplianceType` instead, so a false pass could not be +mistaken for a correctly-checked type mismatch. + +``` ids entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids +In IFC2X3 an entity name resolves via the type mapping table 2/2 +IFC2X3 +Entity: ''IFCFLOWTERMINAL'' +Requirements: +Entity: ''IFCAIRTERMINAL'' +``` + ### Inherited predefined types should pass ``` ids entity/pass-inherited_predefined_types_should_pass.ids From cefdc32213af453a104bd304745d9952d3eb159f Mon Sep 17 00:00:00 2001 From: Petru Conduraru Date: Thu, 6 Aug 2026 13:08:11 +0300 Subject: [PATCH 2/4] Rework IFC2X3 AirTerminal type mapping test cases andyward on #458 (2026-08-06): applicability should be expressed on IfcAirTerminal, not IfcFlowTerminal, and should cover a realistic naming requirement, a minOccurs=1 "must exist" requirement, and PredefinedType including USERDEFINED, since 2X3 hides that complexity on the type object. Measured first: IfcTester's Entity facet already resolves IFCAIRTERMINAL through the type mapping table on BOTH the applicability path (Entity.filter, src/ifctester/ifctester/facet.py:208-218, falls back to by_type(f"{name}Type") plus get_types when by_type(name) raises) and the requirements path (Entity.__call__, facet.py:236-243, falls back to get_type(inst) plus a TYPE-suffix check). Confirmed empirically against a minimal IFC2X3 IfcFlowTerminal typed by IfcAirTerminalType: applicability selected the element and the requirement matched. No IfcTester defect; no code change needed. Replaces the single pass/fail pair with four pairs, each applicability expressed as IFCAIRTERMINAL: - Name pattern requirement (AIR-XXX), matching his "All AirTerminals should be named like AIR-XXX" scenario. - minOccurs=1 "there must be AirTerminals in the model", applicability alone, no requirements section, replacing the fail case he called unnatural. - PredefinedType enumeration value on IfcAirTerminalType. - PredefinedType USERDEFINED, with ElementType carrying the custom label per util.element.get_predefined_type's IFC2X3 fallback. Each fail fixture reuses its pass fixture's specification against a model that fails for the documented reason (name mismatch, zero applicable entities, or predefined type mismatch), verified with IfcTester so no fixture passes vacuously. All eight also validate against Schema/ids.xsd; a deliberately malformed control confirmed the validator discriminates. Hand authored to match the format produced by CreateTestCases, since the .NET build could not be run locally. AI-assisted with Claude Code. --- ...esolves_via_the_type_mapping_table_2_2.ids | 28 +++++ ...esolves_via_the_type_mapping_table_2_2.ifc | 12 ++ ...by_name_via_the_type_mapping_table_2_2.ids | 30 +++++ ...by_name_via_the_type_mapping_table_2_2.ifc | 12 ++ ...solves_via_the_type_mapping_table_2_2.ids} | 9 +- ...esolves_via_the_type_mapping_table_2_2.ifc | 12 ++ ...esolves_via_the_type_mapping_table_2_2.ifc | 12 -- ...erminal_per_the_type_mapping_table_2_2.ids | 18 +++ ...erminal_per_the_type_mapping_table_2_2.ifc | 10 ++ ...esolves_via_the_type_mapping_table_1_2.ids | 28 +++++ ...esolves_via_the_type_mapping_table_1_2.ifc | 12 ++ ...by_name_via_the_type_mapping_table_1_2.ids | 30 +++++ ...by_name_via_the_type_mapping_table_1_2.ifc | 12 ++ ...solves_via_the_type_mapping_table_1_2.ids} | 9 +- ...esolves_via_the_type_mapping_table_1_2.ifc | 12 ++ ...esolves_via_the_type_mapping_table_1_2.ifc | 12 -- ...erminal_per_the_type_mapping_table_1_2.ids | 18 +++ ...erminal_per_the_type_mapping_table_1_2.ifc | 12 ++ .../TestCases/scripts.md | 118 +++++++++++++++--- 19 files changed, 361 insertions(+), 45 deletions(-) create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ifc rename Documentation/ImplementersDocumentation/TestCases/entity/{fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids => fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids} (67%) create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc delete mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ifc rename Documentation/ImplementersDocumentation/TestCases/entity/{pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids => pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids} (67%) create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc delete mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids create mode 100644 Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ifc diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids new file mode 100644 index 0000000..aed6fe3 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids @@ -0,0 +1,28 @@ + + + + In IFC2X3 a user-defined AirTerminal predefined type resolves via the type mapping table 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + + IFCAIRTERMINAL + + + USERDEFINED + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc new file mode 100644 index 0000000..46369d8 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('11C92urGj4PQaK1OBBiGCs',$,$,$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('2UBRzZtXT2PhMBe36A7LGN',$,$,$,$,$,$,$,$,.DIFFUSER.); +#3=IFCRELDEFINESBYTYPE('2cocz3LlfB0wld0Eq66x$S',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids new file mode 100644 index 0000000..6c72950 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids @@ -0,0 +1,30 @@ + + + + In IFC2X3 an AirTerminal can be checked by name via the type mapping table 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + + Name + + + + + + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ifc new file mode 100644 index 0000000..0b70a66 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('0ou5T2oGnBneTBhyUU15ge',$,'TERM-01',$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('2mzNicYsf4qQh85_dP6ZUE',$,$,$,$,$,$,$,$,$); +#3=IFCRELDEFINESBYTYPE('1jPWxWbXz9eeG4TL9DC36M',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids similarity index 67% rename from Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids rename to Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids index 71b68a5..508dac3 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids @@ -1,15 +1,15 @@ - In IFC2X3 an entity name resolves via the type mapping table 2/2 + In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 2/2 Generated via code automation in the Ids Repository on github. - + - IFCFLOWTERMINAL + IFCAIRTERMINAL @@ -18,6 +18,9 @@ IFCAIRTERMINAL + + DIFFUSER + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc new file mode 100644 index 0000000..787edaa --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('0RpJAGNMLEZQGDhKiGhGk9',$,$,$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('2007Eo__HFNOQ9boqcYL19',$,$,$,$,$,$,$,$,.GRILLE.); +#3=IFCRELDEFINESBYTYPE('3IaY0uquH6XPmXmLftbg4a',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc deleted file mode 100644 index b6b3faa..0000000 --- a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ifc +++ /dev/null @@ -1,12 +0,0 @@ -ISO-10303-21; -HEADER; -FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); -FILE_NAME('','2026-08-06T11:45:14',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); -FILE_SCHEMA(('IFC2X3')); -ENDSEC; -DATA; -#1=IFCFLOWTERMINAL('10gxdJeWr2ww3Zq_ToPC9T',$,$,$,$,$,$,$); -#2=IFCELECTRICAPPLIANCETYPE('0qZf4B1Uj6Guf8xSiv33y_',$,$,$,$,$,$,$,$,$); -#3=IFCRELDEFINESBYTYPE('3fLFTzUYz3DxtWu1PO9GzS',$,$,$,(#1),#2); -ENDSEC; -END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids new file mode 100644 index 0000000..d77cc8b --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids @@ -0,0 +1,18 @@ + + + + In IFC2X3 there must be an AirTerminal per the type mapping table 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ifc new file mode 100644 index 0000000..6e64871 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCWALL('1QkUE_XAzDd8m3lpLgR$dB',$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids new file mode 100644 index 0000000..22fbe73 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids @@ -0,0 +1,28 @@ + + + + In IFC2X3 a user-defined AirTerminal predefined type resolves via the type mapping table 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + + IFCAIRTERMINAL + + + USERDEFINED + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc new file mode 100644 index 0000000..43c56dd --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('277jdYaJL5X85dRV6V8a65',$,$,$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('0uAOzxwov2_uqEEukcihfd',$,$,$,$,$,$,$,'CUSTOM-VENT',.USERDEFINED.); +#3=IFCRELDEFINESBYTYPE('2zRJNm_Lv1CRbxflcpRLA0',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids new file mode 100644 index 0000000..c0bc94e --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids @@ -0,0 +1,30 @@ + + + + In IFC2X3 an AirTerminal can be checked by name via the type mapping table 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + + Name + + + + + + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ifc new file mode 100644 index 0000000..fcb76d2 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('3R4sKXi15AFOaWD52W39Kl',$,'AIR-01',$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('02YKwvKtL9hQvZRwgYyxYO',$,$,$,$,$,$,$,$,$); +#3=IFCRELDEFINESBYTYPE('0qjiMjAkj1BQ_6LVIsbeo6',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids similarity index 67% rename from Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids rename to Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids index d07221e..1d538c4 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids @@ -1,15 +1,15 @@ - In IFC2X3 an entity name resolves via the type mapping table 1/2 + In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 1/2 Generated via code automation in the Ids Repository on github. - + - IFCFLOWTERMINAL + IFCAIRTERMINAL @@ -18,6 +18,9 @@ IFCAIRTERMINAL + + DIFFUSER + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc new file mode 100644 index 0000000..f2cb6ec --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('3DfdUozX589eoywUhuqpni',$,$,$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('0CxV3poQjDqf1V11SKqYWT',$,$,$,$,$,$,$,$,.DIFFUSER.); +#3=IFCRELDEFINESBYTYPE('1iA4ifE7v18vYAHPT$6r$_',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc deleted file mode 100644 index 5d6d6a3..0000000 --- a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ifc +++ /dev/null @@ -1,12 +0,0 @@ -ISO-10303-21; -HEADER; -FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); -FILE_NAME('','2026-08-06T11:45:05',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); -FILE_SCHEMA(('IFC2X3')); -ENDSEC; -DATA; -#1=IFCFLOWTERMINAL('0e2DNPIaj26RuQ161RxEHD',$,$,$,$,$,$,$); -#2=IFCAIRTERMINALTYPE('0EgXPTnD904BWuHp$QbGkL',$,$,$,$,$,$,$,$,$); -#3=IFCRELDEFINESBYTYPE('23ku2hyMP9zAK1nmSZW8n_',$,$,$,(#1),#2); -ENDSEC; -END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids new file mode 100644 index 0000000..b142a37 --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids @@ -0,0 +1,18 @@ + + + + In IFC2X3 there must be an AirTerminal per the type mapping table 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ifc b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ifc new file mode 100644 index 0000000..e7d1d4a --- /dev/null +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-06T13:03:02',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCFLOWTERMINAL('2150inZ7vCmB5nlH3oCD_7',$,$,$,$,$,$,$); +#2=IFCAIRTERMINALTYPE('02pWrE7HH2vQZNKrvqSLzl',$,$,$,$,$,$,$,$,$); +#3=IFCRELDEFINESBYTYPE('2r4tyDB$zCTRafoSuQeTAL',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/ImplementersDocumentation/TestCases/scripts.md b/Documentation/ImplementersDocumentation/TestCases/scripts.md index 7db5ded..62ab27f 100644 --- a/Documentation/ImplementersDocumentation/TestCases/scripts.md +++ b/Documentation/ImplementersDocumentation/TestCases/scripts.md @@ -959,34 +959,122 @@ Requirements: Entity: ''IfcWall'' ``` -### In IFC2X3 an entity name resolves via the type mapping table 1/2 +### In IFC2X3 an AirTerminal can be checked by name via the type mapping table 1/2 The [IFC2X3 occurrence and type mapping table](../ifc2x3-occurrence-type-mapping-table.md) -lets an IFC2X3 model be checked with the IFC4 entity name `IfcAirTerminal` -even though that class does not exist in IFC2X3. Applicability matches the -real IFC2X3 occurrence class `IfcFlowTerminal`, and the requirement checks -that it is typed by `IfcAirTerminalType`. +lets an IFC2X3 model be checked directly with the IFC4 entity name +`IfcAirTerminal`, even though that class does not exist in IFC2X3. +Applicability is expressed against `IFCAIRTERMINAL` itself, which resolves +to the real IFC2X3 occurrence class `IfcFlowTerminal` typed by +`IfcAirTerminalType`. A common real-world requirement, naming, is checked +on the resolved occurrence: "All AirTerminals should be named like AIR-XXX". + +``` ids entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids +In IFC2X3 an AirTerminal can be checked by name via the type mapping table 1/2 +IFC2X3 +Entity: ''IFCAIRTERMINAL'' +Requirements: +Attribute: ''Name'',Pattern(''AIR-.*'') +``` + +### In IFC2X3 an AirTerminal can be checked by name via the type mapping table 2/2 -``` ids entity/pass-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_1_2.ids -In IFC2X3 an entity name resolves via the type mapping table 1/2 +Same specification as the case above, run against an `IfcFlowTerminal` +typed by `IfcAirTerminalType` whose `Name` does not match the pattern, so +the failure is a naming mismatch rather than an unresolved applicability. + +``` ids entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids +In IFC2X3 an AirTerminal can be checked by name via the type mapping table 2/2 IFC2X3 -Entity: ''IFCFLOWTERMINAL'' +Entity: ''IFCAIRTERMINAL'' Requirements: +Attribute: ''Name'',Pattern(''AIR-.*'') +``` + +### In IFC2X3 there must be an AirTerminal per the type mapping table 1/2 + +Applicability alone can express "There must be AirTerminals in the model". +The default specification cardinality is Required, so the specification +fails if no element resolves against `IFCAIRTERMINAL` through the type +mapping table, without needing a separate requirement. + +``` ids entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids +In IFC2X3 there must be an AirTerminal per the type mapping table 1/2 +IFC2X3 Entity: ''IFCAIRTERMINAL'' ``` -### In IFC2X3 an entity name resolves via the type mapping table 2/2 +### In IFC2X3 there must be an AirTerminal per the type mapping table 2/2 -Same specification as the case above, run against an `IfcFlowTerminal` -typed by `IfcElectricApplianceType` instead, so a false pass could not be -mistaken for a correctly-checked type mismatch. +Same specification as the case above, run against a model that contains no +`IfcFlowTerminal` typed by `IfcAirTerminalType` at all, so the specification +fails for having zero applicable entities rather than for a failed +requirement. + +``` ids entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids +In IFC2X3 there must be an AirTerminal per the type mapping table 2/2 +IFC2X3 +Entity: ''IFCAIRTERMINAL'' +``` + +### In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 1/2 -``` ids entity/fail-in_ifc2x3_an_entity_name_resolves_via_the_type_mapping_table_2_2.ids -In IFC2X3 an entity name resolves via the type mapping table 2/2 +In IFC2X3 the predefined type lives on the type object, not the occurrence. +Applicability resolves `IFCAIRTERMINAL` through the type mapping table, and +the requirement checks `IfcAirTerminalType.PredefinedType` against a named +enumeration value. + +``` ids entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids +In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 1/2 IFC2X3 -Entity: ''IFCFLOWTERMINAL'' +Entity: ''IFCAIRTERMINAL'' Requirements: +Entity: ''IFCAIRTERMINAL'',''DIFFUSER'' +``` + +### In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 2/2 + +Same specification as the case above, run against an `IfcAirTerminalType` +whose `PredefinedType` is a different enumeration value (`GRILLE`), so the +failure is a predefined type mismatch rather than an unresolved +applicability. + +``` ids entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids +In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 2/2 +IFC2X3 +Entity: ''IFCAIRTERMINAL'' +Requirements: +Entity: ''IFCAIRTERMINAL'',''DIFFUSER'' +``` + +### In IFC2X3 a user-defined AirTerminal predefined type resolves via the type mapping table 1/2 + +`USERDEFINED` predefined types have their own nuance in IFC2X3: the custom +label lives on `IfcAirTerminalType.ElementType`, not on the occurrence's +`ObjectType`. The requirement only checks that `PredefinedType` itself is +`USERDEFINED`. + +``` ids entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids +In IFC2X3 a user-defined AirTerminal predefined type resolves via the type mapping table 1/2 +IFC2X3 +Entity: ''IFCAIRTERMINAL'' +Requirements: +Entity: ''IFCAIRTERMINAL'',''USERDEFINED'' +``` + +### In IFC2X3 a user-defined AirTerminal predefined type resolves via the type mapping table 2/2 + +Same specification as the case above, run against an `IfcAirTerminalType` +with a named `PredefinedType` (`DIFFUSER`) instead of `USERDEFINED`, so the +failure is a predefined type mismatch rather than an unresolved +applicability. + +``` ids entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids +In IFC2X3 a user-defined AirTerminal predefined type resolves via the type mapping table 2/2 +IFC2X3 Entity: ''IFCAIRTERMINAL'' +Requirements: +Entity: ''IFCAIRTERMINAL'',''USERDEFINED'' ``` ### Inherited predefined types should pass From 251d2dcb81216f3334f353e58d96be18bd59d672 Mon Sep 17 00:00:00 2001 From: Petru Conduraru Date: Thu, 6 Aug 2026 14:42:22 +0300 Subject: [PATCH 3/4] Regenerate IFC2X3 fixtures via CreateTestCases Ran the official RepositoryAutomation CreateTestCases target rather than hand authoring. Output is byte identical to the hand written fixtures apart from the trailing newline, which the generator omits. --- ..._predefined_type_resolves_via_the_type_mapping_table_2_2.ids | 2 +- ...al_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids | 2 +- ..._predefined_type_resolves_via_the_type_mapping_table_2_2.ids | 2 +- ...re_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids | 2 +- ..._predefined_type_resolves_via_the_type_mapping_table_1_2.ids | 2 +- ...al_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids | 2 +- ..._predefined_type_resolves_via_the_type_mapping_table_1_2.ids | 2 +- ...re_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids index aed6fe3..3ad86ef 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids @@ -25,4 +25,4 @@ - + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids index 6c72950..3a21b21 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids @@ -27,4 +27,4 @@ - + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids index 508dac3..65c94b0 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids @@ -25,4 +25,4 @@ - + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids index d77cc8b..1d4f91a 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids @@ -15,4 +15,4 @@ - + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids index 22fbe73..3bc5105 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids @@ -25,4 +25,4 @@ - + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids index c0bc94e..5383e02 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids @@ -27,4 +27,4 @@ - + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids index 1d538c4..f267aed 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids @@ -25,4 +25,4 @@ - + \ No newline at end of file diff --git a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids index b142a37..2db0163 100644 --- a/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids +++ b/Documentation/ImplementersDocumentation/TestCases/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids @@ -15,4 +15,4 @@ - + \ No newline at end of file From ce39e815113663795cce8a39566d60c60b558fb8 Mon Sep 17 00:00:00 2001 From: Claudio Benghi Date: Sun, 9 Aug 2026 19:33:47 +0200 Subject: [PATCH 4/4] Ids-audit-tool update. --- RepositoryAutomation/build/_build.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RepositoryAutomation/build/_build.csproj b/RepositoryAutomation/build/_build.csproj index a43e69c..b034ba6 100644 --- a/RepositoryAutomation/build/_build.csproj +++ b/RepositoryAutomation/build/_build.csproj @@ -13,7 +13,7 @@ - +