From cce1f7c0f4bd9b67c2acc31c18a0102ed3373d3b Mon Sep 17 00:00:00 2001 From: Riho Kirss Date: Sat, 7 Nov 2026 20:26:42 +0200 Subject: [PATCH] feat(ids): implement transitive partOf checks --- .../IDSSpecifications/src/facets/PartOf.ts | 171 +++++++++++++++--- .../src/facets/partof.test.ts | 79 ++++++++ .../openbim/IDSSpecifications/src/types.ts | 3 +- .../core/tests/fixtures/ids-partof/LICENSE | 6 + .../core/tests/fixtures/ids-partof/README.md | 8 + ...-a_group_entity_must_match_exactly_1_2.ids | 27 +++ ...-a_group_entity_must_match_exactly_1_2.ifc | 12 ++ ...lement_fails_an_aggregate_relationship.ids | 29 +++ ...lement_fails_an_aggregate_relationship.ifc | 11 ++ ...ped_element_fails_a_group_relationship.ids | 29 +++ ...ped_element_fails_a_group_relationship.ifc | 11 ++ ...turns_the_opposite_of_a_required_facet.ids | 29 +++ ...turns_the_opposite_of_a_required_facet.ifc | 12 ++ ...ay_specify_the_entity_of_the_whole_2_2.ids | 27 +++ ...ay_specify_the_entity_of_the_whole_2_2.ifc | 12 ++ ...y_the_predefined_type_of_the_whole_2_2.ids | 30 +++ ...y_the_predefined_type_of_the_whole_2_2.ifc | 12 ++ ..._passes_a_containment_relationship_1_2.ids | 29 +++ ..._passes_a_containment_relationship_1_2.ifc | 11 ++ ...nested_whole_fails_a_nest_relationship.ids | 29 +++ ...nested_whole_fails_a_nest_relationship.ifc | 12 ++ ..._whole_fails_an_aggregate_relationship.ids | 29 +++ ..._whole_fails_an_aggregate_relationship.ifc | 12 ++ ...ontainer_entity_must_match_exactly_1_2.ids | 27 +++ ...ontainer_entity_must_match_exactly_1_2.ifc | 12 ++ ...fail-the_container_itself_always_fails.ids | 29 +++ ...fail-the_container_itself_always_fails.ifc | 12 ++ ...e_related_using_specified_relation_2_2.ids | 27 +++ ...e_related_using_specified_relation_2_2.ifc | 15 ++ ...predefined_type_must_match_exactly_1_2.ids | 30 +++ ...predefined_type_must_match_exactly_1_2.ifc | 12 ++ ...il-the_containment_can_be_indirect_2_2.ids | 27 +++ ...il-the_containment_can_be_indirect_2_2.ifc | 16 ++ ...the_nest_entity_must_match_exactly_1_2.ids | 27 +++ ...the_nest_entity_must_match_exactly_1_2.ifc | 12 ++ ...predefined_type_must_match_exactly_1_2.ids | 30 +++ ...predefined_type_must_match_exactly_1_2.ifc | 12 ++ ...predefined_type_must_match_exactly_1_2.ids | 30 +++ ...predefined_type_must_match_exactly_1_2.ifc | 12 ++ ...-a_group_entity_must_match_exactly_2_2.ids | 27 +++ ...-a_group_entity_must_match_exactly_2_2.ifc | 12 ++ ...predefined_type_must_match_exactly_2_2.ids | 30 +++ ...predefined_type_must_match_exactly_2_2.ifc | 12 ++ ...ed_element_passes_a_group_relationship.ids | 29 +++ ...ed_element_passes_a_group_relationship.ifc | 12 ++ ..._facet_checks_all_parameters_as_normal.ids | 29 +++ ..._facet_checks_all_parameters_as_normal.ifc | 12 ++ ...ty_may_pass_any_ancestral_whole_passes.ids | 27 +++ ...ty_may_pass_any_ancestral_whole_passes.ifc | 14 ++ ...ay_specify_the_entity_of_the_whole_1_2.ids | 27 +++ ...ay_specify_the_entity_of_the_whole_1_2.ifc | 12 ++ ...y_the_predefined_type_of_the_whole_1_2.ids | 30 +++ ...y_the_predefined_type_of_the_whole_1_2.ifc | 12 ++ ..._passes_a_containment_relationship_2_2.ids | 29 +++ ..._passes_a_containment_relationship_2_2.ifc | 12 ++ ...nested_part_passes_a_nest_relationship.ids | 29 +++ ...nested_part_passes_a_nest_relationship.ifc | 12 ++ .../pass-nesting_may_be_indirect.ids | 27 +++ .../pass-nesting_may_be_indirect.ifc | 14 ++ ..._part_passes_an_aggregate_relationship.ids | 29 +++ ..._part_passes_an_aggregate_relationship.ifc | 12 ++ ...ontainer_entity_must_match_exactly_2_2.ids | 27 +++ ...ontainer_entity_must_match_exactly_2_2.ifc | 12 ++ ...e_related_using_specified_relation_1_2.ids | 27 +++ ...e_related_using_specified_relation_1_2.ifc | 14 ++ ...predefined_type_must_match_exactly_2_2.ids | 30 +++ ...predefined_type_must_match_exactly_2_2.ifc | 12 ++ ...ss-the_containment_can_be_indirect_1_2.ids | 27 +++ ...ss-the_containment_can_be_indirect_1_2.ifc | 16 ++ ...the_nest_entity_must_match_exactly_2_2.ids | 27 +++ ...the_nest_entity_must_match_exactly_2_2.ifc | 12 ++ ...predefined_type_must_match_exactly_2_2.ids | 30 +++ ...predefined_type_must_match_exactly_2_2.ifc | 12 ++ 73 files changed, 1632 insertions(+), 23 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/partof.test.ts create mode 100644 packages/core/tests/fixtures/ids-partof/LICENSE create mode 100644 packages/core/tests/fixtures/ids-partof/README.md create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_group_entity_must_match_exactly_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_group_entity_must_match_exactly_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ifc diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/PartOf.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/PartOf.ts index 67bf951d4..5ead021bc 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/PartOf.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/PartOf.ts @@ -1,41 +1,52 @@ +import type * as FRAGS from "@thatopen/fragments"; import { Components } from "../../../../core/Components"; import { IDSFacet } from "./Facet"; import { IDSFacetParameter, IDSPartOfRelations, IDSSimpleCardinality, + IDSItemCheckResult, } from "../types"; import { IDSEntity } from "./Entity"; -import { ModelIdMap } from "../../../../fragments"; +import { + FragmentsManager, + ModelIdMap, + ModelIdDataMap, +} from "../../../../fragments"; +import { getParameterXML } from "../exporters/parameter"; +import { XML } from "../../../../utils/xml"; -// https://github.com/buildingSMART/IDS/blob/development/Documentation/UserManual/partof-facet.md +/** The inverse, child-to-parent names produced by the IFC importer. */ +const relations: Record = { + IFCRELAGGREGATES: ["Decomposes"], + IFCRELASSIGNSTOGROUP: ["HasAssignments"], + IFCRELCONTAINEDINSPATIALSTRUCTURE: ["ContainedInStructure"], + IFCRELNESTS: ["Nests"], + IFCRELVOIDSELEMENT: ["VoidsElements"], + IFCRELFILLSELEMENT: ["FillsVoids"], + "IFCRELVOIDSELEMENT IFCRELFILLSELEMENT": ["FillsVoids", "VoidsElements"], +}; +/** IDS 1.0 transitive part-of matching, including non-geometric objects. */ export class IDSPartOf extends IDSFacet { facetType = "PartOf" as const; - private _entityFacet: IDSEntity; - private _entity: { name: IDSFacetParameter; predefinedType?: IDSFacetParameter; }; - set entity(value: { name: IDSFacetParameter; predefinedType?: IDSFacetParameter; }) { this._entity = value; - const { name, predefinedType } = value; - this._entityFacet = new IDSEntity(this._components, name); - this._entityFacet.predefinedType = predefinedType; + this._entityFacet = new IDSEntity(this._components, value.name); + this._entityFacet.predefinedType = value.predefinedType; } - get entity() { return this._entity; } - relation?: IDSPartOfRelations; - cardinality: IDSSimpleCardinality = "required"; constructor( @@ -48,19 +59,135 @@ export class IDSPartOf extends IDSFacet { this._entityFacet.predefinedType = entity.predefinedType; } - serialize() { - return ""; + serialize(type: "applicability" | "requirement" = "requirement") { + const relation = this.relation + ? ` relation="${XML.escape(this.relation)}"` + : ""; + const cardinality = + type === "requirement" ? ` cardinality="${this.cardinality}"` : ""; + const instructions = + type === "requirement" && this.instructions + ? ` instructions="${XML.escape(this.instructions)}"` + : ""; + return `${getParameterXML("Name", this.entity.name)}${getParameterXML("PredefinedType", this.entity.predefinedType)}`; + } + + private async evaluate(items: ModelIdMap) { + const matchingParents: ModelIdMap = {}; + await this._entityFacet.getEntities( + Object.keys(items).map( + (id) => new RegExp(`^${id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}$`), + ), + matchingParents, + ); + const fragments = this._components.get(FragmentsManager); + const results: ModelIdMap = {}; + const names = this.relation + ? relations[this.relation] + : [...new Set(Object.values(relations).flat())]; + if (!names) + throw new Error(`Unsupported IDS partOf relation: ${this.relation}`); + const options = { + attributesDefault: true, + relations: Object.fromEntries( + names.map((name) => [name, { attributes: true, relations: false }]), + ), + }; + for (const [modelId, ids] of Object.entries(items)) { + const model = fragments.list.get(modelId); + if (!model) continue; + const targets = matchingParents[modelId] ?? new Set(); + if (!targets.size) continue; + // Per evaluation: never retain stale relations after a model edit. + const cache = new Map(); + const read = async (id: number) => { + if (!cache.has(id)) + cache.set(id, (await model.getItemsData([id], options))[0]); + return cache.get(id); + }; + for (const id of ids) { + const visited = new Set([id]); + const pending = [id]; + let found = false; + while (pending.length && !found) { + const item = await read(pending.pop()!); + if (!item) continue; + for (const name of names) { + const parents = item[name]; + if (!Array.isArray(parents)) continue; + for (const parent of parents) { + const parentId = Array.isArray(parent._localId) + ? undefined + : parent._localId?.value; + if (typeof parentId !== "number" || visited.has(parentId)) + continue; + visited.add(parentId); + if (targets.has(parentId)) { + found = true; + break; + } + pending.push(parentId); + } + if (found) break; + } + } + if (found) (results[modelId] ??= new Set()).add(id); + } + } + return results; } - async getEntities(_modelIds: RegExp[], _collector: ModelIdMap) { - // const fragments = this._components.get(FragmentsManager); - // const items: ModelIdMap = {}; - // await this._entityFacet.getEntities(modelIds, items); - // for (const [modelId, localIds] of Object.entries(items)) { - // const isValidModel = modelIds.find((regex) => regex.test(modelId)); - // if (!isValidModel) continue; - // } + async getEntities(modelIds: RegExp[], collector: ModelIdMap) { + const items: ModelIdMap = {}; + for (const [id, model] of this._components.get(FragmentsManager).list) { + if ( + !modelIds.some((regex) => { + regex.lastIndex = 0; + return regex.test(id); + }) + ) + continue; + items[id] = new Set( + Object.values(await model.getItemsOfCategories([/.*/])).flat(), + ); + } + const matches = await this.evaluate(items); + for (const [id, ids] of Object.entries(matches)) { + collector[id] ??= new Set(); + const target = collector[id]; + for (const localId of ids) target.add(localId); + } } - async test(_items: ModelIdMap) {} + async test( + items: ModelIdMap, + collector: ModelIdDataMap, + config = { skipIfFails: false }, + ) { + const matches = await this.evaluate(items); + for (const [modelId, ids] of Object.entries(items)) { + const model = this._components.get(FragmentsManager).list.get(modelId); + if (!model) continue; + const data = await model.getItemsData([...ids], { + attributesDefault: true, + }); + for (const item of data) { + if (Array.isArray(item._localId)) continue; + const checks = this.getItemChecks( + collector, + modelId, + item, + config.skipIfFails, + ); + if (!checks) continue; + const matched = matches[modelId]?.has(item._localId.value) ?? false; + checks.push({ + parameter: "Entity", + requiredValue: this.entity.name, + currentValue: matched, + pass: this.cardinality === "prohibited" ? !matched : matched, + }); + } + } + } } diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/partof.test.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/partof.test.ts new file mode 100644 index 000000000..f7d57b108 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/partof.test.ts @@ -0,0 +1,79 @@ +import * as FRAGS from "@thatopen/fragments"; +import * as WEBIFC from "web-ifc"; +import * as fs from "fs"; +import * as path from "path"; +import { describe, expect, it, vi } from "vitest"; +import { loadSourceBundle } from "../../../../../tests/source-bundle"; + +const OBC = await loadSourceBundle(); +const root = path.resolve(__dirname, "../../../../.."); +const fixtures = path.join(root, "tests/fixtures/ids-partof"); +const files = fs + .readdirSync(fixtures) + .filter((name) => /^(pass|fail)-.*\.ids$/.test(name)); +describe("IDSPartOf buildingSMART conformance", () => { + it.each(files)( + "%s", + async (name) => { + const importer = new FRAGS.IfcImporter(); + importer.wasm = { + path: `${path.resolve(root, "../../node_modules/web-ifc")}/`, + absolute: true, + }; + importer.includeRelationNames = true; + const ifc = fs.readFileSync( + path.join(fixtures, name.replace(/\.ids$/, ".ifc")), + "utf8", + ); + for (const [, category] of ifc.matchAll( + /#\d+\s*=\s*(IFC[A-Z0-9_]+)\s*\(/g, + )) { + const code = WEBIFC[category as keyof typeof WEBIFC]; + if (typeof code === "number") importer.classes.abstract.add(code); + } + for (const [code, child, parent] of [ + [WEBIFC.IFCRELASSIGNSTOGROUP, "HasAssignments", "IsGroupedBy"], + [WEBIFC.IFCRELVOIDSELEMENT, "VoidsElements", "HasOpenings"], + [WEBIFC.IFCRELFILLSELEMENT, "FillsVoids", "HasFillings"], + ] as const) + importer.relations.set(code, { + forRelated: child, + forRelating: parent, + }); + const bytes = await importer.process({ + bytes: new TextEncoder().encode(ifc), + raw: true, + }); + const model = new FRAGS.SingleThreadedFragmentsModel( + "partof", + bytes, + true, + ); + const components = new OBC.Components(); + const spy = vi + .spyOn(components.get(OBC.FragmentsManager), "list", "get") + .mockReturnValue(new Map([["partof", model]]) as never); + try { + const manager = components.get(OBC.IDSSpecifications); + const specs = manager.load( + fs.readFileSync(path.join(fixtures, name), "utf8"), + ); + let pass = true; + for (const spec of specs) { + const results = await spec.test([/^partof$/], { skipIfFails: false }); + for (const items of results.values()) + for (const item of items.values()) if (!item.pass) pass = false; + } + expect(pass).toBe(name.startsWith("pass-")); + const xml = manager.export({ title: "Part of" }, specs); + expect(xml).toContain(" + + + A group entity must match exactly 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCGROUP + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-a_group_entity_must_match_exactly_1_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-a_group_entity_must_match_exactly_1_2.ifc new file mode 100644 index 000000000..5c170e134 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-a_group_entity_must_match_exactly_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCINVENTORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELASSIGNSTOGROUP('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),$,#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ids b/packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ids new file mode 100644 index 000000000..23eab4294 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ids @@ -0,0 +1,29 @@ + + + + A non aggregated element fails an aggregate relationship + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ifc b/packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ifc new file mode 100644 index 000000000..329ebaedf --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-a_non_aggregated_element_fails_an_aggregate_relationship.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ids b/packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ids new file mode 100644 index 000000000..a8e76fc58 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ids @@ -0,0 +1,29 @@ + + + + A non grouped element fails a group relationship + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ifc b/packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ifc new file mode 100644 index 000000000..22962b500 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-a_non_grouped_element_fails_a_group_relationship.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCGROUP('0eA6m4fELI9QBIhP3wiLAp',$,'Unnamed','',$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids b/packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids new file mode 100644 index 000000000..0e2a389db --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids @@ -0,0 +1,29 @@ + + + + A prohibited facet returns the opposite of a required facet + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc b/packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc new file mode 100644 index 000000000..f221597c0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ids b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ids new file mode 100644 index 000000000..edb197978 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ids @@ -0,0 +1,27 @@ + + + + An aggregate may specify the entity of the whole 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCWALL + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ifc new file mode 100644 index 000000000..388ba9e5d --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_entity_of_the_whole_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSLAB('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ids b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ids new file mode 100644 index 000000000..6b6a2d675 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ids @@ -0,0 +1,30 @@ + + + + An aggregate may specify the predefined type of the whole 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCSLAB + + + SLABRADOR + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ifc new file mode 100644 index 000000000..0af8dbe09 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-an_aggregate_may_specify_the_predefined_type_of_the_whole_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSLAB('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,.BASESLAB.); +#2=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ids b/packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ids new file mode 100644 index 000000000..9afe2d521 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ids @@ -0,0 +1,29 @@ + + + + Any contained element passes a containment relationship 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ifc new file mode 100644 index 000000000..1de6164a3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-any_contained_element_passes_a_containment_relationship_1_2.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSPACE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ids b/packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ids new file mode 100644 index 000000000..fa5151b44 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ids @@ -0,0 +1,29 @@ + + + + Any nested whole fails a nest relationship + Generated via code automation in the Ids Repository on github. + + + + + + + IFCFURNITURE + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ifc b/packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ifc new file mode 100644 index 000000000..120cca0e1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-any_nested_whole_fails_a_nest_relationship.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCFURNITURE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCDISCRETEACCESSORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELNESTS('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ids b/packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ids new file mode 100644 index 000000000..dc580c5ca --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ids @@ -0,0 +1,29 @@ + + + + The aggregated whole fails an aggregate relationship + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ifc new file mode 100644 index 000000000..f221597c0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_aggregated_whole_fails_an_aggregate_relationship.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ids b/packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ids new file mode 100644 index 000000000..4e177bbd6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ids @@ -0,0 +1,27 @@ + + + + The container entity must match exactly 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCSITE + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ifc new file mode 100644 index 000000000..0535f8c9c --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_entity_must_match_exactly_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSPACE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ids b/packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ids new file mode 100644 index 000000000..2ba243bcb --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ids @@ -0,0 +1,29 @@ + + + + The container itself always fails + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSPACE + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ifc new file mode 100644 index 000000000..0535f8c9c --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_itself_always_fails.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSPACE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ids b/packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ids new file mode 100644 index 000000000..6afbbcee2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ids @@ -0,0 +1,27 @@ + + + + The container must be related using specified relation 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCSPACE + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ifc new file mode 100644 index 000000000..fd0ab7bb6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_must_be_related_using_specified_relation_2_2.ifc @@ -0,0 +1,15 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#2=IFCSPACE('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#2,(#1)); +#10=IFCPROJECT('1eA6m4fELI9QBIhP3wiLAp',$,'TestProject',$,$,$,$,$,$); +#11=IFCRELAGGREGATES('2eA6m4fELI9QBIhP3wiLAp',$,$,$,#10,(#2)); +ENDSEC; +END-ISO-10303-21; + diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ids b/packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ids new file mode 100644 index 000000000..444995d7a --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ids @@ -0,0 +1,30 @@ + + + + The container predefined type must match exactly 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCSPACE + + + WARREN + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ifc new file mode 100644 index 000000000..d30046549 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_container_predefined_type_must_match_exactly_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSPACE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,'BURROW',$,$,$,$,.USERDEFINED.,$,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ids b/packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ids new file mode 100644 index 000000000..ce5d54546 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ids @@ -0,0 +1,27 @@ + + + + The containment can be indirect 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCBUILDING + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ifc new file mode 100644 index 000000000..ef4107b96 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_containment_can_be_indirect_2_2.ifc @@ -0,0 +1,16 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSPACE('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$,$,$); +#2=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#2),#1); +#4=IFCBUILDING('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$,$,$); +#5=IFCRELAGGREGATES('0BbkGoC6vPvRW13UT7D8zH',$,$,$,#4,(#1)); +#10=IFCPROJECT('1eA6m4fELI9QBIhP3wiLAp',$,'TestProject',$,$,$,$,$,$); +#11=IFCRELAGGREGATES('2eA6m4fELI9QBIhP3wiLAp',$,$,$,#10,(#4)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ids b/packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ids new file mode 100644 index 000000000..aa18f6fc5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ids @@ -0,0 +1,27 @@ + + + + The nest entity must match exactly 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCDISCRETEACCESSORY + + + + + + + + IFCBEAM + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ifc new file mode 100644 index 000000000..120cca0e1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_nest_entity_must_match_exactly_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCFURNITURE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCDISCRETEACCESSORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELNESTS('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ids b/packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ids new file mode 100644 index 000000000..4a9cb1cca --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ids @@ -0,0 +1,30 @@ + + + + The nest predefined type must match exactly 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCDISCRETEACCESSORY + + + + + + + + IFCFURNITURE + + + LITTERBOX + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ifc b/packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ifc new file mode 100644 index 000000000..dd10ef978 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/fail-the_nest_predefined_type_must_match_exactly_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCFURNITURE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'WATERBOTTLE',$,$,$,.USERDEFINED.); +#2=IFCDISCRETEACCESSORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELNESTS('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ids b/packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ids new file mode 100644 index 000000000..7c3d118a9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ids @@ -0,0 +1,30 @@ + + + + A group predefined type must match exactly 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCINVENTORY + + + BUNNARY + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ifc b/packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ifc new file mode 100644 index 000000000..38d4a0796 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/invalid-a_group_predefined_type_must_match_exactly_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCINVENTORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,'BUNNY',.USERDEFINED.,$,$,$,$,$); +#3=IFCRELASSIGNSTOGROUP('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),$,#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ids b/packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ids new file mode 100644 index 000000000..7e7197bea --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ids @@ -0,0 +1,27 @@ + + + + A group entity must match exactly 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCINVENTORY + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ifc new file mode 100644 index 000000000..5c170e134 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_group_entity_must_match_exactly_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCINVENTORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELASSIGNSTOGROUP('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),$,#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ids b/packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ids new file mode 100644 index 000000000..b6bdc1c13 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ids @@ -0,0 +1,30 @@ + + + + A group predefined type must match exactly 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCINVENTORY + + + BUNNY + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ifc new file mode 100644 index 000000000..38d4a0796 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_group_predefined_type_must_match_exactly_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCINVENTORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,'BUNNY',.USERDEFINED.,$,$,$,$,$); +#3=IFCRELASSIGNSTOGROUP('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),$,#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ids b/packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ids new file mode 100644 index 000000000..a7492d4e2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ids @@ -0,0 +1,29 @@ + + + + A grouped element passes a group relationship + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ifc b/packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ifc new file mode 100644 index 000000000..e6b3903a9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_grouped_element_passes_a_group_relationship.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCGROUP('0eA6m4fELI9QBIhP3wiLAp',$,'Unnamed','',$); +#3=IFCRELASSIGNSTOGROUP('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),$,#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ids b/packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ids new file mode 100644 index 000000000..ae3348473 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ids @@ -0,0 +1,29 @@ + + + + A required facet checks all parameters as normal + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ifc b/packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ifc new file mode 100644 index 000000000..f221597c0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-a_required_facet_checks_all_parameters_as_normal.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ids b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ids new file mode 100644 index 000000000..3881d436a --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ids @@ -0,0 +1,27 @@ + + + + An aggregate entity may pass any ancestral whole passes + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCELEMENTASSEMBLY + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ifc b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ifc new file mode 100644 index 000000000..b0a6b74e4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_entity_may_pass_any_ancestral_whole_passes.ifc @@ -0,0 +1,14 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSLAB('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCBEAM('05rScmOVzMoQXOfbYdtLYj',$,$,$,$,$,$,$,$); +#4=IFCRELAGGREGATES('3Agm079vPIYBL4JExVrhD5',$,$,$,#1,(#2)); +#5=IFCRELAGGREGATES('0BbkGoC6vPvRW13UT7D8zH',$,$,$,#2,(#3)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ids b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ids new file mode 100644 index 000000000..eb43c314b --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ids @@ -0,0 +1,27 @@ + + + + An aggregate may specify the entity of the whole 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCSLAB + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ifc new file mode 100644 index 000000000..388ba9e5d --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_entity_of_the_whole_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSLAB('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ids b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ids new file mode 100644 index 000000000..579444142 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ids @@ -0,0 +1,30 @@ + + + + An aggregate may specify the predefined type of the whole 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCSLAB + + + BASESLAB + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ifc new file mode 100644 index 000000000..0af8dbe09 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-an_aggregate_may_specify_the_predefined_type_of_the_whole_1_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSLAB('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,.BASESLAB.); +#2=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ids b/packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ids new file mode 100644 index 000000000..be70c38e0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ids @@ -0,0 +1,29 @@ + + + + Any contained element passes a containment relationship 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ifc new file mode 100644 index 000000000..0535f8c9c --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-any_contained_element_passes_a_containment_relationship_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSPACE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ids b/packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ids new file mode 100644 index 000000000..2de9fddd5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ids @@ -0,0 +1,29 @@ + + + + Any nested part passes a nest relationship + Generated via code automation in the Ids Repository on github. + + + + + + + IFCDISCRETEACCESSORY + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ifc b/packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ifc new file mode 100644 index 000000000..120cca0e1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-any_nested_part_passes_a_nest_relationship.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCFURNITURE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCDISCRETEACCESSORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELNESTS('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ids b/packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ids new file mode 100644 index 000000000..f6d56a308 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ids @@ -0,0 +1,27 @@ + + + + Nesting may be indirect + Generated via code automation in the Ids Repository on github. + + + + + + + IFCMECHANICALFASTENER + + + + + + + + IFCFURNITURE + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ifc b/packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ifc new file mode 100644 index 000000000..5a204adef --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-nesting_may_be_indirect.ifc @@ -0,0 +1,14 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCFURNITURE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCDISCRETEACCESSORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCMECHANICALFASTENER('05rScmOVzMoQXOfbYdtLYj',$,$,$,$,$,$,$,$,$,$); +#4=IFCRELNESTS('3Agm079vPIYBL4JExVrhD5',$,$,$,#1,(#2)); +#5=IFCRELNESTS('0BbkGoC6vPvRW13UT7D8zH',$,$,$,#2,(#3)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ids b/packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ids new file mode 100644 index 000000000..c485b9b35 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ids @@ -0,0 +1,29 @@ + + + + The aggregated part passes an aggregate relationship + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ifc b/packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ifc new file mode 100644 index 000000000..f221597c0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_aggregated_part_passes_an_aggregate_relationship.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ids b/packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ids new file mode 100644 index 000000000..0d1d869fd --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ids @@ -0,0 +1,27 @@ + + + + The container entity must match exactly 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCSPACE + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ifc new file mode 100644 index 000000000..0535f8c9c --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_container_entity_must_match_exactly_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSPACE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ids b/packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ids new file mode 100644 index 000000000..9b11cc6f2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ids @@ -0,0 +1,27 @@ + + + + The container must be related using specified relation 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCSPACE + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ifc new file mode 100644 index 000000000..73d4c26ba --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_container_must_be_related_using_specified_relation_1_2.ifc @@ -0,0 +1,14 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#2=IFCSPACE('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$,$,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('0BbkGoC6vPvRW13UT7D8zH',$,$,$,(#1),#2); +#10=IFCPROJECT('1eA6m4fELI9QBIhP3wiLAp',$,'TestProject',$,$,$,$,$,$); +#11=IFCRELAGGREGATES('2eA6m4fELI9QBIhP3wiLAp',$,$,$,#10,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ids b/packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ids new file mode 100644 index 000000000..c1ca440ce --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ids @@ -0,0 +1,30 @@ + + + + The container predefined type must match exactly 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCELEMENTASSEMBLY + + + + + + + + IFCSPACE + + + BURROW + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ifc new file mode 100644 index 000000000..ac3dfe6bf --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_container_predefined_type_must_match_exactly_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCELEMENTASSEMBLY('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$); +#2=IFCSPACE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,'BURROW',$,$,$,$,.USERDEFINED.,$); +#3=IFCRELCONTAINEDINSPATIALSTRUCTURE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ids b/packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ids new file mode 100644 index 000000000..6a5244366 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ids @@ -0,0 +1,27 @@ + + + + The containment can be indirect 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + IFCBUILDING + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ifc new file mode 100644 index 000000000..418d81be2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_containment_can_be_indirect_1_2.ifc @@ -0,0 +1,16 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSPACE('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$,$,$); +#2=IFCBEAM('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELAGGREGATES('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +#4=IFCBUILDING('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,$,$,$); +#5=IFCRELAGGREGATES('15rScmOVzMoQXOfbYdtLYj',$,$,$,#4,(#1)); +#10=IFCPROJECT('1eA6m4fELI9QBIhP3wiLAp',$,'TestProject',$,$,$,$,$,$); +#11=IFCRELAGGREGATES('2eA6m4fELI9QBIhP3wiLAp',$,$,$,#10,(#4)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ids b/packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ids new file mode 100644 index 000000000..55fb3718c --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ids @@ -0,0 +1,27 @@ + + + + The nest entity must match exactly 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCDISCRETEACCESSORY + + + + + + + + IFCFURNITURE + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ifc new file mode 100644 index 000000000..120cca0e1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_nest_entity_must_match_exactly_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCFURNITURE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCDISCRETEACCESSORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELNESTS('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ids b/packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ids new file mode 100644 index 000000000..8bac6c2fe --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ids @@ -0,0 +1,30 @@ + + + + The nest predefined type must match exactly 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCDISCRETEACCESSORY + + + + + + + + IFCFURNITURE + + + WATERBOTTLE + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ifc b/packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ifc new file mode 100644 index 000000000..dd10ef978 --- /dev/null +++ b/packages/core/tests/fixtures/ids-partof/pass-the_nest_predefined_type_must_match_exactly_2_2.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCFURNITURE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'WATERBOTTLE',$,$,$,.USERDEFINED.); +#2=IFCDISCRETEACCESSORY('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELNESTS('05rScmOVzMoQXOfbYdtLYj',$,$,$,#1,(#2)); +ENDSEC; +END-ISO-10303-21;