From 00b243a2f4e166f5c9934945612fa45cd815f267 Mon Sep 17 00:00:00 2001 From: Helen Kwok <107752876+helenkwok@users.noreply.github.com> Date: Sun, 11 Oct 2026 13:08:52 +1030 Subject: [PATCH 01/11] fix(ids): require every applicability facet to match --- .../IDSSpecifications/src/Specification.ts | 13 ++- .../src/specification.test.ts | 89 +++++++++++++++++++ 2 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/specification.test.ts diff --git a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts index 96ce69af6..b55aca47a 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts @@ -1,7 +1,7 @@ import * as FRAGS from "@thatopen/fragments"; import { Components } from "../../../core/Components"; import { IDSCheckResult, IDSSpecificationData, IfcVersion } from "./types"; -import { UUID } from "../../../utils"; +import { UUID, ModelIdMapUtils } from "../../../utils"; import { IDSFacet } from "./facets"; import { IDSSpecifications } from ".."; import { ModelIdMap } from "../../../fragments"; @@ -61,14 +61,19 @@ export class IDSSpecification implements IDSSpecificationData { if (this.requirements.size === 0) return result; - // Get applicable elements - const entities: ModelIdMap = {}; + // Get applicable elements. In IDS an element is applicable only when it + // matches every applicability facet, so each facet collects its own + // matches and the results are intersected. + const facetEntities: ModelIdMap[] = []; const applicabilityPromises = []; for (const facet of this.applicability) { - applicabilityPromises.push(facet.getEntities(modelIds, entities)); + const facetMatches: ModelIdMap = {}; + facetEntities.push(facetMatches); + applicabilityPromises.push(facet.getEntities(modelIds, facetMatches)); } await Promise.all(applicabilityPromises); + const entities = ModelIdMapUtils.intersect(facetEntities); // Test applicable elements against requirements const requirementPromises = []; diff --git a/packages/core/src/openbim/IDSSpecifications/src/specification.test.ts b/packages/core/src/openbim/IDSSpecifications/src/specification.test.ts new file mode 100644 index 000000000..66e19b9b5 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/specification.test.ts @@ -0,0 +1,89 @@ +import * as FRAGS from "@thatopen/fragments"; +import * as fs from "fs"; +import * as path from "path"; +import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; +import type { Components } from "../../../index"; +import { loadSourceBundle } from "../../../../tests/source-bundle"; + +// Needs the real `Components`: see `loadSourceBundle`. +const OBC = await loadSourceBundle(); + +const MODEL_ID = "type-psets"; + +// `tests/fixtures/type-psets.ifc` (see facets/property.test.ts): six walls, +// four of which have Pset_WallCommon.IsExternal = TRUE, directly or through +// their type. +const WALLS = [40, 41, 42, 43, 45, 46]; +const WITH_IS_EXTERNAL_TRUE = [40, 41, 42, 46]; + +const convert = async () => { + const importer = new FRAGS.IfcImporter(); + const root = path.resolve(__dirname, "../../../.."); + importer.wasm = { + path: `${path.resolve(root, "../../node_modules/web-ifc")}/`, + absolute: true, + }; + const ifc = fs.readFileSync( + path.join(root, "tests", "fixtures", "type-psets.ifc"), + ); + const bytes = await importer.process({ + bytes: new Uint8Array(ifc), + raw: true, + }); + return new FRAGS.SingleThreadedFragmentsModel(MODEL_ID, bytes, true); +}; + +describe("IDSSpecification applicability", () => { + let components: Components; + let model: FRAGS.SingleThreadedFragmentsModel; + + beforeAll(async () => { + model = await convert(); + components = new OBC.Components(); + const fragments = components.get(OBC.FragmentsManager); + vi.spyOn(fragments, "list", "get").mockReturnValue( + new Map([[MODEL_ID, model]]) as never, + ); + }, 60_000); + + afterAll(() => { + vi.restoreAllMocks(); + components?.dispose(); + model?.dispose(); + }); + + const wall = () => + new OBC.IDSEntity(components, { type: "simple", parameter: "IFCWALL" }); + + const isExternal = () => { + const property = new OBC.IDSProperty( + components, + { type: "simple", parameter: "Pset_WallCommon" }, + { type: "simple", parameter: "IsExternal" }, + ); + property.value = { type: "simple", parameter: true }; + return property; + }; + + const tested = async ( + ...applicability: InstanceType[] + ) => { + const spec = components + .get(OBC.IDSSpecifications) + .create("applicability", ["IFC4"]); + for (const facet of applicability) spec.applicability.add(facet); + spec.requirements.add(wall()); + const result = await spec.test([new RegExp(MODEL_ID)]); + return [...(result.get(MODEL_ID)?.keys() ?? [])].sort((a, b) => a - b); + }; + + it("tests every element a single facet selects", async () => { + expect(await tested(wall())).toEqual(WALLS); + }); + + it("tests only the elements that match every applicability facet", async () => { + // IDS: applicability facets are combined with AND, so "a wall that is + // external" must not test the two walls that are not. + expect(await tested(wall(), isExternal())).toEqual(WITH_IS_EXTERNAL_TRUE); + }); +}); From 5315878967eaeecd079c5b6cbf086697892736aa Mon Sep 17 00:00:00 2001 From: Helen Kwok <107752876+helenkwok@users.noreply.github.com> Date: Sun, 11 Oct 2026 13:09:30 +1030 Subject: [PATCH 02/11] fix(ids): match patterns against the whole value and apply every length limit --- .../IDSSpecifications/src/facets/Facet.ts | 18 ++++--- .../src/facets/facet.test.ts | 48 +++++++++++++++++++ 2 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/facet.test.ts diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts index c4b7f43d6..bb0d1af8a 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts @@ -62,21 +62,19 @@ export abstract class IDSFacet { } if (facetParameter.type === "pattern") { - const regex = new RegExp(facetParameter.parameter); + // XSD patterns match the whole value, not a substring. + const regex = new RegExp(`^(?:${facetParameter.parameter})$`); pass = regex.test(String(value)); } if (facetParameter.type === "length") { + // Every given limit must hold, not just the last one checked. const { min, length, max } = facetParameter.parameter; - if (length !== undefined) { - pass = String(value).length === length; - } - if (min !== undefined) { - pass = String(value).length >= min; - } - if (max !== undefined) { - pass = String(value).length <= max; - } + const valueLength = String(value).length; + pass = + (length === undefined || valueLength === length) && + (min === undefined || valueLength >= min) && + (max === undefined || valueLength <= max); } if (facetParameter.type === "bounds" && typeof value === "number") { diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/facet.test.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/facet.test.ts new file mode 100644 index 000000000..7cc2840c5 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/facet.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it } from "vitest"; +import { IDSFacet } from "./Facet"; +import type { IDSFacetParameter } from "../types"; + +// evalRequirement is shared by every facet; a minimal facet exposes it. +class TestFacet extends IDSFacet { + facetType = "Attribute" as const; + async getEntities() {} + async test() {} + serialize() { + return ""; + } + matches( + value: string | number | boolean | null, + parameter: IDSFacetParameter, + ) { + return this.evalRequirement(value, parameter, "Value"); + } +} + +const facet = new TestFacet(undefined as never); +const pattern = (parameter: string): IDSFacetParameter => ({ + type: "pattern", + parameter, +}); +const length = (parameter: { + min?: number; + length?: number; + max?: number; +}): IDSFacetParameter => ({ type: "length", parameter }) as IDSFacetParameter; + +describe("IDSFacet.evalRequirement", () => { + it("matches a pattern against the whole value, as XSD does", () => { + expect(facet.matches("EW-01", pattern("EW-[0-9]{2}"))).toBe(true); + expect(facet.matches("XEW-01", pattern("EW-[0-9]{2}"))).toBe(false); + expect(facet.matches("EW-012", pattern("EW-[0-9]{2}"))).toBe(false); + expect(facet.matches("B", pattern("A|B"))).toBe(true); + expect(facet.matches("AB", pattern("A|B"))).toBe(false); + }); + + it("applies every length limit, not just the last one", () => { + expect(facet.matches("abc", length({ min: 2, max: 4 }))).toBe(true); + expect(facet.matches("a", length({ min: 2, max: 4 }))).toBe(false); + expect(facet.matches("abcde", length({ min: 2, max: 4 }))).toBe(false); + expect(facet.matches("abcd", length({ length: 3, max: 10 }))).toBe(false); + expect(facet.matches("abc", length({ length: 3 }))).toBe(true); + }); +}); From 8625b460b5eaaf16e6cb244cfd5733497e68a162 Mon Sep 17 00:00:00 2001 From: Helen Kwok <107752876+helenkwok@users.noreply.github.com> Date: Sat, 7 Nov 2026 13:04:48 +1030 Subject: [PATCH 03/11] fix(ids): apply optional and prohibited cardinality to the property facet as a whole --- .../IDSSpecifications/src/facets/Facet.ts | 6 +- .../IDSSpecifications/src/facets/Property.ts | 199 +++++++++++------- .../src/facets/property-cardinality.test.ts | 92 ++++++++ 3 files changed, 219 insertions(+), 78 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts index bb0d1af8a..d6b2b55cd 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts @@ -41,6 +41,8 @@ export abstract class IDSFacet { facetParameter: IDSFacetParameter, parameter: IDSFacetParameterName, checks?: IDSCheck[], + cardinality: IDSSimpleCardinality | IDSConditionalCardinaltiy = this + .cardinality, ) => { const checkLog: IDSCheck = { parameter, @@ -94,8 +96,8 @@ export abstract class IDSFacet { pass = minPass && maxPass; } - if (this.cardinality === "prohibited") pass = !pass; - if (this.cardinality === "optional") pass = true; + if (cardinality === "prohibited") pass = !pass; + if (cardinality === "optional") pass = true; checkLog.pass = pass; return checkLog.pass; diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts index c15b9e210..549f477b5 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts @@ -107,6 +107,8 @@ export class IDSProperty extends IDSFacet { set.Name.value, this.propertySet, "PropertySet", + undefined, + "required", ); if (!nameMatches) continue; @@ -310,91 +312,130 @@ export class IDSProperty extends IDSFacet { ); if (!checks) continue; - const sets = await this.getPsets(item); - const matchingSets = sets.filter((set) => { - if (!(set.Name && "value" in set.Name)) return false; - const result = this.evalRequirement( - set.Name.value, - this.propertySet, - "PropertySet", - ); - if (!result) return false; - checks.push({ - currentValue: set.Name.value, - parameter: "PropertySet", - pass: true, - requiredValue: this.propertySet, - }); - return true; - }); + // Evaluate the facet itself (as if required), then apply the + // cardinality once: a prohibited property passes when the facet does + // not match, and an optional one passes when the property is absent. + const facetChecks: IDSCheck[] = []; + const present = await this.evalFacet(item, facetChecks); + const matches = + facetChecks.length > 0 && facetChecks.every(({ pass }) => pass); - if (matchingSets.length === 0) { + if (this.cardinality === "prohibited") { + checks.push({ + parameter: "BaseName", + currentValue: present ? this.baseName.parameter : null, + pass: !matches, + requiredValue: this.baseName, + } as IDSCheck); + } else if (this.cardinality === "optional" && !present) { checks.push({ + parameter: "BaseName", currentValue: null, - parameter: "PropertySet", - pass: false, - requiredValue: this.propertySet, - }); - continue; + pass: true, + requiredValue: this.baseName, + } as IDSCheck); + } else { + checks.push(...facetChecks); } + } + } + } - for (const set of matchingSets) { - const propsListName = this.getPropertyListName(set); - if (!propsListName) continue; - - const props = set[propsListName]; - if (!Array.isArray(props)) { - checks.push({ - currentValue: null, - parameter: "BaseName", - pass: false, - requiredValue: this.baseName, - }); - continue; - } + /** + * Checks the property set, name, value and data type of one item, as for a + * required facet, and returns whether a property with the required set and + * name is present at all. + */ + private async evalFacet(item: FRAGS.ItemData, checks: IDSCheck[]) { + const sets = await this.getPsets(item); + const matchingSets = sets.filter((set) => { + if (!(set.Name && "value" in set.Name)) return false; + const result = this.evalRequirement( + set.Name.value, + this.propertySet, + "PropertySet", + undefined, + "required", + ); + if (!result) return false; + checks.push({ + currentValue: set.Name.value, + parameter: "PropertySet", + pass: true, + requiredValue: this.propertySet, + }); + return true; + }); - const matchingProps = props.filter((item) => { - if (!(item._category && item.Name)) return false; - if (!("value" in item._category && "value" in item.Name)) - return false; - if (this._unsupportedTypes.includes(item._category.value)) { - return false; - } - - const result = this.evalRequirement( - item.Name.value, - this.baseName, - "BaseName", - ); - if (!result) return false; + if (matchingSets.length === 0) { + checks.push({ + currentValue: null, + parameter: "PropertySet", + pass: false, + requiredValue: this.propertySet, + }); + return false; + } - checks.push({ - currentValue: item.Name.value, - parameter: "BaseName", - pass: true, - requiredValue: this.baseName, - }); - return true; - }); - - if (matchingProps.length === 0) { - checks.push({ - currentValue: null, - parameter: "BaseName", - pass: false, - requiredValue: this.baseName, - }); - continue; - } + let present = false; + for (const set of matchingSets) { + const propsListName = this.getPropertyListName(set); + if (!propsListName) continue; + + const props = set[propsListName]; + if (!Array.isArray(props)) { + checks.push({ + currentValue: null, + parameter: "BaseName", + pass: false, + requiredValue: this.baseName, + }); + continue; + } - for (const item of matchingProps) { - this.evalValue(item, checks); - this.evalDataType(item, checks); - this.evalURI(); - } + const matchingProps = props.filter((item) => { + if (!(item._category && item.Name)) return false; + if (!("value" in item._category && "value" in item.Name)) return false; + if (this._unsupportedTypes.includes(item._category.value)) { + return false; } + + const result = this.evalRequirement( + item.Name.value, + this.baseName, + "BaseName", + undefined, + "required", + ); + if (!result) return false; + + checks.push({ + currentValue: item.Name.value, + parameter: "BaseName", + pass: true, + requiredValue: this.baseName, + }); + return true; + }); + + if (matchingProps.length === 0) { + checks.push({ + currentValue: null, + parameter: "BaseName", + pass: false, + requiredValue: this.baseName, + }); + continue; + } + + present = true; + for (const item of matchingProps) { + this.evalValue(item, checks); + this.evalDataType(item, checks); + this.evalURI(); } } + return present; } private getPropertyListName(item: FRAGS.ItemData) { @@ -531,7 +572,13 @@ export class IDSProperty extends IDSFacet { if (typeof value === "string" && parameter.type === "simple") { parameter.parameter = String(parameter.parameter); } - return this.evalRequirement(value, parameter, "Value"); + return this.evalRequirement( + value, + parameter, + "Value", + undefined, + "required", + ); }); const pass = match !== undefined; if (checks) { @@ -580,7 +627,7 @@ export class IDSProperty extends IDSFacet { const types = this.getValueAttrs(item).map((attr) => attr.type ?? null); const dataType = { type: "simple" as const, parameter: this.dataType }; const match = types.find((type) => - this.evalRequirement(type, dataType, "DataType"), + this.evalRequirement(type, dataType, "DataType", undefined, "required"), ); const pass = match !== undefined; if (checks) { diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts new file mode 100644 index 000000000..174a9f1d8 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts @@ -0,0 +1,92 @@ +import * as FRAGS from "@thatopen/fragments"; +import * as fs from "fs"; +import * as path from "path"; +import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; +import type { Components } from "../../../../index"; +import { loadSourceBundle } from "../../../../../tests/source-bundle"; + +// Needs the real `Components`: see `loadSourceBundle`. +const OBC = await loadSourceBundle(); + +const MODEL_ID = "type-psets"; + +// `tests/fixtures/type-psets.ifc` (see property.test.ts): IsExternal is TRUE +// on walls 40, 41, 42 and 46, FALSE on 45, and absent on 43. +const WALLS = [40, 41, 42, 43, 45, 46]; + +const convert = async () => { + const importer = new FRAGS.IfcImporter(); + const root = path.resolve(__dirname, "../../../../.."); + importer.wasm = { + path: `${path.resolve(root, "../../node_modules/web-ifc")}/`, + absolute: true, + }; + const ifc = fs.readFileSync( + path.join(root, "tests", "fixtures", "type-psets.ifc"), + ); + const bytes = await importer.process({ + bytes: new Uint8Array(ifc), + raw: true, + }); + return new FRAGS.SingleThreadedFragmentsModel(MODEL_ID, bytes, true); +}; + +describe("IDSProperty cardinality as a requirement", () => { + let components: Components; + let model: FRAGS.SingleThreadedFragmentsModel; + + beforeAll(async () => { + model = await convert(); + components = new OBC.Components(); + const fragments = components.get(OBC.FragmentsManager); + vi.spyOn(fragments, "list", "get").mockReturnValue( + new Map([[MODEL_ID, model]]) as never, + ); + }, 60_000); + + afterAll(() => { + vi.restoreAllMocks(); + components?.dispose(); + model?.dispose(); + }); + + const passing = async ( + cardinality: "required" | "optional" | "prohibited", + value?: boolean, + ) => { + const facet = new OBC.IDSProperty( + components, + { type: "simple", parameter: "Pset_WallCommon" }, + { type: "simple", parameter: "IsExternal" }, + ); + if (value !== undefined) facet.value = { type: "simple", parameter: value }; + facet.cardinality = cardinality; + const results = new FRAGS.DataMap< + string, + FRAGS.DataMap + >(); + await facet.test({ [MODEL_ID]: new Set(WALLS) }, results as never, { + skipIfFails: false, + }); + return [...results.get(MODEL_ID)!.entries()] + .filter(([, result]) => result.pass) + .map(([id]) => id) + .sort((a, b) => a - b); + }; + + it("required: passes only where the property has the value", async () => { + expect(await passing("required", true)).toEqual([40, 41, 42, 46]); + }); + + it("prohibited without a value: passes only where the property is absent", async () => { + expect(await passing("prohibited")).toEqual([43]); + }); + + it("prohibited with a value: passes where the property is absent or different", async () => { + expect(await passing("prohibited", true)).toEqual([43, 45]); + }); + + it("optional: passes where the property is absent or has the value", async () => { + expect(await passing("optional", true)).toEqual([40, 41, 42, 43, 46]); + }); +}); From f15415b180ab8c38eced62a29cd12c5166118c14 Mon Sep 17 00:00:00 2001 From: Helen Kwok <107752876+helenkwok@users.noreply.github.com> Date: Sat, 7 Nov 2026 13:04:48 +1030 Subject: [PATCH 04/11] fix(ids): an optional property requirement never fails --- .../openbim/IDSSpecifications/src/facets/Property.ts | 10 ++++++---- .../src/facets/property-cardinality.test.ts | 11 +++++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts index 549f477b5..ea67320ce 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts @@ -313,8 +313,10 @@ export class IDSProperty extends IDSFacet { if (!checks) continue; // Evaluate the facet itself (as if required), then apply the - // cardinality once: a prohibited property passes when the facet does - // not match, and an optional one passes when the property is absent. + // cardinality once. Prohibited: passes when the facet does not match. + // Optional: never fails ("If the requirement is optional but would fail + // if it were required instead, the checker tool must not log an + // error", IDS developer guide). const facetChecks: IDSCheck[] = []; const present = await this.evalFacet(item, facetChecks); const matches = @@ -327,10 +329,10 @@ export class IDSProperty extends IDSFacet { pass: !matches, requiredValue: this.baseName, } as IDSCheck); - } else if (this.cardinality === "optional" && !present) { + } else if (this.cardinality === "optional") { checks.push({ parameter: "BaseName", - currentValue: null, + currentValue: present ? this.baseName.parameter : null, pass: true, requiredValue: this.baseName, } as IDSCheck); diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts index 174a9f1d8..75016fa06 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/property-cardinality.test.ts @@ -82,11 +82,10 @@ describe("IDSProperty cardinality as a requirement", () => { expect(await passing("prohibited")).toEqual([43]); }); - it("prohibited with a value: passes where the property is absent or different", async () => { - expect(await passing("prohibited", true)).toEqual([43, 45]); - }); - - it("optional: passes where the property is absent or has the value", async () => { - expect(await passing("optional", true)).toEqual([40, 41, 42, 43, 46]); + it("optional: never fails, whether the property is absent, matches or differs", async () => { + // buildingSMART IDS test cases "an optional facet always passes regardless + // of outcome", and the developer guide: an optional requirement that would + // fail if required must not be logged as an error. + expect(await passing("optional", true)).toEqual(WALLS); }); }); From e761358c0a87dfc60ce5cfada440e3318e18895f Mon Sep 17 00:00:00 2001 From: Helen Kwok <107752876+helenkwok@users.noreply.github.com> Date: Sat, 7 Nov 2026 18:13:51 +1030 Subject: [PATCH 05/11] fix(ids): keep minOccurs and maxOccurs of a specification on load and export The cardinality of a specification is set by minOccurs and maxOccurs on its applicability: required is 1 and unbounded, optional is 0 and unbounded, prohibited is 0 and 0. They were ignored on load and always written as 1 and unbounded on export, so an optional or prohibited specification came back required. Read both on load into IDSSpecification.minOccurs and maxOccurs (default 1 and unbounded) and write them back on export. --- .../src/openbim/IDSSpecifications/index.ts | 3 ++ .../IDSSpecifications/src/Specification.ts | 14 +++++- .../src/specification-occurs.test.ts | 50 +++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/specification-occurs.test.ts diff --git a/packages/core/src/openbim/IDSSpecifications/index.ts b/packages/core/src/openbim/IDSSpecifications/index.ts index d0e0619c2..2c86e6673 100644 --- a/packages/core/src/openbim/IDSSpecifications/index.ts +++ b/packages/core/src/openbim/IDSSpecifications/index.ts @@ -218,6 +218,9 @@ export class IDSSpecifications extends Component { specification.description = description; specification.instructions = instructions; specification.requirementsDescription = requirementsDescription; + const { minOccurs, maxOccurs } = applicability ?? {}; + if (typeof minOccurs === "number") specification.minOccurs = minOccurs; + if (typeof maxOccurs === "number") specification.maxOccurs = maxOccurs; specification.applicability.add(...applicabilities); specification.requirements.add(...reqs); result.push(specification); diff --git a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts index b55aca47a..f684c85ec 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts @@ -20,6 +20,18 @@ export class IDSSpecification implements IDSSpecificationData { description?: string; instructions?: string; requirementsDescription?: string; + + /** + * Minimum number of applicable elements: `1` makes the specification + * required, `0` optional. Read from `minOccurs` of the applicability. + */ + minOccurs = 1; + + /** + * Maximum number of applicable elements: `0` makes the specification + * prohibited. Read from `maxOccurs` of the applicability. + */ + maxOccurs: number | "unbounded" = "unbounded"; applicability = new FRAGS.DataSet(); requirements = new FRAGS.DataSet(); @@ -107,7 +119,7 @@ export class IDSSpecification implements IDSSpecificationData { : ""; const xml = ` - + ${[...this.applicability].map((facet) => facet.serialize("applicability")).join("\n")} diff --git a/packages/core/src/openbim/IDSSpecifications/src/specification-occurs.test.ts b/packages/core/src/openbim/IDSSpecifications/src/specification-occurs.test.ts new file mode 100644 index 000000000..69caae36b --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/specification-occurs.test.ts @@ -0,0 +1,50 @@ +import { describe, expect, it } from "vitest"; +import { loadSourceBundle } from "../../../../tests/source-bundle"; + +// Needs the real `Components`: see `loadSourceBundle`. +const OBC = await loadSourceBundle(); + +const ids = (occurs: string) => ` + + Occurs + + + + IFCWALL + + + +`; + +describe("IDSSpecification minOccurs / maxOccurs", () => { + const roundTrip = (occurs: string) => { + const manager = new OBC.Components().get(OBC.IDSSpecifications); + const [spec] = manager.load(ids(occurs)); + const xml = manager.export({ title: "t" }, [spec]); + const [again] = manager.load(xml); + return { spec, xml, again }; + }; + + it("required (1, unbounded) is the default", () => { + const { spec } = roundTrip(""); + expect([spec.minOccurs, spec.maxOccurs]).toEqual([1, "unbounded"]); + }); + + it("optional (0, unbounded) survives load and export", () => { + const { spec, xml, again } = roundTrip( + 'minOccurs="0" maxOccurs="unbounded"', + ); + expect([spec.minOccurs, spec.maxOccurs]).toEqual([0, "unbounded"]); + expect(xml).toContain( + '', + ); + expect([again.minOccurs, again.maxOccurs]).toEqual([0, "unbounded"]); + }); + + it("prohibited (0, 0) survives load and export", () => { + const { spec, xml, again } = roundTrip('minOccurs="0" maxOccurs="0"'); + expect([spec.minOccurs, spec.maxOccurs]).toEqual([0, 0]); + expect(xml).toContain(''); + expect([again.minOccurs, again.maxOccurs]).toEqual([0, 0]); + }); +}); From 401f5f6d94b28faf97c94d873988f69c6ff88ce6 Mon Sep 17 00:00:00 2001 From: Helen Kwok <107752876+helenkwok@users.noreply.github.com> Date: Sat, 7 Nov 2026 18:14:21 +1030 Subject: [PATCH 06/11] feat(ids): add IDSSpecification.verify() for the specification-level verdict A required specification fails when too few elements are applicable, a prohibited one fails when any is, and an optional one may pass with none (IDS developer guide, Optionality). The requirements of a prohibited specification are ignored. The existing test() is unchanged. verify() returns the verdict, the number of applicable elements and the same per-element result as test(). --- .../IDSSpecifications/src/Specification.ts | 47 +++++++- .../src/specification-cardinality.test.ts | 103 ++++++++++++++++++ 2 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/specification-cardinality.test.ts diff --git a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts index f684c85ec..f8676a5b6 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts @@ -69,9 +69,40 @@ export class IDSSpecification implements IDSSpecificationData { modelIds: RegExp[], config: { skipIfFails: boolean } = { skipIfFails: true }, ) { - const result: IDSCheckResult = new FRAGS.DataMap(); + return (await this.run(modelIds, config)).result; + } - if (this.requirements.size === 0) return result; + /** + * Tests the models and also applies the specification's cardinality + * (`minOccurs` / `maxOccurs`): a required specification fails when too few + * elements are applicable, a prohibited one fails when any is, and an + * optional one may pass with none. Requirements of a prohibited + * specification are not evaluated. + * + * @returns `pass` is the specification-level verdict, `applicable` the number + * of applicable elements, and `result` the same per-element result as {@link test}. + */ + async verify( + modelIds: RegExp[], + config: { skipIfFails: boolean } = { skipIfFails: true }, + ) { + const { result, applicable } = await this.run(modelIds, config, true); + const max = this.maxOccurs === "unbounded" ? Infinity : this.maxOccurs; + let pass = applicable >= this.minOccurs && applicable <= max; + if (max > 0) { + for (const items of result.values()) { + for (const item of items.values()) if (!item.pass) pass = false; + } + } + return { pass, applicable, result }; + } + + private async run( + modelIds: RegExp[], + config: { skipIfFails: boolean }, + skipProhibitedRequirements = false, + ) { + const result: IDSCheckResult = new FRAGS.DataMap(); // Get applicable elements. In IDS an element is applicable only when it // matches every applicability facet, so each facet collects its own @@ -87,6 +118,16 @@ export class IDSSpecification implements IDSSpecificationData { await Promise.all(applicabilityPromises); const entities = ModelIdMapUtils.intersect(facetEntities); + let applicable = 0; + for (const ids of Object.values(entities)) applicable += ids.size; + + if ( + this.requirements.size === 0 || + (skipProhibitedRequirements && this.maxOccurs === 0) + ) { + return { result, applicable }; + } + // Test applicable elements against requirements const requirementPromises = []; for (const requirement of this.requirements) { @@ -94,7 +135,7 @@ export class IDSSpecification implements IDSSpecificationData { } await Promise.all(requirementPromises); - return result; + return { result, applicable }; } /** diff --git a/packages/core/src/openbim/IDSSpecifications/src/specification-cardinality.test.ts b/packages/core/src/openbim/IDSSpecifications/src/specification-cardinality.test.ts new file mode 100644 index 000000000..6b4ebb727 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/specification-cardinality.test.ts @@ -0,0 +1,103 @@ +import * as FRAGS from "@thatopen/fragments"; +import * as fs from "fs"; +import * as path from "path"; +import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; +import type { Components } from "../../../index"; +import { loadSourceBundle } from "../../../../tests/source-bundle"; + +// Needs the real `Components`: see `loadSourceBundle`. +const OBC = await loadSourceBundle(); + +const MODEL_ID = "cardinality"; + +// `tests/fixtures/type-psets.ifc` holds six walls and no slabs. +const ids = ( + cardinality: string, + entity: string, + requirements = "", +) => ` + + Cardinality + + + + ${entity} + + ${requirements} + + +`; + +const waldo = ` + Name + Waldo +`; + +describe("IDSSpecification cardinality (minOccurs / maxOccurs)", () => { + let components: Components; + let model: FRAGS.SingleThreadedFragmentsModel; + + beforeAll(async () => { + const importer = new FRAGS.IfcImporter(); + const root = path.resolve(__dirname, "../../../.."); + importer.wasm = { + path: `${path.resolve(root, "../../node_modules/web-ifc")}/`, + absolute: true, + }; + const ifc = fs.readFileSync( + path.join(root, "tests", "fixtures", "type-psets.ifc"), + ); + const bytes = await importer.process({ + bytes: new Uint8Array(ifc), + raw: true, + }); + model = new FRAGS.SingleThreadedFragmentsModel(MODEL_ID, bytes, true); + components = new OBC.Components(); + vi.spyOn( + components.get(OBC.FragmentsManager), + "list", + "get", + ).mockReturnValue(new Map([[MODEL_ID, model]]) as never); + }, 60_000); + + afterAll(() => { + vi.restoreAllMocks(); + components?.dispose(); + model?.dispose(); + }); + + const verify = async (xml: string) => { + const [spec] = components.get(OBC.IDSSpecifications).load(xml); + return spec.verify([new RegExp(MODEL_ID)], { skipIfFails: false }); + }; + + const required = 'minOccurs="1" maxOccurs="unbounded"'; + const optional = 'minOccurs="0" maxOccurs="unbounded"'; + const prohibited = 'minOccurs="0" maxOccurs="0"'; + + it("required: fails when nothing is applicable", async () => { + expect((await verify(ids(required, "IFCSLAB", waldo))).pass).toBe(false); + }); + + it("required: applicable elements are still judged by the requirements", async () => { + expect((await verify(ids(required, "IFCWALL", waldo))).pass).toBe(false); + }); + + it("optional: may pass when nothing is applicable", async () => { + expect((await verify(ids(optional, "IFCSLAB", waldo))).pass).toBe(true); + }); + + it("prohibited: fails when the applicability matches", async () => { + const r = await verify(ids(prohibited, "IFCWALL")); + expect(r.applicable).toBe(6); + expect(r.pass).toBe(false); + }); + + it("prohibited: passes when the applicability does not match", async () => { + expect((await verify(ids(prohibited, "IFCSLAB"))).pass).toBe(true); + }); + + it("prohibited: does not throw when requirements are (invalidly) given", async () => { + expect((await verify(ids(prohibited, "IFCSLAB", waldo))).pass).toBe(true); + }); +}); From 64ace749be6c82a66ff240edbb1878b683b78d26 Mon Sep 17 00:00:00 2001 From: Riho Kirss Date: Sat, 7 Nov 2026 20:26:42 +0200 Subject: [PATCH 07/11] 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; From ae0334a155c3d3ade78635da81b83edfb2c20f29 Mon Sep 17 00:00:00 2001 From: Riho Kirss Date: Sat, 7 Nov 2026 20:43:45 +0200 Subject: [PATCH 08/11] feat(ids): implement classification matching --- .../src/facets/Classification.ts | 484 ++++++++---------- .../src/facets/classification.test.ts | 91 ++++ .../tests/fixtures/ids-classification/LICENSE | 6 + .../fixtures/ids-classification/README.md | 5 + ...no_data_matches_any_classification_1_2.ids | 27 + ...no_data_matches_any_classification_1_2.ifc | 25 + ...turns_the_opposite_of_a_required_facet.ids | 28 + ...turns_the_opposite_of_a_required_facet.ifc | 25 + ...turns_the_opposite_of_a_required_facet.ids | 27 + ...turns_the_opposite_of_a_required_facet.ifc | 25 + ...lassification_system_fails_if_no_match.ids | 25 + ...lassification_system_fails_if_no_match.ifc | 25 + ...classification_value_fails_if_no_match.ids | 30 ++ ...classification_value_fails_if_no_match.ifc | 13 + ..._match__all__not_any__if_specified_2_2.ids | 28 + ..._match__all__not_any__if_specified_2_2.ifc | 25 + ...the_type_classification_per_system_2_3.ids | 30 ++ ...the_type_classification_per_system_2_3.ifc | 18 + ...strictions_can_be_used_for_systems_1_2.ids | 27 + ...strictions_can_be_used_for_systems_1_2.ifc | 25 + ...estrictions_can_be_used_for_values_3_3.ids | 32 ++ ...estrictions_can_be_used_for_values_3_3.ifc | 25 + .../fail-systems_should_match_exactly_2_5.ids | 25 + .../fail-systems_should_match_exactly_2_5.ifc | 25 + ...no_data_matches_any_classification_2_2.ids | 27 + ...no_data_matches_any_classification_2_2.ifc | 25 + ..._facet_checks_all_parameters_as_normal.ids | 27 + ..._facet_checks_all_parameters_as_normal.ifc | 25 + ...al_classification_value_passes_if_null.ids | 30 ++ ...al_classification_value_passes_if_null.ifc | 13 + ...assification_value_passes_if_specified.ids | 30 ++ ...assification_value_passes_if_specified.ifc | 13 + ..._match__all__not_any__if_specified_1_2.ids | 28 + ..._match__all__not_any__if_specified_1_2.ifc | 25 + ...sification_references_should_also_pass.ids | 30 ++ ...sification_references_should_also_pass.ifc | 25 + ...the_type_classification_per_system_1_3.ids | 30 ++ ...the_type_classification_per_system_1_3.ifc | 18 + ...the_type_classification_per_system_3_3.ids | 30 ++ ...the_type_classification_per_system_3_3.ifc | 18 + ...strictions_can_be_used_for_systems_2_2.ids | 27 + ...strictions_can_be_used_for_systems_2_2.ifc | 25 + ...estrictions_can_be_used_for_values_1_3.ids | 32 ++ ...estrictions_can_be_used_for_values_1_3.ifc | 25 + ...estrictions_can_be_used_for_values_2_3.ids | 32 ++ ...estrictions_can_be_used_for_values_2_3.ifc | 25 + .../pass-systems_should_match_exactly_1_5.ids | 25 + .../pass-systems_should_match_exactly_1_5.ifc | 25 + .../pass-systems_should_match_exactly_3_5.ids | 25 + .../pass-systems_should_match_exactly_3_5.ifc | 25 + .../pass-systems_should_match_exactly_4_5.ids | 25 + .../pass-systems_should_match_exactly_4_5.ifc | 25 + .../pass-systems_should_match_exactly_5_5.ids | 25 + .../pass-systems_should_match_exactly_5_5.ifc | 25 + ...d_match_ef_25_10_25__ef_25_10_30__etc_.ids | 30 ++ ...d_match_ef_25_10_25__ef_25_10_30__etc_.ifc | 25 + ...f_lightweight_classifications_are_used.ids | 30 ++ ...f_lightweight_classifications_are_used.ifc | 25 + 58 files changed, 1691 insertions(+), 275 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/classification.test.ts create mode 100644 packages/core/tests/fixtures/ids-classification/LICENSE create mode 100644 packages/core/tests/fixtures/ids-classification/README.md create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_classification_facet_with_no_data_matches_any_classification_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_classification_facet_with_no_data_matches_any_classification_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_systems_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_systems_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ids create mode 100644 packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ifc create mode 100644 packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ids create mode 100644 packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ifc diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Classification.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Classification.ts index 41bd2a715..da6114263 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Classification.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Classification.ts @@ -1,302 +1,236 @@ +import type * as FRAGS from "@thatopen/fragments"; import { Components } from "../../../../core/Components"; import { IDSFacetParameter, IDSItemCheckResult } from "../types"; import { IDSFacet } from "./Facet"; import { getParameterXML } from "../exporters/parameter"; -import { ModelIdDataMap, ModelIdMap } from "../../../../fragments"; +import { + FragmentsManager, + ModelIdDataMap, + ModelIdMap, +} from "../../../../fragments"; import { XML } from "../../../../utils/xml"; -// https://github.com/buildingSMART/IDS/blob/development/Documentation/UserManual/classification-facet.md - +type Classification = { system: string; values: string[] }; +const value = (item: FRAGS.ItemData, name: string) => { + const attribute = item[name]; + return attribute && !Array.isArray(attribute) ? attribute.value : undefined; +}; +const refs = (item: FRAGS.ItemData, name: string): FRAGS.ItemData[] => { + const data = item[name]; + return Array.isArray(data) ? data : []; +}; + +/** Classification systems and codes, including reference chains and type inheritance. */ export class IDSClassification extends IDSFacet { facetType = "Classification" as const; system: IDSFacetParameter; value?: IDSFacetParameter; uri?: string; - constructor(components: Components, system: IDSFacetParameter) { super(components); this.system = system; } serialize(type: "applicability" | "requirement") { - const systemXML = getParameterXML("System", this.system); - const valueXML = getParameterXML("Value", this.value); - let attributes = ""; - if (type === "requirement") { - attributes += `cardinality="${this.cardinality}"`; - attributes += this.uri ? `uri=${this.uri}` : ""; - attributes += this.instructions - ? `instructions="${XML.escape(this.instructions)}"` + const attributes = + type === "requirement" + ? ` cardinality="${this.cardinality}"${this.uri ? ` uri="${XML.escape(this.uri)}"` : ""}${this.instructions ? ` instructions="${XML.escape(this.instructions)}"` : ""}` : ""; + return `${getParameterXML("Value", this.value)}${getParameterXML("System", this.system)}`; + } + + private async evaluate(items: ModelIdMap) { + const result = new Map>(); + const options = { + attributesDefault: true, + relations: { + HasAssociations: { attributes: true, relations: false }, + HasClassifications: { attributes: true, relations: false }, + HasExternalReferences: { attributes: true, relations: false }, + ReferencedSource: { attributes: true, relations: false }, + RelatingReference: { attributes: true, relations: false }, + RelatedResourceObjects: { attributes: true, relations: false }, + IsTypedBy: { attributes: true, relations: false }, + IsDefinedBy: { attributes: true, relations: false }, + }, + }; + for (const [modelId, ids] of Object.entries(items)) { + const model = this._components.get(FragmentsManager).list.get(modelId); + if (!model) continue; + const cache = new Map(); + const read = async (item: FRAGS.ItemData) => { + const id = value(item, "_localId"); + if (typeof id !== "number") return item; + if (!cache.has(id)) + cache.set(id, (await model.getItemsData([id], options))[0]); + return cache.get(id) ?? item; + }; + const classification = async ( + item: FRAGS.ItemData, + ): Promise => { + const codes: string[] = []; + const seen = new Set(); + let current: FRAGS.ItemData | undefined = item; + while (current) { + const id = value(current, "_localId"); + if (typeof id === "number") { + if (seen.has(id)) return null; + seen.add(id); + } + const data = await read(current); + const category = value(data, "_category"); + if (category === "IFCCLASSIFICATION") { + const name = value(data, "Name"); + return { + system: typeof name === "string" ? name : "", + values: codes, + }; + } + if (category !== "IFCCLASSIFICATIONREFERENCE") return null; + const code = + value(data, "Identification") ?? value(data, "ItemReference"); + if (typeof code === "string" && code) codes.push(code); + current = refs(data, "ReferencedSource")[0]; + } + return null; + }; + const externalReferences = new Map(); + const externalIds = Object.values( + await model.getItemsOfCategories([ + /^IFCEXTERNALREFERENCERELATIONSHIP$/, + ]), + ).flat(); + if (externalIds.length) { + const external = await model.getItemsData(externalIds, options); + for (const relationship of external) { + const reference = refs(relationship, "RelatingReference")[0]; + if (!reference) continue; + for (const resource of refs(relationship, "RelatedResourceObjects")) { + const id = value(resource, "_localId"); + if (typeof id !== "number") continue; + const previous = externalReferences.get(id) ?? []; + previous.push(reference); + externalReferences.set(id, previous); + } + } + } + const own = async (item: FRAGS.ItemData) => { + const found: Classification[] = []; + for (const ref of [ + ...refs(item, "HasAssociations"), + ...refs(item, "HasClassifications"), + ...refs(item, "HasExternalReferences"), + ...(externalReferences.get(value(item, "_localId") as number) ?? []), + ]) { + const data = await classification(ref); + if (data) found.push(data); + } + return found; + }; + const modelResult = new Map(); + result.set(modelId, modelResult); + for (const id of ids) { + const item = await read({ _localId: { value: id } } as FRAGS.ItemData); + const classifications = await own(item); + const ownSystems = new Set(classifications.map((c) => c.system)); + const types = [ + ...refs(item, "IsTypedBy"), + ...refs(item, "IsDefinedBy").filter((t) => + String(value(t, "_category")).endsWith("TYPE"), + ), + ]; + for (const type of types) { + for (const inherited of await own(await read(type))) + if (!ownSystems.has(inherited.system)) + classifications.push(inherited); + } + modelResult.set(id, classifications); + } } - return ` - ${systemXML} - ${valueXML} -`; + return result; + } + + private matches(classifications: Classification[]) { + return classifications.some( + (c) => + this.evalRequirement( + c.system, + this.system, + "System", + undefined, + "required", + ) && + (!this.value || + c.values.some((code) => + this.evalRequirement( + code, + this.value!, + "Value", + undefined, + "required", + ), + )), + ); } - async getEntities(_modelIds: RegExp[], _collector: ModelIdMap) { - // const result: number[] = []; - // const fragments = this._components.get(FragmentsManager); - // for (const [modelId, model] of fragments.list) { - // const isValidModel = modelIds.find((regex) => regex.test(modelId)); - // if (!isValidModel) continue; - // const items = await model.getItemsOfCategories([ - // /CLASSIFICATIONREFERENCE/, - // /CLASSIFICATION/, - // ]); - // const localIds = Object.values(items).flat(); - // if (localIds.length === 0) continue; - // const data = await model.getItemsData(localIds, { - // relations: { ReferencedSource: { attributes: true, relations: false } }, - // }); - // for (const set of data) { - // if ( - // !( - // "value" in set._localId && - // "value" in set._category && - // "value" in set.Name && - // Array.isArray(set.ReferencedSource) - // ) - // ) { - // continue; - // } - // const classificationAttrs = - // await model.getProperties(referencedSourceID); - // if (!classificationAttrs) continue; - // const systemMatches = this.evalSystem(classificationAttrs); - // if (!systemMatches) continue; - // const valueMatches = this.evalValue(attrs); - // if (!valueMatches) continue; - // const uriMatches = this.evalURI(attrs); - // if (!uriMatches) continue; - // } - // } - // for (const id in systems) { - // const classificationID = Number(id); - // const attrs = await model.getProperties(classificationID); - // if (!attrs) continue; - // } - // const indexer = this._components.get(IfcRelationsIndexer); - // for (const classificationID of matchingClassifications) { - // const expressIDs = indexer.getEntitiesWithRelation( - // model, - // "HasAssociations", - // classificationID, - // ); - // for (const expressID of expressIDs) { - // if (expressID in collector) continue; - // const attrs = await model.getProperties(expressID); - // if (!attrs) continue; - // collector[expressID] = attrs; - // result.push(expressID); - // } - // } - // return result; + 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(), + ); + } + for (const [id, classifications] of await this.evaluate(items)) { + for (const [localId, data] of classifications) { + if (!this.matches(data)) continue; + collector[id] ??= new Set(); + collector[id].add(localId); + } + } } async test( - _items: ModelIdMap, - _collector: ModelIdDataMap, + items: ModelIdMap, + collector: ModelIdDataMap, + config = { skipIfFails: false }, ) { - // for (const _expressID in items) { - // const expressID = Number(_expressID); - // const attrs = items[expressID]; - // const checks: IDSCheck[] = []; - // const result: IDSCheckResult = { - // guid: attrs.GlobalId?.value, - // expressID, - // pass: false, - // checks, - // cardinality: this.cardinality, - // }; - // this.testResult.push(result); - // let missingClassification = true; - // const elementClassifications = await this.getSystems(model, expressID); - // const allSystemNames = elementClassifications - // .map((classification) => this.getSystemName(classification)) - // .filter((system) => system) as string[]; - // for (const classificationAttrs of elementClassifications) { - // const systemMatches = this.evalSystem(classificationAttrs, checks); - // if (!systemMatches) continue; - // missingClassification = false; - // if (!(this.value && this.system)) break; - // if (classificationAttrs.type !== WEBIFC.IFCCLASSIFICATIONREFERENCE) { - // continue; - // } - // const valueMatches = - // !this.value || this.evalValue(classificationAttrs, checks); - // const uriMatches = - // !this.uri || this.evalURI(classificationAttrs, checks); - // if (valueMatches && uriMatches) break; - // } - // if (missingClassification) { - // this.addCheckResult( - // { - // parameter: "System", - // currentValue: allSystemNames as any, - // requiredValue: this.system, - // pass: this.cardinality === "optional", - // }, - // checks, - // ); - // } - // result.pass = checks.every(({ pass }) => pass); - // } + for (const [modelId, data] of await this.evaluate(items)) { + const model = this._components.get(FragmentsManager).list.get(modelId); + if (!model) continue; + for (const item of await model.getItemsData([...data.keys()], { + attributesDefault: true, + })) { + const id = value(item, "_localId"); + if (typeof id !== "number") continue; + const checks = this.getItemChecks( + collector, + modelId, + item, + config.skipIfFails, + ); + if (!checks) continue; + const classifications = data.get(id) ?? []; + const matched = this.matches(classifications); + // URI describes the requirement; it is not an IFC matching condition. + checks.push({ + parameter: "System", + requiredValue: this.system, + currentValue: classifications.map((c) => c.system), + pass: + this.cardinality === "prohibited" + ? !matched + : (this.cardinality === "optional" && + classifications.length === 0) || + matched, + }); + } + } } - - // private async processReferencedSource( - // model: FRAGS.FragmentsGroup, - // attrs: Record, - // ) { - // const sourceID = attrs.ReferencedSource?.value; - // if (!sourceID) return null; - // const sourceAttrs = await model.getProperties(sourceID); - // if (!sourceAttrs) return null; - // if (sourceAttrs.type === WEBIFC.IFCCLASSIFICATIONREFERENCE) { - // sourceAttrs.ReferencedSource = await this.processReferencedSource( - // model, - // sourceAttrs, - // ); - // } - // return sourceAttrs; - // } - - // private async getSystems(model: FRAGS.FragmentsGroup, expressID: number) { - // const result: Record[] = []; - // const indexer = this._components.get(IfcRelationsIndexer); - // const ocurrenceAssociations = indexer.getEntityRelations( - // model, - // expressID, - // "HasAssociations", - // ); - // if (ocurrenceAssociations) { - // for (const id of ocurrenceAssociations) { - // const attrs = await model.getProperties(id); - // if (!attrs) continue; - // if (attrs.type === WEBIFC.IFCCLASSIFICATION) { - // result.push(attrs); - // } - // if (attrs.type === WEBIFC.IFCCLASSIFICATIONREFERENCE) { - // attrs.ReferencedSource = await this.processReferencedSource( - // model, - // attrs, - // ); - // if (attrs.ReferencedSource) result.push(attrs); - // } - // } - // } - - // // As occurence classifications prevail over type clasifications - // // the classification systems used by the occurrence are get - // // so type classifications are not included - // const occurrenceSystems = result - // .map((attrs) => { - // if (attrs.type === WEBIFC.IFCCLASSIFICATION) { - // return attrs.Name?.value; - // } - // if (attrs.type === WEBIFC.IFCCLASSIFICATIONREFERENCE) { - // return attrs.ReferencedSource?.Name?.value; - // } - // return null; - // }) - // .filter((name) => name); - - // const types = indexer.getEntityRelations(model, expressID, "IsTypedBy"); - // if (!(types && types[0])) return result; - // const type = types[0]; - // const typeAssociations = indexer.getEntityRelations( - // model, - // type, - // "HasAssociations", - // ); - // if (typeAssociations) { - // for (const id of typeAssociations) { - // const attrs = await model.getProperties(id); - // if (!attrs) continue; - // if (attrs.type === WEBIFC.IFCCLASSIFICATION) { - // if (occurrenceSystems.includes(attrs.Name?.value)) continue; - // result.push(attrs); - // } - // if (attrs.type === WEBIFC.IFCCLASSIFICATIONREFERENCE) { - // attrs.ReferencedSource = await this.processReferencedSource( - // model, - // attrs, - // ); - // if (attrs.ReferencedSource) result.push(attrs); - // } - // } - // } - - // return result; - // } - - // private getSystemName(attrs: Record): string | null { - // if (attrs.type === WEBIFC.IFCCLASSIFICATION) { - // return attrs.Name?.value; - // } - // if (attrs.type === WEBIFC.IFCCLASSIFICATIONREFERENCE) { - // if (attrs.ReferencedSource?.type === WEBIFC.IFCCLASSIFICATIONREFERENCE) { - // return this.getSystemName(attrs.ReferencedSource); - // } - // if (attrs.ReferencedSource?.type === WEBIFC.IFCCLASSIFICATION) { - // return attrs.ReferencedSource.Name?.value; - // } - // } - // return null; - // } - - // private getAllReferenceIdentifications(attrs: Record) { - // if (attrs.type !== WEBIFC.IFCCLASSIFICATIONREFERENCE) return null; - // const identifications: string[] = []; - // if (attrs.Identification) identifications.push(attrs.Identification.value); - // if (attrs.ReferencedSource) { - // const identification = this.getAllReferenceIdentifications( - // attrs.ReferencedSource, - // ); - // if (identification) identifications.push(...identification); - // } - // return identifications; - // } - - // private evalSystem(attrs: Record, checks?: IDSCheck[]) { - // const name = this.getSystemName(attrs); - // return this.evalRequirement(name, this.system, "System", checks); - // } - - // private evalValue(attrs: any, checks?: IDSCheck[]) { - // if (!this.value) return true; - // const identifications = this.getAllReferenceIdentifications(attrs); - // if (!identifications) return false; - // const identifier = identifications.find((id) => { - // if (!this.value) return false; - // return this.evalRequirement(id, this.value, "Value"); - // }); - // if (checks) { - // this.addCheckResult( - // { - // parameter: "Value", - // currentValue: identifier ?? null, - // requiredValue: this.value, - // pass: !!identifier, - // }, - // checks, - // ); - // } - // return !!identifier; - // } - - // private evalURI(attrs: any, checks?: IDSCheck[]) { - // if (!this.uri) return true; - // const result = this.evalRequirement( - // attrs.Location?.value, - // { - // type: "simple", - // parameter: this.uri, - // }, - // "URI", - // checks, - // ); - // return result; - // } } diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/classification.test.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/classification.test.ts new file mode 100644 index 000000000..d0da29447 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/classification.test.ts @@ -0,0 +1,91 @@ +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-classification"); +const files = fs + .readdirSync(fixtures) + .filter((name) => /^(pass|fail)-.*\.ids$/.test(name)); +describe("IDSClassification 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; + importer.relations.set(WEBIFC.IFCRELASSOCIATESCLASSIFICATION, { + forRelated: "HasAssociations", + forRelating: "ClassificationForObjects", + }); + importer.relations.set(WEBIFC.IFCRELDEFINESBYTYPE, { + forRelated: "IsTypedBy", + forRelating: "Types", + }); + 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.IFCRELASSOCIATESCLASSIFICATION, + "HasAssociations", + "ClassificationForObjects", + ], + ] 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( + "classification", + bytes, + true, + ); + const components = new OBC.Components(); + const spy = vi + .spyOn(components.get(OBC.FragmentsManager), "list", "get") + .mockReturnValue(new Map([["classification", 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([/^classification$/], { + 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: "Classification" }, specs); + expect(xml).toContain(" + + + A classification facet with no data matches any classification 1/2 + 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-classification/fail-a_classification_facet_with_no_data_matches_any_classification_1_2.ifc b/packages/core/tests/fixtures/ids-classification/fail-a_classification_facet_with_no_data_matches_any_classification_1_2.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-a_classification_facet_with_no_data_matches_any_classification_1_2.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids new file mode 100644 index 000000000..71c625338 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids @@ -0,0 +1,28 @@ + + + + A prohibited classification reference returns the opposite of a required facet + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + 1 + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ifc b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids new file mode 100644 index 000000000..8b62590d0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids @@ -0,0 +1,27 @@ + + + + A prohibited facet returns the opposite of a required facet + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ids b/packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ids new file mode 100644 index 000000000..c7722d7c4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ids @@ -0,0 +1,25 @@ + + + + A required classification system fails if no match + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + Foobar1 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ifc b/packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-a_required_classification_system_fails_if_no_match.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ids b/packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ids new file mode 100644 index 000000000..809259fdf --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ids @@ -0,0 +1,30 @@ + + + + An optional classification value fails if no match + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + ExpectedValue + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ifc b/packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ifc new file mode 100644 index 000000000..c64ff6171 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-an_optional_classification_value_fails_if_no_match.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#4),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ids b/packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ids new file mode 100644 index 000000000..304cf1ca1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ids @@ -0,0 +1,28 @@ + + + + Both system and value must match (all, not any) if specified 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCCOLUMN + + + + + + + 1 + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ifc b/packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-both_system_and_value_must_match__all__not_any__if_specified_2_2.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ids b/packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ids new file mode 100644 index 000000000..e3522ba6d --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ids @@ -0,0 +1,30 @@ + + + + Occurrences override the type classification per system 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + 22 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ifc b/packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ifc new file mode 100644 index 000000000..606a71f9b --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-occurrences_override_the_type_classification_per_system_2_3.ifc @@ -0,0 +1,18 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#2=IFCCLASSIFICATIONREFERENCE($,'11',$,#1,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#4),#2); +#4=IFCWALL('3qs_CEYznSwfyPnfvmY$jn',$,'Wall',$,$,$,$,$,$); +#5=IFCWALLTYPE('2J464n_AnPNgUfYvzrChAh',$,'Type',$,$,$,$,$,$,.ELEMENTEDWALL.); +#6=IFCRELDEFINESBYTYPE('3NmyAazpzLq8cIG7JPLlM9',$,$,$,(#4),#5); +#7=IFCCLASSIFICATION($,$,$,'Foobaz',$,$,$); +#8=IFCCLASSIFICATIONREFERENCE($,'X',$,#7,$,$); +#9=IFCRELASSOCIATESCLASSIFICATION('21nBfU8VHIqvcR36t_P1iE',$,$,$,(#5),#8); +ENDSEC; +END-ISO-10303-21; \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_systems_1_2.ids b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_systems_1_2.ids new file mode 100644 index 000000000..5086167d1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_systems_1_2.ids @@ -0,0 +1,27 @@ + + + + Restrictions can be used for systems 1/2 + 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-classification/fail-restrictions_can_be_used_for_systems_1_2.ifc b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_systems_1_2.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_systems_1_2.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ids b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ids new file mode 100644 index 000000000..306c9431e --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ids @@ -0,0 +1,32 @@ + + + + Restrictions can be used for values 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ifc b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-restrictions_can_be_used_for_values_3_3.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ids b/packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ids new file mode 100644 index 000000000..2eb2b144d --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ids @@ -0,0 +1,25 @@ + + + + Systems should match exactly 2/5 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ifc b/packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/fail-systems_should_match_exactly_2_5.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ids b/packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ids new file mode 100644 index 000000000..3b91fed20 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ids @@ -0,0 +1,27 @@ + + + + A classification facet with no data matches any classification 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ifc b/packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-a_classification_facet_with_no_data_matches_any_classification_2_2.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ids b/packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ids new file mode 100644 index 000000000..3e9649dee --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ids @@ -0,0 +1,27 @@ + + + + A required facet checks all parameters as normal + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ifc b/packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-a_required_facet_checks_all_parameters_as_normal.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ids b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ids new file mode 100644 index 000000000..276e53da2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ids @@ -0,0 +1,30 @@ + + + + An optional classification value passes if null + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + ExpectedValue + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ifc b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ifc new file mode 100644 index 000000000..9f14b9a80 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_null.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,$,$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ids b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ids new file mode 100644 index 000000000..71ca5716c --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ids @@ -0,0 +1,30 @@ + + + + An optional classification value passes if specified + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + ExpectedValue + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ifc b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ifc new file mode 100644 index 000000000..c43aa54df --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-an_optional_classification_value_passes_if_specified.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'ExpectedValue',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ids b/packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ids new file mode 100644 index 000000000..6d9199c8d --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ids @@ -0,0 +1,28 @@ + + + + Both system and value must match (all, not any) if specified 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + 1 + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ifc b/packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-both_system_and_value_must_match__all__not_any__if_specified_1_2.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ids b/packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ids new file mode 100644 index 000000000..35ea2adcb --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ids @@ -0,0 +1,30 @@ + + + + Non-rooted resources that have external classification references should also pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCMATERIAL + + + + + + + 1 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ifc b/packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-non_rooted_resources_that_have_external_classification_references_should_also_pass.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ids b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ids new file mode 100644 index 000000000..a243c7509 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ids @@ -0,0 +1,30 @@ + + + + Occurrences override the type classification per system 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + 11 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ifc b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ifc new file mode 100644 index 000000000..606a71f9b --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_1_3.ifc @@ -0,0 +1,18 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#2=IFCCLASSIFICATIONREFERENCE($,'11',$,#1,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#4),#2); +#4=IFCWALL('3qs_CEYznSwfyPnfvmY$jn',$,'Wall',$,$,$,$,$,$); +#5=IFCWALLTYPE('2J464n_AnPNgUfYvzrChAh',$,'Type',$,$,$,$,$,$,.ELEMENTEDWALL.); +#6=IFCRELDEFINESBYTYPE('3NmyAazpzLq8cIG7JPLlM9',$,$,$,(#4),#5); +#7=IFCCLASSIFICATION($,$,$,'Foobaz',$,$,$); +#8=IFCCLASSIFICATIONREFERENCE($,'X',$,#7,$,$); +#9=IFCRELASSOCIATESCLASSIFICATION('21nBfU8VHIqvcR36t_P1iE',$,$,$,(#5),#8); +ENDSEC; +END-ISO-10303-21; \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ids b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ids new file mode 100644 index 000000000..0e99495db --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ids @@ -0,0 +1,30 @@ + + + + Occurrences override the type classification per system 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + X + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ifc b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ifc new file mode 100644 index 000000000..606a71f9b --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-occurrences_override_the_type_classification_per_system_3_3.ifc @@ -0,0 +1,18 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#2=IFCCLASSIFICATIONREFERENCE($,'11',$,#1,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#4),#2); +#4=IFCWALL('3qs_CEYznSwfyPnfvmY$jn',$,'Wall',$,$,$,$,$,$); +#5=IFCWALLTYPE('2J464n_AnPNgUfYvzrChAh',$,'Type',$,$,$,$,$,$,.ELEMENTEDWALL.); +#6=IFCRELDEFINESBYTYPE('3NmyAazpzLq8cIG7JPLlM9',$,$,$,(#4),#5); +#7=IFCCLASSIFICATION($,$,$,'Foobaz',$,$,$); +#8=IFCCLASSIFICATIONREFERENCE($,'X',$,#7,$,$); +#9=IFCRELASSOCIATESCLASSIFICATION('21nBfU8VHIqvcR36t_P1iE',$,$,$,(#5),#8); +ENDSEC; +END-ISO-10303-21; \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ids b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ids new file mode 100644 index 000000000..64f08b69b --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ids @@ -0,0 +1,27 @@ + + + + Restrictions can be used for systems 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ifc b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_systems_2_2.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ids b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ids new file mode 100644 index 000000000..bb5fbed60 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ids @@ -0,0 +1,32 @@ + + + + Restrictions can be used for values 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ifc b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_1_3.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ids b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ids new file mode 100644 index 000000000..fc0a5f837 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ids @@ -0,0 +1,32 @@ + + + + Restrictions can be used for values 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCCOLUMN + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ifc b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-restrictions_can_be_used_for_values_2_3.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ids b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ids new file mode 100644 index 000000000..2995ec697 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ids @@ -0,0 +1,25 @@ + + + + Systems should match exactly 1/5 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPROJECT + + + + + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ifc b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_1_5.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ids b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ids new file mode 100644 index 000000000..ce66b976b --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ids @@ -0,0 +1,25 @@ + + + + Systems should match exactly 3/5 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ifc b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_3_5.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ids b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ids new file mode 100644 index 000000000..f29a6779a --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ids @@ -0,0 +1,25 @@ + + + + Systems should match exactly 4/5 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCCOLUMN + + + + + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ifc b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_4_5.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ids b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ids new file mode 100644 index 000000000..9b18d2725 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ids @@ -0,0 +1,25 @@ + + + + Systems should match exactly 5/5 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ifc b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-systems_should_match_exactly_5_5.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ids b/packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ids new file mode 100644 index 000000000..5e7925620 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ids @@ -0,0 +1,30 @@ + + + + Values match subreferences if full classifications are used (e.g. EF_25_10 should match EF_25_10_25, EF_25_10_30, etc) + Generated via code automation in the Ids Repository on github. + + + + + + + IFCBEAM + + + + + + + 2 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ifc b/packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-values_match_subreferences_if_full_classifications_are_used__e_g__ef_25_10_should_match_ef_25_10_25__ef_25_10_30__etc_.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ids b/packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ids new file mode 100644 index 000000000..d822c63cb --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ids @@ -0,0 +1,30 @@ + + + + Values should match exactly if lightweight classifications are used + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + 1 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ifc b/packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ifc new file mode 100644 index 000000000..d48d7fc76 --- /dev/null +++ b/packages/core/tests/fixtures/ids-classification/pass-values_should_match_exactly_if_lightweight_classifications_are_used.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; From e54a3b0d73e9281b1a9543397076c676c9487940 Mon Sep 17 00:00:00 2001 From: Riho Kirss Date: Sat, 7 Nov 2026 20:49:48 +0200 Subject: [PATCH 09/11] fix(ids): implement attribute selection and value presence checks --- .../IDSSpecifications/src/facets/Attribute.ts | 197 +++++++----------- .../src/facets/attribute.test.ts | 116 +++++++++++ .../core/tests/fixtures/ids-attribute/LICENSE | 6 + .../tests/fixtures/ids-attribute/README.md | 5 + ...turns_the_opposite_of_a_required_facet.ids | 25 +++ ...turns_the_opposite_of_a_required_facet.ifc | 10 + ...l-an_optional_attribute_fails_if_empty.ids | 28 +++ ...l-an_optional_attribute_fails_if_empty.ifc | 10 + ...es_are_not_inherited_by_the_occurrence.ids | 28 +++ ...es_are_not_inherited_by_the_occurrence.ifc | 12 ++ ...uld_check_strings_case_sensitively_2_2.ids | 28 +++ ...uld_check_strings_case_sensitively_2_2.ifc | 10 + ...tes_with_a_logical_unknown_always_fail.ids | 25 +++ ...tes_with_a_logical_unknown_always_fail.ifc | 11 + ...ributes_with_an_empty_list_always_fail.ids | 25 +++ ...ributes_with_an_empty_list_always_fail.ifc | 12 ++ ...tributes_with_an_empty_set_always_fail.ids | 25 +++ ...tributes_with_an_empty_set_always_fail.ifc | 11 + ...ributes_with_empty_strings_always_fail.ids | 25 +++ ...ributes_with_empty_strings_always_fail.ifc | 10 + ...ttributes_with_null_values_always_fail.ids | 25 +++ ...ttributes_with_null_values_always_fail.ifc | 10 + ..._be_specified_as_lowercase_strings_1_3.ids | 28 +++ ..._be_specified_as_lowercase_strings_1_3.ifc | 10 + .../fail-dates_are_treated_as_strings_1_2.ids | 28 +++ .../fail-dates_are_treated_as_strings_1_2.ifc | 10 + ...l-durations_are_treated_as_strings_2_2.ids | 28 +++ ...l-durations_are_treated_as_strings_2_2.ifc | 10 + ...ing_truncation_such_as_for_identifiers.ids | 28 +++ ...ing_truncation_such_as_for_identifiers.ifc | 10 + ...ues_are_checked_using_type_casting_4_4.ids | 28 +++ ...ues_are_checked_using_type_casting_4_4.ifc | 10 + ...ail-value_restrictions_may_be_used_3_3.ids | 31 +++ ...ail-value_restrictions_may_be_used_3_3.ifc | 10 + ..._facet_checks_all_parameters_as_normal.ids | 25 +++ ..._facet_checks_all_parameters_as_normal.ifc | 10 + ...s-an_optional_attribute_passes_if_null.ids | 28 +++ ...s-an_optional_attribute_passes_if_null.ifc | 10 + ...optional_attribute_passes_if_specified.ids | 28 +++ ...optional_attribute_passes_if_specified.ifc | 10 + ...utes_referencing_an_object_should_pass.ids | 25 +++ ...utes_referencing_an_object_should_pass.ifc | 11 + ...uld_check_strings_case_sensitively_1_2.ids | 28 +++ ...uld_check_strings_case_sensitively_1_2.ifc | 10 + ...butes_with_a_boolean_false_should_pass.ids | 25 +++ ...butes_with_a_boolean_false_should_pass.ifc | 10 + ...ibutes_with_a_boolean_true_should_pass.ids | 25 +++ ...ibutes_with_a_boolean_true_should_pass.ifc | 10 + ...ct_referencing_a_primitive_should_pass.ids | 25 +++ ...ct_referencing_a_primitive_should_pass.ifc | 11 + ...lect_referencing_an_object_should_pass.ids | 25 +++ ...lect_referencing_an_object_should_pass.ifc | 12 ++ ...ibutes_with_a_string_value_should_pass.ids | 25 +++ ...ibutes_with_a_string_value_should_pass.ifc | 10 + ...butes_with_a_zero_duration_should_pass.ids | 25 +++ ...butes_with_a_zero_duration_should_pass.ifc | 10 + ...ro_number_have_meaning_and_should_pass.ids | 25 +++ ...ro_number_have_meaning_and_should_pass.ifc | 10 + ..._be_specified_as_lowercase_strings_3_3.ids | 28 +++ ..._be_specified_as_lowercase_strings_3_3.ifc | 10 + .../pass-dates_are_treated_as_strings_2_2.ids | 28 +++ .../pass-dates_are_treated_as_strings_2_2.ifc | 10 + ...s-durations_are_treated_as_strings_1_2.ids | 28 +++ ...s-durations_are_treated_as_strings_1_2.ifc | 10 + ...re_treated_as_strings_and_not_expanded.ids | 28 +++ ...re_treated_as_strings_and_not_expanded.ifc | 10 + ...egers_follow_the_same_rules_as_numbers.ids | 28 +++ ...egers_follow_the_same_rules_as_numbers.ifc | 10 + ...restrictions_will_match_any_result_1_3.ids | 27 +++ ...restrictions_will_match_any_result_1_3.ifc | 11 + ...restrictions_will_match_any_result_2_3.ids | 28 +++ ...restrictions_will_match_any_result_2_3.ifc | 10 + ...restrictions_will_match_any_result_3_3.ids | 28 +++ ...restrictions_will_match_any_result_3_3.ifc | 10 + ...haracters_are_treated_without_encoding.ids | 28 +++ ...haracters_are_treated_without_encoding.ifc | 10 + ...ues_are_checked_using_type_casting_1_4.ids | 28 +++ ...ues_are_checked_using_type_casting_1_4.ifc | 10 + ...ues_are_checked_using_type_casting_2_4.ids | 28 +++ ...ues_are_checked_using_type_casting_2_4.ifc | 10 + ...ues_are_checked_using_type_casting_3_4.ids | 28 +++ ...ues_are_checked_using_type_casting_3_4.ifc | 10 + ...ally_formatted_numbers_are_allowed_3_4.ids | 28 +++ ...ally_formatted_numbers_are_allowed_3_4.ifc | 10 + ...ally_formatted_numbers_are_allowed_4_4.ids | 28 +++ ...ally_formatted_numbers_are_allowed_4_4.ifc | 10 + ..._may_be_done_with_a_bounds_restriction.ids | 31 +++ ..._may_be_done_with_a_bounds_restriction.ifc | 10 + ..._occur_within_enumeration_restrictions.ids | 31 +++ ..._occur_within_enumeration_restrictions.ifc | 10 + ...ass-value_restrictions_may_be_used_1_3.ids | 31 +++ ...ass-value_restrictions_may_be_used_1_3.ifc | 10 + ...ass-value_restrictions_may_be_used_2_3.ids | 31 +++ ...ass-value_restrictions_may_be_used_2_3.ifc | 10 + 94 files changed, 1890 insertions(+), 124 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/attribute.test.ts create mode 100644 packages/core/tests/fixtures/ids-attribute/LICENSE create mode 100644 packages/core/tests/fixtures/ids-attribute/README.md create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ifc diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts index 841753f38..b6c5e26ea 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts @@ -1,3 +1,4 @@ +import { DataMap } from "@thatopen/fragments"; import { IDSFacetParameter, IDSItemCheckResult } from "../types"; import { Components } from "../../../../core/Components"; import { IDSFacet } from "./Facet"; @@ -37,43 +38,24 @@ export class IDSAttribute extends IDSFacet { `; } - // This can be very ineficcient as we do not have an easy way to get an entity based on an attribute - // Right now, all entities must be iterated. - // When the new IfcEntitiesFinder comes, this can become easier. - // This may be greatly increase in performance if the applicability has any of the other facets and this is applied the latest - async getEntities() {} - // async getEntities( - // model: FRAGS.FragmentsGroup, - // collector: FRAGS.IfcProperties = {}, - // ) { - // return []; - // // for (const expressID in model) { - // // if (collector[expressID]) continue; - // // const entity = model[expressID]; - // // // Check if the attribute exists - // // const attribute = entity[this.name]; - // // const attributeExists = !!attribute; - // // // Check if the attribute value matches - // // let valueMatches = true; - // // if (attributeExists && this.value && this.value.value) { - // // if (this.value.type === "simpleValue") { - // // valueMatches = attribute.value === this.value.value; - // // } - // // if (this.value.type === "restriction") { - // // const regex = new RegExp(this.value.value); - // // valueMatches = regex.test(attribute.value); - // // } - // // } - // // if (attributeExists && valueMatches) { - // // collector[entity.expressID] = entity; - // // } - // // } - // } + async getEntities(modelIds: RegExp[], collector: ModelIdMap) { + const fragments = this._components.get(FragmentsManager); + for (const [modelId, model] of fragments.list) { + if (!modelIds.some((pattern) => pattern.test(modelId))) continue; + const ids = Object.values( + await model.getItemsOfCategories([/.*/]), + ).flat(); + const results: ModelIdDataMap = new DataMap(); + await this.test({ [modelId]: new Set(ids) }, results, { + skipIfFails: false, + }); + const selected = collector[modelId] ?? new Set(); + for (const [id, result] of results.get(modelId) ?? []) + if (result.pass) selected.add(id); + if (selected.size) collector[modelId] = selected; + } + } - // https://github.com/buildingSMART/IDS/tree/development/Documentation/ImplementersDocumentation/TestCases/attribute - // Test cases from buildingSMART repo have been tested and they all match with the expected result - // All invalid cases have been treated as failures - // FragmentsGroup do not hold some of the entities used in the tests async test( items: ModelIdMap, collector: ModelIdDataMap, @@ -83,7 +65,10 @@ export class IDSAttribute extends IDSFacet { for (const [modelId, localIds] of Object.entries(items)) { const model = fragments.list.get(modelId); if (!model) continue; - const data = await model.getItemsData([...localIds]); + const data = await model.getItemsData([...localIds], { + attributesDefault: true, + relationsDefault: { attributes: true, relations: false }, + }); for (const item of data) { const checks = this.getItemChecks( collector, @@ -93,99 +78,63 @@ export class IDSAttribute extends IDSFacet { ); if (!checks) continue; - const attrNames = Object.keys(item); - const matchingAttributes = attrNames.filter((name) => { - const nameMatches = this.evalRequirement(name, this.name, "Name"); - if (!nameMatches) return false; - - const attribute = item[name]; - if (Array.isArray(attribute)) return true; - - // IDSDocs: Attributes with null values always fail - if (attribute === null || attribute.value === null) { - if ( - this.cardinality === "optional" || - this.cardinality === "prohibited" - ) { - return true; + // GlobalId is retained by Fragments as _guid. Internal metadata is not + // an IFC attribute and must never satisfy a name restriction. + const attributes = { ...item, GlobalId: item._guid }; + const names = Object.keys(attributes).filter( + (name) => + !name.startsWith("_") && + this.evalRequirement( + name, + this.name, + "Name", + undefined, + "required", + ), + ); + let present = false; + let matches = false; + let actual: string | number | boolean | null = null; + for (const name of names) { + const attribute = attributes[name as keyof typeof attributes]; + if (attribute == null) continue; + if (Array.isArray(attribute)) { + if (attribute.length) { + present = true; + if (!this.value) matches = true; } - return false; + continue; } - - // IDSDocs: Attributes with a logical unknown always fail - // TODO: Can this be replicated with Fragments 2.0? - // if (nameMatches && attribute?.type === 3 && attribute.value === 2) { - // return false; - // } - - // IDSDocs: Attributes with an empty list always fail - // TODO: How to know for sure if the attribute value is an array - if (Array.isArray(attribute.value) && attribute.value.length === 0) { - return false; + const value = attribute.value; + if (value === null || value === undefined) continue; + present = true; + if (typeof value === "string" && !value.trim()) continue; + if (Array.isArray(value)) { + if (value.length && !this.value) matches = true; + continue; } - - // IDSDocs: Attributes with empty strings always fail + actual = value; if ( - typeof attribute.value === "string" && - attribute.value.trim() === "" - ) { - return false; - } - - return nameMatches; - }); - - const attributeMatches = matchingAttributes.length > 0; - + !this.value || + this.evalRequirement( + value, + this.value, + "Value", + undefined, + "required", + ) + ) + matches = true; + } + let pass = matches; + if (this.cardinality === "prohibited") pass = !matches; + if (this.cardinality === "optional" && !present) pass = true; checks.push({ - parameter: "Name", - currentValue: attributeMatches ? matchingAttributes[0] : null, - requiredValue: this.name, - pass: - this.cardinality === "prohibited" - ? !attributeMatches - : attributeMatches, + parameter: this.value ? "Value" : "Name", + currentValue: actual, + requiredValue: this.value ?? this.name, + pass, }); - - // Check if the attribute value matches - if (this.value) { - if (matchingAttributes[0]) { - const attribute = item[matchingAttributes[0]]; - if (Array.isArray(attribute)) { - checks.push({ - parameter: "Value", - currentValue: null, - requiredValue: this.value, - pass: this.cardinality === "prohibited", - }); - } else { - // IDSDocs: Value checks always fail for objects - const isRef = Array.isArray(attribute.value); - if (isRef) { - checks.push({ - parameter: "Value", - currentValue: null, - requiredValue: this.value, - pass: this.cardinality === "prohibited", - }); - } else { - this.evalRequirement( - attribute.value, - this.value, - "Value", - checks, - ); - } - } - } else { - checks.push({ - parameter: "Value", - currentValue: null, - requiredValue: this.value, - pass: this.cardinality === "prohibited", - }); - } - } } } } diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/attribute.test.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/attribute.test.ts new file mode 100644 index 000000000..24f96ad2e --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/attribute.test.ts @@ -0,0 +1,116 @@ +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-attribute"); +const files = fs + .readdirSync(fixtures) + .filter((name) => /^(pass|fail)-.*\.ids$/.test(name)); +describe("IDSAttribute 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; + importer.relations.set(WEBIFC.IFCRELASSOCIATESCLASSIFICATION, { + forRelated: "HasAssociations", + forRelating: "ClassificationForObjects", + }); + importer.relations.set(WEBIFC.IFCRELDEFINESBYTYPE, { + forRelated: "IsTypedBy", + forRelating: "Types", + }); + 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.IFCRELASSOCIATESCLASSIFICATION, + "HasAssociations", + "ClassificationForObjects", + ], + ] 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( + "attribute", + bytes, + true, + ); + const components = new OBC.Components(); + const spy = vi + .spyOn(components.get(OBC.FragmentsManager), "list", "get") + .mockReturnValue(new Map([["attribute", 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([/^attribute$/], { + 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-")); + for (const spec of specs) + for (const facet of spec.requirements) { + if (facet.facetType !== "Attribute") continue; + const previous = facet.cardinality; + facet.cardinality = "required"; + const all = Object.values( + await model.getItemsOfCategories([/.*/]), + ).flat(); + const direct = new FRAGS.DataMap< + string, + FRAGS.DataMap + >(); + await facet.test({ attribute: new Set(all) }, direct, { + skipIfFails: false, + }); + const selected: Record> = {}; + await facet.getEntities([/^attribute$/], selected); + const expected = [...(direct.get("attribute") ?? [])] + .filter(([, result]) => result.pass) + .map(([id]) => id); + expect([...(selected.attribute ?? [])].sort()).toEqual( + expected.sort(), + ); + facet.cardinality = previous; + } + const xml = manager.export({ title: "Attribute" }, specs); + expect(xml).toContain(" + + + A prohibited facet returns the opposite of a required facet + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc b/packages/core/tests/fixtures/ids-attribute/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc new file mode 100644 index 000000000..9caac7d9d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foobar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ids b/packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ids new file mode 100644 index 000000000..ce440a09f --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ids @@ -0,0 +1,28 @@ + + + + An optional attribute fails if empty + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ifc b/packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ifc new file mode 100644 index 000000000..0728b69df --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-an_optional_attribute_fails_if_empty.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ids b/packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ids new file mode 100644 index 000000000..61fc78f86 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ids @@ -0,0 +1,28 @@ + + + + Attributes are not inherited by the occurrence + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Description + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ifc b/packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ifc new file mode 100644 index 000000000..c6b35ba79 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_are_not_inherited_by_the_occurrence.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCWALLTYPE('0eA6m4fELI9QBIhP3wiLAp',$,$,'Foobar',$,$,$,$,$,.ELEMENTEDWALL.); +#3=IFCRELDEFINESBYTYPE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ids b/packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ids new file mode 100644 index 000000000..6bc262b49 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ids @@ -0,0 +1,28 @@ + + + + Attributes should check strings case sensitively 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ifc b/packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ifc new file mode 100644 index 000000000..e3b95890d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_should_check_strings_case_sensitively_2_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'foobar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ids b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ids new file mode 100644 index 000000000..a12fcce66 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ids @@ -0,0 +1,25 @@ + + + + Attributes with a logical unknown always fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPRESENTATIONLAYERWITHSTYLE + + + + + + + LayerOn + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ifc b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ifc new file mode 100644 index 000000000..8a4f0546f --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_a_logical_unknown_always_fail.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCARTESIANPOINT((0.,0.,0.)); +#2=IFCPRESENTATIONLAYERWITHSTYLE('Foo',$,(#1),$,.U.,.F.,.F.,()); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ids b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ids new file mode 100644 index 000000000..26a38c29f --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ids @@ -0,0 +1,25 @@ + + + + Attributes with an empty list always fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCRELCONNECTSPATHELEMENTS + + + + + + + RelatingPriorities + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ifc b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ifc new file mode 100644 index 000000000..382eb8c7b --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_list_always_fail.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$); +#3=IFCRELCONNECTSPATHELEMENTS('05rScmOVzMoQXOfbYdtLYj',$,$,$,$,#1,#2,(),(),.ATSTART.,.ATEND.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ids b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ids new file mode 100644 index 000000000..b19760816 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ids @@ -0,0 +1,25 @@ + + + + Attributes with an empty set always fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPRESENTATIONLAYERWITHSTYLE + + + + + + + LayerStyles + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ifc b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ifc new file mode 100644 index 000000000..962b41d3c --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_an_empty_set_always_fail.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCARTESIANPOINT((0.,0.,0.)); +#2=IFCPRESENTATIONLAYERWITHSTYLE('Foo',$,(#1),$,.T.,.F.,.F.,()); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ids b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ids new file mode 100644 index 000000000..550f13af0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ids @@ -0,0 +1,25 @@ + + + + Attributes with empty strings always fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ifc b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ifc new file mode 100644 index 000000000..0728b69df --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_empty_strings_always_fail.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ids b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ids new file mode 100644 index 000000000..3dbcab854 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ids @@ -0,0 +1,25 @@ + + + + Attributes with null values always fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ifc b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ifc new file mode 100644 index 000000000..e48556c4a --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-attributes_with_null_values_always_fail.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids b/packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids new file mode 100644 index 000000000..b51025623 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids @@ -0,0 +1,28 @@ + + + + Booleans must be specified as lowercase strings 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASK + + + + + + + IsMilestone + + + true + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc b/packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc new file mode 100644 index 000000000..339324b8c --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASK('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,.F.,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ids b/packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ids new file mode 100644 index 000000000..ae7531acb --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ids @@ -0,0 +1,28 @@ + + + + Dates are treated as strings 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCCLASSIFICATION + + + + + + + EditionDate + + + 2022-01-01 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ifc b/packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ifc new file mode 100644 index 000000000..c7ca921f2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-dates_are_treated_as_strings_1_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCLASSIFICATION($,$,'2022-01-01+00:00','Name',$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ids b/packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ids new file mode 100644 index 000000000..75c24be18 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ids @@ -0,0 +1,28 @@ + + + + Durations are treated as strings 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASKTIME + + + + + + + ScheduleDuration + + + PT16H + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ifc b/packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ifc new file mode 100644 index 000000000..2d6dbb80d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-durations_are_treated_as_strings_2_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASKTIME('Name',$,$,$,'P2D',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids b/packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids new file mode 100644 index 000000000..dfb62f6ef --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids @@ -0,0 +1,28 @@ + + + + IDS does not handle string truncation such as for identifiers + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPERSON + + + + + + + Identification + + + 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345_extra_characters + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc b/packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc new file mode 100644 index 000000000..2cc5608ee --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPERSON('123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345',$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ids b/packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ids new file mode 100644 index 000000000..a2b9015bb --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ids @@ -0,0 +1,28 @@ + + + + Numeric values are checked using type casting 4/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + 42 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ifc b/packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ifc new file mode 100644 index 000000000..0a2765056 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-numeric_values_are_checked_using_type_casting_4_4.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(42.3,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ids b/packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ids new file mode 100644 index 000000000..22b33accf --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ids @@ -0,0 +1,31 @@ + + + + Value restrictions may be used 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ifc b/packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ifc new file mode 100644 index 000000000..9caac7d9d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/fail-value_restrictions_may_be_used_3_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foobar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ids b/packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ids new file mode 100644 index 000000000..3bd09616c --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ids @@ -0,0 +1,25 @@ + + + + A required facet checks all parameters as normal + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ifc b/packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ifc new file mode 100644 index 000000000..9caac7d9d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-a_required_facet_checks_all_parameters_as_normal.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foobar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ids b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ids new file mode 100644 index 000000000..aa31632fc --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ids @@ -0,0 +1,28 @@ + + + + An optional attribute passes if null + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ifc b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ifc new file mode 100644 index 000000000..e48556c4a --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_null.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ids b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ids new file mode 100644 index 000000000..4c523c5d6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ids @@ -0,0 +1,28 @@ + + + + An optional attribute passes if specified + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ifc b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ifc new file mode 100644 index 000000000..9caac7d9d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-an_optional_attribute_passes_if_specified.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foobar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ids new file mode 100644 index 000000000..946f1f98d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes referencing an object should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASK + + + + + + + TaskTime + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ifc new file mode 100644 index 000000000..e9ba40b1b --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_referencing_an_object_should_pass.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASKTIME($,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$); +#2=IFCTASK('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,.T.,$,#1,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ids new file mode 100644 index 000000000..3c2594c18 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ids @@ -0,0 +1,28 @@ + + + + Attributes should check strings case sensitively 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ifc new file mode 100644 index 000000000..9caac7d9d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_should_check_strings_case_sensitively_1_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foobar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ids new file mode 100644 index 000000000..5b518ad09 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes with a boolean false should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASKTIME + + + + + + + IsCritical + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ifc new file mode 100644 index 000000000..658d65817 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_false_should_pass.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASKTIME($,$,$,$,$,$,$,$,$,$,$,$,$,.F.,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ids new file mode 100644 index 000000000..00374b6f3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes with a boolean true should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASKTIME + + + + + + + IsCritical + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ifc new file mode 100644 index 000000000..f9baefc72 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_boolean_true_should_pass.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASKTIME($,$,$,$,$,$,$,$,$,$,$,$,$,.T.,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ids new file mode 100644 index 000000000..afecd39b1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes with a select referencing a primitive should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLERENDERING + + + + + + + DiffuseColour + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ifc new file mode 100644 index 000000000..a5230bc6c --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_a_primitive_should_pass.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCOLOURRGB($,1.,1.,1.); +#2=IFCSURFACESTYLERENDERING(#1,$,IFCNORMALISEDRATIOMEASURE(0.5),$,$,$,$,$,.FLAT.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ids new file mode 100644 index 000000000..072cf894b --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes with a select referencing an object should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLERENDERING + + + + + + + DiffuseColour + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ifc new file mode 100644 index 000000000..2d680cc61 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_select_referencing_an_object_should_pass.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCOLOURRGB($,1.,1.,1.); +#2=IFCCOLOURRGB($,1.,1.,1.); +#3=IFCSURFACESTYLERENDERING(#1,$,#2,$,$,$,$,$,.FLAT.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ids new file mode 100644 index 000000000..d307ec3bc --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes with a string value should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ifc new file mode 100644 index 000000000..9caac7d9d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_string_value_should_pass.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foobar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ids new file mode 100644 index 000000000..7e5a25124 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes with a zero duration should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASKTIME + + + + + + + ScheduleDuration + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ifc new file mode 100644 index 000000000..5c172a611 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_duration_should_pass.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASKTIME($,$,$,$,'P0D',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ids b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ids new file mode 100644 index 000000000..e8adb4ce8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ids @@ -0,0 +1,25 @@ + + + + Attributes with a zero number have meaning and should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCQUANTITYCOUNT + + + + + + + CountValue + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ifc b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ifc new file mode 100644 index 000000000..22784d97c --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-attributes_with_a_zero_number_have_meaning_and_should_pass.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCQUANTITYCOUNT('Foobar',$,$,0.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ids b/packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ids new file mode 100644 index 000000000..06b4f9f68 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ids @@ -0,0 +1,28 @@ + + + + Booleans must be specified as lowercase strings 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASK + + + + + + + IsMilestone + + + false + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ifc b/packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ifc new file mode 100644 index 000000000..339324b8c --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-booleans_must_be_specified_as_lowercase_strings_3_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASK('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,.F.,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ids b/packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ids new file mode 100644 index 000000000..7a5100810 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ids @@ -0,0 +1,28 @@ + + + + Dates are treated as strings 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCCLASSIFICATION + + + + + + + EditionDate + + + 2022-01-01 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ifc b/packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ifc new file mode 100644 index 000000000..c71903155 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-dates_are_treated_as_strings_2_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCCLASSIFICATION($,$,'2022-01-01','Name',$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ids b/packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ids new file mode 100644 index 000000000..932efe893 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ids @@ -0,0 +1,28 @@ + + + + Durations are treated as strings 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASKTIME + + + + + + + ScheduleDuration + + + PT16H + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ifc b/packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ifc new file mode 100644 index 000000000..1f88bace2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-durations_are_treated_as_strings_1_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASKTIME('Name',$,$,$,'PT16H',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ids b/packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ids new file mode 100644 index 000000000..5413125fb --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ids @@ -0,0 +1,28 @@ + + + + GlobalIds are treated as strings and not expanded + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + GlobalId + + + 1hqIFTRjfV6AWq_bMtnZwI + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ifc b/packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ifc new file mode 100644 index 000000000..144ed1917 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-globalids_are_treated_as_strings_and_not_expanded.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-08T10:47:56',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ids b/packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ids new file mode 100644 index 000000000..7cf294282 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ids @@ -0,0 +1,28 @@ + + + + Integers follow the same rules as numbers + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSTAIRFLIGHT + + + + + + + NumberOfRisers + + + 42 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ifc b/packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ifc new file mode 100644 index 000000000..782e20be8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-integers_follow_the_same_rules_as_numbers.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSTAIRFLIGHT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,42,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ids b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ids new file mode 100644 index 000000000..3aad45ee9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ids @@ -0,0 +1,27 @@ + + + + Name restrictions will match any result 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCMATERIALLAYERSET + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ifc b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ifc new file mode 100644 index 000000000..0cc9e7173 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_1_3.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCMATERIALLAYER($,1.,$,$,$,$,$); +#2=IFCMATERIALLAYERSET((#1),'Foo',$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_2_3.ids b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_2_3.ids new file mode 100644 index 000000000..5c960b0d3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_2_3.ids @@ -0,0 +1,28 @@ + + + + Name restrictions will match any result 2/3 + 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-attribute/pass-name_restrictions_will_match_any_result_2_3.ifc b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_2_3.ifc new file mode 100644 index 000000000..2c072dfd8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_2_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_3_3.ids b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_3_3.ids new file mode 100644 index 000000000..1537683ab --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_3_3.ids @@ -0,0 +1,28 @@ + + + + Name restrictions will match any result 3/3 + 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-attribute/pass-name_restrictions_will_match_any_result_3_3.ifc b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_3_3.ifc new file mode 100644 index 000000000..fbee36fa0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-name_restrictions_will_match_any_result_3_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,'Bar',$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ids b/packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ids new file mode 100644 index 000000000..856d4713f --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ids @@ -0,0 +1,28 @@ + + + + Non-ascii characters are treated without encoding + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + ♫Don'tÄrgerhôtelЊет + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ifc b/packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ifc new file mode 100644 index 000000000..04a3291ba --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-non_ascii_characters_are_treated_without_encoding.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'\X2\266B\X0\Don''t\X2\00C4\X0\rgerh\X2\00F4\X0\tel\X2\040A04350442\X0\',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ids b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ids new file mode 100644 index 000000000..3bd2b7b36 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ids @@ -0,0 +1,28 @@ + + + + Numeric values are checked using type casting 1/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + 42 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ifc b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ifc new file mode 100644 index 000000000..88fb3856e --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_1_4.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ids b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ids new file mode 100644 index 000000000..ff82e5e73 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ids @@ -0,0 +1,28 @@ + + + + Numeric values are checked using type casting 2/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + 42. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ifc b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ifc new file mode 100644 index 000000000..88fb3856e --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_2_4.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ids b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ids new file mode 100644 index 000000000..35bd2923d --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ids @@ -0,0 +1,28 @@ + + + + Numeric values are checked using type casting 3/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + 42.0 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ifc b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ifc new file mode 100644 index 000000000..88fb3856e --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-numeric_values_are_checked_using_type_casting_3_4.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids new file mode 100644 index 000000000..63a36e498 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids @@ -0,0 +1,28 @@ + + + + Only specifically formatted numbers are allowed 3/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + 1.2345e3 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc new file mode 100644 index 000000000..278056f29 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(1234.5,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids new file mode 100644 index 000000000..f751ca1d5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids @@ -0,0 +1,28 @@ + + + + Only specifically formatted numbers are allowed 4/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + 1.2345E3 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc new file mode 100644 index 000000000..278056f29 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(1234.5,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ids b/packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ids new file mode 100644 index 000000000..bff993449 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ids @@ -0,0 +1,31 @@ + + + + Strict numeric checking may be done with a bounds restriction + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ifc b/packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ifc new file mode 100644 index 000000000..88fb3856e --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-strict_numeric_checking_may_be_done_with_a_bounds_restriction.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ids b/packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ids new file mode 100644 index 000000000..1b3776cc1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ids @@ -0,0 +1,31 @@ + + + + Typecast checking may also occur within enumeration restrictions + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ifc b/packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ifc new file mode 100644 index 000000000..88fb3856e --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-typecast_checking_may_also_occur_within_enumeration_restrictions.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSURFACESTYLEREFRACTION(42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ids b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ids new file mode 100644 index 000000000..9ac7bcf5c --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ids @@ -0,0 +1,31 @@ + + + + Value restrictions may be used 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ifc b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ifc new file mode 100644 index 000000000..2c072dfd8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_1_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ids b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ids new file mode 100644 index 000000000..5c68fb049 --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ids @@ -0,0 +1,31 @@ + + + + Value restrictions may be used 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ifc b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ifc new file mode 100644 index 000000000..a043869ef --- /dev/null +++ b/packages/core/tests/fixtures/ids-attribute/pass-value_restrictions_may_be_used_2_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Bar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; From 4647338ef9f96ac73757213065b72ec671cdf796 Mon Sep 17 00:00:00 2001 From: Riho Kirss Date: Sat, 7 Nov 2026 21:07:57 +0200 Subject: [PATCH 10/11] fix(ids): complete value evaluation and preserve XML constraints --- .../IDSSpecifications/conformance.test.ts | 108 ++++++ .../openbim/IDSSpecifications/example.html | 115 ++++--- .../src/openbim/IDSSpecifications/example.ts | 3 +- .../src/openbim/IDSSpecifications/index.ts | 18 +- .../IDSSpecifications/src/Specification.ts | 28 +- .../src/exporters/parameter.ts | 13 +- .../IDSSpecifications/src/facets/Attribute.ts | 2 +- .../IDSSpecifications/src/facets/Entity.ts | 136 ++++---- .../IDSSpecifications/src/facets/Facet.ts | 73 +++- .../IDSSpecifications/src/facets/Material.ts | 322 +++++++----------- .../IDSSpecifications/src/facets/Property.ts | 301 ++++------------ .../src/facets/entity-mapping.ts | 78 +++++ .../src/facets/predefined-properties.ts | 296 ++++++++++++++++ .../src/facets/property.test.ts | 9 +- .../src/facets/unit-types.ts | 88 +++++ .../IDSSpecifications/src/facets/units.ts | 152 +++++++++ .../src/importers/parameter.ts | 53 ++- .../openbim/IDSSpecifications/src/types.ts | 9 +- .../tests/fixtures/ids-conformance/LICENSE | 6 + .../tests/fixtures/ids-conformance/README.md | 3 + ...ways_fail_a_specified_predefined_types.ids | 28 ++ ...ways_fail_a_specified_predefined_types.ifc | 10 + ..._from_an_enumeration_must_be_uppercase.ids | 28 ++ ..._from_an_enumeration_must_be_uppercase.ifc | 10 + ..._a_specified_predefined_type_will_fail.ids | 28 ++ ..._a_specified_predefined_type_will_fail.ifc | 10 + ...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 + ...esolves_via_the_type_mapping_table_2_2.ids | 28 ++ ...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 + ..._specified_for_the_predefined_type_3_3.ids | 30 ++ ..._specified_for_the_predefined_type_3_3.ifc | 10 + ...ned_types_are_checked_case_sensitively.ids | 28 ++ ...ned_types_are_checked_case_sensitively.ifc | 10 + .../pass-a_matching_entity_should_pass.ids | 25 ++ .../pass-a_matching_entity_should_pass.ifc | 10 + ...a_matching_predefined_type_should_pass.ids | 28 ++ ...a_matching_predefined_type_should_pass.ifc | 10 + ...ay_specify_a_user_defined_element_type.ids | 28 ++ ...ay_specify_a_user_defined_element_type.ifc | 10 + ...may_specify_a_user_defined_object_type.ids | 28 ++ ...may_specify_a_user_defined_object_type.ifc | 10 + ...ay_specify_a_user_defined_process_type.ids | 28 ++ ...ay_specify_a_user_defined_process_type.ifc | 10 + ...uld_pass_regardless_of_predefined_type.ids | 25 ++ ...uld_pass_regardless_of_predefined_type.ifc | 10 + ...e_specified_as_a_xsd_regex_pattern_2_2.ids | 27 ++ ...e_specified_as_a_xsd_regex_pattern_2_2.ifc | 10 + ...can_be_specified_as_an_enumeration_1_3.ids | 28 ++ ...can_be_specified_as_an_enumeration_1_3.ifc | 10 + ...can_be_specified_as_an_enumeration_2_3.ids | 28 ++ ...can_be_specified_as_an_enumeration_2_3.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 + ...esolves_via_the_type_mapping_table_1_2.ids | 28 ++ ...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 + ...inherited_predefined_types_should_pass.ids | 28 ++ ...inherited_predefined_types_should_pass.ifc | 12 + ...verridden_predefined_types_should_pass.ids | 28 ++ ...verridden_predefined_types_should_pass.ifc | 12 + ..._specified_for_the_predefined_type_1_3.ids | 30 ++ ..._specified_for_the_predefined_type_1_3.ifc | 10 + ..._specified_for_the_predefined_type_2_3.ids | 30 ++ ..._specified_for_the_predefined_type_2_3.ifc | 10 + ...ined_predefined_types_may_be_specified.ids | 28 ++ ...ined_predefined_types_may_be_specified.ifc | 10 + ...inimal_ids_can_check_a_minimal_ifc_1_2.ids | 28 ++ ...inimal_ids_can_check_a_minimal_ifc_1_2.ifc | 11 + ...sses_only_if_all_requirements_pass_1_2.ids | 36 ++ ...sses_only_if_all_requirements_pass_1_2.ifc | 10 + ...ons_fails_if_the_applicability_matches.ids | 18 + ...ons_fails_if_the_applicability_matches.ifc | 10 + ...eed_at_least_one_applicable_entity_2_2.ids | 28 ++ ...eed_at_least_one_applicable_entity_2_2.ifc | 10 + ...inimal_ids_can_check_a_minimal_ifc_2_2.ids | 28 ++ ...inimal_ids_can_check_a_minimal_ifc_2_2.ifc | 11 + ...sses_only_if_all_requirements_pass_2_2.ids | 36 ++ ...sses_only_if_all_requirements_pass_2_2.ifc | 10 + ...ay_still_pass_if_nothing_is_applicable.ids | 28 ++ ...ay_still_pass_if_nothing_is_applicable.ifc | 10 + ..._if_the_applicability_does_not_matches.ids | 18 + ..._if_the_applicability_does_not_matches.ifc | 10 + ...eed_at_least_one_applicable_entity_1_2.ids | 28 ++ ...eed_at_least_one_applicable_entity_1_2.ifc | 10 + ..._and_facet_optionality_can_be_combined.ids | 36 ++ ..._and_facet_optionality_can_be_combined.ifc | 10 + ...nd_does_not_impact_pass_or_fail_result.ids | 28 ++ ...nd_does_not_impact_pass_or_fail_result.ifc | 11 + ...t_with_no_data_will_fail_a_value_check.ids | 25 ++ ...t_with_no_data_will_fail_a_value_check.ifc | 12 + ...t_with_no_data_will_fail_a_value_check.ids | 25 ++ ...t_with_no_data_will_fail_a_value_check.ifc | 13 + ...turns_the_opposite_of_a_required_facet.ids | 21 ++ ...turns_the_opposite_of_a_required_facet.ifc | 12 + ...nal_material_fails_if_no_value_matches.ids | 25 ++ ...nal_material_fails_if_no_value_matches.ifc | 12 + ...lements_without_a_material_always_fail.ids | 21 ++ ...lements_without_a_material_always_fail.ifc | 10 + ...l_with_no_data_will_fail_a_value_check.ids | 25 ++ ...l_with_no_data_will_fail_a_value_check.ifc | 12 + ...layer_set_name_will_pass_a_value_check.ids | 25 ++ ...layer_set_name_will_pass_a_value_check.ifc | 14 + ...rial_category_may_pass_the_value_check.ids | 25 ++ ...rial_category_may_pass_the_value_check.ifc | 12 + ...material_name_may_pass_the_value_check.ids | 25 ++ ...material_name_may_pass_the_value_check.ifc | 12 + ..._facet_checks_all_parameters_as_normal.ids | 21 ++ ..._facet_checks_all_parameters_as_normal.ifc | 12 + ...ss-an_optional_material_passes_if_null.ids | 25 ++ ...ss-an_optional_material_passes_if_null.ifc | 10 + ..._optional_material_passes_if_specified.ids | 25 ++ ..._optional_material_passes_if_specified.ifc | 12 + ...onstituent_set_will_pass_a_value_check.ids | 25 ++ ...onstituent_set_will_pass_a_value_check.ifc | 14 + ...onstituent_set_will_pass_a_value_check.ids | 25 ++ ...onstituent_set_will_pass_a_value_check.ifc | 14 + ...in_a_layer_set_will_pass_a_value_check.ids | 25 ++ ...in_a_layer_set_will_pass_a_value_check.ifc | 14 + ...in_a_layer_set_will_pass_a_value_check.ids | 25 ++ ...in_a_layer_set_will_pass_a_value_check.ifc | 14 + ...onstituent_set_will_pass_a_value_check.ids | 25 ++ ...onstituent_set_will_pass_a_value_check.ifc | 14 + ...in_a_layer_set_will_pass_a_value_check.ids | 25 ++ ...in_a_layer_set_will_pass_a_value_check.ifc | 14 + ...gory_in_a_list_will_pass_a_value_check.ids | 25 ++ ...gory_in_a_list_will_pass_a_value_check.ifc | 13 + ..._a_profile_set_will_pass_a_value_check.ids | 25 ++ ..._a_profile_set_will_pass_a_value_check.ifc | 15 + ...onstituent_set_will_pass_a_value_check.ids | 25 ++ ...onstituent_set_will_pass_a_value_check.ifc | 14 + ...in_a_layer_set_will_pass_a_value_check.ids | 25 ++ ...in_a_layer_set_will_pass_a_value_check.ifc | 14 + ...name_in_a_list_will_pass_a_value_check.ids | 25 ++ ...name_in_a_list_will_pass_a_value_check.ifc | 13 + ..._a_profile_set_will_pass_a_value_check.ids | 25 ++ ..._a_profile_set_will_pass_a_value_check.ifc | 15 + ..._a_profile_set_will_pass_a_value_check.ids | 25 ++ ..._a_profile_set_will_pass_a_value_check.ifc | 15 + ..._a_profile_set_will_pass_a_value_check.ids | 25 ++ ..._a_profile_set_will_pass_a_value_check.ifc | 15 + ...rial_will_pass_an_empty_material_facet.ids | 21 ++ ...rial_will_pass_an_empty_material_facet.ifc | 12 + ...can_inherit_materials_from_their_types.ids | 25 ++ ...can_inherit_materials_from_their_types.ifc | 14 + ...an_override_materials_from_their_types.ids | 25 ++ ...an_override_materials_from_their_types.ifc | 16 + ..._is_considered_false_and_will_not_pass.ids | 28 ++ ..._is_considered_false_and_will_not_pass.ifc | 19 ++ ...turns_the_opposite_of_a_required_facet.ids | 28 ++ ...turns_the_opposite_of_a_required_facet.ifc | 19 ++ ...operties_must_satisfy_requirements_3_3.ids | 33 ++ ...operties_must_satisfy_requirements_3_3.ifc | 20 ++ ...rty_sets_must_satisfy_requirements_2_3.ids | 30 ++ ...rty_sets_must_satisfy_requirements_2_3.ifc | 22 ++ ..._is_considered_false_and_will_not_pass.ids | 28 ++ ..._is_considered_false_and_will_not_pass.ifc | 19 ++ ...ue_in_a_bounded_property_will_pass_4_4.ids | 31 ++ ...ue_in_a_bounded_property_will_pass_4_4.ifc | 19 ++ ...value_in_a_list_property_will_pass_3_3.ids | 31 ++ ...value_in_a_list_property_will_pass_3_3.ifc | 19 ++ ...alue_in_a_table_property_will_pass_3_3.ids | 31 ++ ...alue_in_a_table_property_will_pass_3_3.ifc | 19 ++ ..._be_specified_as_lowercase_strings_1_3.ids | 31 ++ ..._be_specified_as_lowercase_strings_1_3.ifc | 19 ++ ...mplex_properties_are_not_supported_1_2.ids | 28 ++ ...mplex_properties_are_not_supported_1_2.ifc | 20 ++ ...mplex_properties_are_not_supported_2_2.ids | 28 ++ ...mplex_properties_are_not_supported_2_2.ifc | 20 ++ .../fail-dates_are_treated_as_strings_2_2.ids | 31 ++ .../fail-dates_are_treated_as_strings_2_2.ifc | 19 ++ ...l-durations_are_treated_as_strings_1_2.ids | 31 ++ ...l-durations_are_treated_as_strings_1_2.ifc | 19 ++ ...atching_pset_but_no_property_also_fail.ids | 28 ++ ...atching_pset_but_no_property_also_fail.ifc | 19 ++ ...lements_with_no_properties_always_fail.ids | 28 ++ ...lements_with_no_properties_always_fail.ifc | 16 + ...ing_truncation_such_as_for_identifiers.ids | 31 ++ ...ing_truncation_such_as_for_identifiers.ifc | 19 ++ ...l_values_must_satisfy_requirements_2_2.ids | 36 ++ ...l_values_must_satisfy_requirements_2_2.ifc | 20 ++ ...ties_that_are_absent_fail_under_ifc2x3.ids | 28 ++ ...ties_that_are_absent_fail_under_ifc2x3.ifc | 11 + ...erties_that_are_absent_fail_under_ifc4.ids | 28 ++ ...erties_that_are_absent_fail_under_ifc4.ifc | 11 + ...e_used_to_specify_an_ifc_data_type_1_2.ids | 31 ++ ...e_used_to_specify_an_ifc_data_type_1_2.ifc | 19 ++ ...n_an_enumerated_property_will_fail_3_3.ids | 31 ++ ...n_an_enumerated_property_will_fail_3_3.ifc | 20 ++ ...ties_are_supported_but_discouraged_2_2.ids | 31 ++ ...ties_are_supported_but_discouraged_2_2.ifc | 18 + ...absent_fail_under_ifc2x3_via_ifcobject.ids | 28 ++ ...absent_fail_under_ifc2x3_via_ifcobject.ifc | 10 + ..._absent_fail_under_ifc4_via_ifccontext.ids | 28 ++ ..._absent_fail_under_ifc4_via_ifccontext.ifc | 10 + ...be_associated_to_relevant_object_types.ids | 33 ++ ...be_associated_to_relevant_object_types.ifc | 109 ++++++ ..._can_be_overriden_by_an_occurrence_2_2.ids | 31 ++ ..._can_be_overriden_by_an_occurrence_2_2.ifc | 23 ++ ...fail-properties_with_a_null_value_fail.ids | 28 ++ ...fail-properties_with_a_null_value_fail.ifc | 19 ++ ...ust_also_match_the_appropriate_measure.ids | 28 ++ ...ust_also_match_the_appropriate_measure.ifc | 19 ++ ...e_treated_as_objects_and_not_supported.ids | 28 ++ ...e_treated_as_objects_and_not_supported.ifc | 19 ++ ...a_value_fails_against_different_values.ids | 31 ++ ...a_value_fails_against_different_values.ifc | 19 ++ ...ue_performs_a_case_sensitive_match_2_2.ids | 31 ++ ...ue_performs_a_case_sensitive_match_2_2.ifc | 19 ++ ...ce_to_ids_nominated_standard_units_1_2.ids | 31 ++ ...ce_to_ids_nominated_standard_units_1_2.ifc | 19 ++ ...tch_any_property_with_any_string_value.ids | 28 ++ ...tch_any_property_with_any_string_value.ifc | 20 ++ ...will_match_any_quantity_with_any_value.ids | 28 ++ ...will_match_any_quantity_with_any_value.ifc | 19 ++ ...ied_as_a_string_is_treated_as_a_string.ids | 31 ++ ...ied_as_a_string_is_treated_as_a_string.ifc | 19 ++ ...red_a_value_and_will_pass_a_name_check.ids | 28 ++ ...red_a_value_and_will_pass_a_name_check.ifc | 19 ++ ...rty_set_to_true_will_pass_a_name_check.ids | 28 ++ ...rty_set_to_true_will_pass_a_name_check.ifc | 19 ++ ..._facet_checks_all_parameters_as_normal.ids | 28 ++ ..._facet_checks_all_parameters_as_normal.ifc | 19 ++ .../pass-a_zero_duration_will_pass.ids | 28 ++ .../pass-a_zero_duration_will_pass.ifc | 19 ++ ...operties_must_satisfy_requirements_1_3.ids | 33 ++ ...operties_must_satisfy_requirements_1_3.ifc | 19 ++ ...operties_must_satisfy_requirements_2_3.ids | 33 ++ ...operties_must_satisfy_requirements_2_3.ifc | 20 ++ ...rty_sets_must_satisfy_requirements_1_3.ids | 30 ++ ...rty_sets_must_satisfy_requirements_1_3.ifc | 19 ++ ...rty_sets_must_satisfy_requirements_3_3.ids | 30 ++ ...rty_sets_must_satisfy_requirements_3_3.ifc | 23 ++ ...lways_passes_regardless_of_outcome_1_2.ids | 28 ++ ...lways_passes_regardless_of_outcome_1_2.ifc | 19 ++ ...lways_passes_regardless_of_outcome_2_2.ids | 28 ++ ...lways_passes_regardless_of_outcome_2_2.ifc | 19 ++ ...ue_in_a_bounded_property_will_pass_1_4.ids | 31 ++ ...ue_in_a_bounded_property_will_pass_1_4.ifc | 19 ++ ...ue_in_a_bounded_property_will_pass_2_4.ids | 31 ++ ...ue_in_a_bounded_property_will_pass_2_4.ifc | 19 ++ ...ue_in_a_bounded_property_will_pass_3_4.ids | 31 ++ ...ue_in_a_bounded_property_will_pass_3_4.ifc | 19 ++ ...value_in_a_list_property_will_pass_1_3.ids | 31 ++ ...value_in_a_list_property_will_pass_1_3.ifc | 19 ++ ...value_in_a_list_property_will_pass_2_3.ids | 31 ++ ...value_in_a_list_property_will_pass_2_3.ifc | 19 ++ ...alue_in_a_table_property_will_pass_1_3.ids | 31 ++ ...alue_in_a_table_property_will_pass_1_3.ifc | 19 ++ ...alue_in_a_table_property_will_pass_2_3.ids | 31 ++ ...alue_in_a_table_property_will_pass_2_3.ifc | 19 ++ ...n_an_enumerated_property_will_pass_1_3.ids | 31 ++ ...n_an_enumerated_property_will_pass_1_3.ifc | 20 ++ ...n_an_enumerated_property_will_pass_2_3.ids | 31 ++ ...n_an_enumerated_property_will_pass_2_3.ifc | 20 ++ ..._be_specified_as_lowercase_strings_2_3.ids | 31 ++ ..._be_specified_as_lowercase_strings_2_3.ifc | 19 ++ .../pass-dates_are_treated_as_strings_1_2.ids | 31 ++ .../pass-dates_are_treated_as_strings_1_2.ifc | 19 ++ ...s-durations_are_treated_as_strings_2_2.ids | 31 ++ ...s-durations_are_treated_as_strings_2_2.ifc | 19 ++ ...l_values_must_satisfy_requirements_1_2.ids | 36 ++ ...l_values_must_satisfy_requirements_1_2.ifc | 20 ++ ...ues_are_checked_using_type_casting_1_4.ids | 31 ++ ...ues_are_checked_using_type_casting_1_4.ifc | 19 ++ ..._ifc2x3_via_extendedmaterialproperties.ids | 28 ++ ..._ifc2x3_via_extendedmaterialproperties.ifc | 13 + ...d_under_ifc4_via_ifcmaterialproperties.ids | 28 ++ ...d_under_ifc4_via_ifcmaterialproperties.ifc | 13 + ...e_used_to_specify_an_ifc_data_type_2_2.ids | 31 ++ ...e_used_to_specify_an_ifc_data_type_2_2.ifc | 19 ++ ...haracters_are_treated_without_encoding.ids | 31 ++ ...haracters_are_treated_without_encoding.ifc | 19 ++ ...ally_formatted_numbers_are_allowed_3_4.ids | 31 ++ ...ally_formatted_numbers_are_allowed_3_4.ifc | 19 ++ ...ally_formatted_numbers_are_allowed_4_4.ids | 31 ++ ...ally_formatted_numbers_are_allowed_4_4.ifc | 19 ++ ...ties_are_supported_but_discouraged_1_2.ids | 31 ++ ...ties_are_supported_but_discouraged_1_2.ifc | 18 + ...e_supported_under_ifc2x3_via_ifcobject.ids | 28 ++ ...e_supported_under_ifc2x3_via_ifcobject.ifc | 13 + ...re_supported_under_ifc4_via_ifccontext.ids | 28 ++ ...re_supported_under_ifc4_via_ifccontext.ifc | 13 + ...ies_can_be_inherited_from_the_type_1_2.ids | 28 ++ ...ies_can_be_inherited_from_the_type_1_2.ifc | 20 ++ ...ies_can_be_inherited_from_the_type_2_2.ids | 28 ++ ...ies_can_be_inherited_from_the_type_2_2.ifc | 20 ++ ..._can_be_overriden_by_an_occurrence_1_2.ids | 31 ++ ..._can_be_overriden_by_an_occurrence_1_2.ifc | 23 ++ ...ues_are_checked_using_type_casting_1_3.ids | 31 ++ ...ues_are_checked_using_type_casting_1_3.ifc | 19 ++ ...ues_are_checked_using_type_casting_2_3.ids | 31 ++ ...ues_are_checked_using_type_casting_2_3.ifc | 19 ++ ...ues_are_checked_using_type_casting_3_3.ids | 31 ++ ...ues_are_checked_using_type_casting_3_3.ifc | 19 ++ ...ue_performs_a_case_sensitive_match_1_2.ids | 31 ++ ...ue_performs_a_case_sensitive_match_1_2.ifc | 19 ++ ...ce_to_ids_nominated_standard_units_2_2.ids | 31 ++ ...ce_to_ids_nominated_standard_units_2_2.ifc | 19 ++ .../fail-a_bound_can_be_exclusive_1_3.ids | 31 ++ .../fail-a_bound_can_be_exclusive_1_3.ifc | 10 + .../fail-a_bound_can_be_exclusive_3_3.ids | 31 ++ .../fail-a_bound_can_be_exclusive_3_3.ifc | 10 + .../fail-a_bound_can_be_inclusive_4_4.ids | 31 ++ .../fail-a_bound_can_be_inclusive_4_4.ifc | 10 + ...umeration_matches_case_sensitively_3_3.ids | 31 ++ ...umeration_matches_case_sensitively_3_3.ifc | 10 + ...umeration_matches_case_sensitively_4_3.ids | 31 ++ ...umeration_matches_case_sensitively_4_3.ifc | 10 + .../fail-length_checks_can_be_used_1_2.ids | 30 ++ .../fail-length_checks_can_be_used_1_2.ifc | 10 + ..._and_min_length_checks_can_be_used_1_3.ids | 31 ++ ..._and_min_length_checks_can_be_used_1_3.ifc | 10 + ..._and_min_length_checks_can_be_used_4_3.ids | 31 ++ ..._and_min_length_checks_can_be_used_4_3.ifc | 10 + .../fail-regex_patterns_can_be_used_3_3.ids | 30 ++ .../fail-regex_patterns_can_be_used_3_3.ifc | 10 + .../fail-regex_patterns_work_in_OR_3_3.ids | 31 ++ .../fail-regex_patterns_work_in_OR_3_3.ifc | 10 + .../pass-a_bound_can_be_exclusive_2_3.ids | 31 ++ .../pass-a_bound_can_be_exclusive_2_3.ifc | 10 + .../pass-a_bound_can_be_inclusive_1_4.ids | 31 ++ .../pass-a_bound_can_be_inclusive_1_4.ifc | 10 + .../pass-a_bound_can_be_inclusive_2_4.ids | 31 ++ .../pass-a_bound_can_be_inclusive_2_4.ifc | 10 + .../pass-a_bound_can_be_inclusive_3_4.ids | 31 ++ .../pass-a_bound_can_be_inclusive_3_4.ifc | 10 + ...umeration_matches_case_sensitively_1_3.ids | 31 ++ ...umeration_matches_case_sensitively_1_3.ifc | 10 + ...umeration_matches_case_sensitively_2_3.ids | 31 ++ ...umeration_matches_case_sensitively_2_3.ifc | 10 + .../pass-length_checks_can_be_used_2_2.ids | 30 ++ .../pass-length_checks_can_be_used_2_2.ifc | 10 + ..._and_min_length_checks_can_be_used_2_3.ids | 31 ++ ..._and_min_length_checks_can_be_used_2_3.ifc | 10 + ..._and_min_length_checks_can_be_used_3_3.ids | 31 ++ ..._and_min_length_checks_can_be_used_3_3.ifc | 10 + .../pass-regex_patterns_can_be_used_1_3.ids | 30 ++ .../pass-regex_patterns_can_be_used_1_3.ifc | 10 + .../pass-regex_patterns_can_be_used_2_3.ids | 30 ++ .../pass-regex_patterns_can_be_used_2_3.ifc | 10 + .../pass-regex_patterns_work_in_OR_1_3.ids | 31 ++ .../pass-regex_patterns_work_in_OR_1_3.ifc | 10 + .../pass-regex_patterns_work_in_OR_2_3.ids | 31 ++ .../pass-regex_patterns_work_in_OR_2_3.ifc | 10 + ...point_negative_high_number_lower_bound.ids | 31 ++ ...point_negative_high_number_lower_bound.ifc | 19 ++ ...point_negative_high_number_upper_bound.ids | 31 ++ ...point_negative_high_number_upper_bound.ifc | 19 ++ ..._point_negative_low_number_lower_bound.ids | 31 ++ ..._point_negative_low_number_lower_bound.ifc | 19 ++ ..._point_negative_low_number_upper_bound.ids | 31 ++ ..._point_negative_low_number_upper_bound.ifc | 19 ++ ...loating_point_negative_one_lower_bound.ids | 31 ++ ...loating_point_negative_one_lower_bound.ifc | 19 ++ ...loating_point_negative_one_upper_bound.ids | 31 ++ ...loating_point_negative_one_upper_bound.ifc | 19 ++ ...nce_for_floating_point_one_lower_bound.ids | 31 ++ ...nce_for_floating_point_one_lower_bound.ifc | 19 ++ ...nce_for_floating_point_one_upper_bound.ids | 31 ++ ...nce_for_floating_point_one_upper_bound.ifc | 19 ++ ...point_positive_high_number_lower_bound.ids | 31 ++ ...point_positive_high_number_lower_bound.ifc | 19 ++ ...point_positive_high_number_upper_bound.ids | 31 ++ ...point_positive_high_number_upper_bound.ifc | 19 ++ ..._point_positive_low_number_lower_bound.ids | 31 ++ ..._point_positive_low_number_lower_bound.ifc | 19 ++ ..._point_positive_low_number_upper_bound.ids | 31 ++ ..._point_positive_low_number_upper_bound.ifc | 19 ++ ...oint_range_greater_than_zero_exclusive.ids | 33 ++ ...oint_range_greater_than_zero_exclusive.ifc | 19 ++ ...oint_range_greater_than_zero_inclusive.ids | 33 ++ ...oint_range_greater_than_zero_inclusive.ifc | 19 ++ ..._point_range_lower_than_zero_exclusive.ids | 33 ++ ..._point_range_lower_than_zero_exclusive.ifc | 19 ++ ..._point_range_lower_than_zero_inclusive.ids | 33 ++ ..._point_range_lower_than_zero_inclusive.ifc | 19 ++ ...ce_for_floating_point_zero_lower_bound.ids | 31 ++ ...ce_for_floating_point_zero_lower_bound.ifc | 19 ++ ...ce_for_floating_point_zero_upper_bound.ids | 31 ++ ...ce_for_floating_point_zero_upper_bound.ifc | 19 ++ ...point_negative_high_number_lower_bound.ids | 31 ++ ...point_negative_high_number_lower_bound.ifc | 19 ++ ...point_negative_high_number_upper_bound.ids | 31 ++ ...point_negative_high_number_upper_bound.ifc | 19 ++ ..._point_negative_low_number_lower_bound.ids | 31 ++ ..._point_negative_low_number_lower_bound.ifc | 19 ++ ..._point_negative_low_number_upper_bound.ids | 31 ++ ..._point_negative_low_number_upper_bound.ifc | 19 ++ ...loating_point_negative_one_lower_bound.ids | 31 ++ ...loating_point_negative_one_lower_bound.ifc | 19 ++ ...loating_point_negative_one_upper_bound.ids | 31 ++ ...loating_point_negative_one_upper_bound.ifc | 19 ++ ...nce_for_floating_point_one_lower_bound.ids | 31 ++ ...nce_for_floating_point_one_lower_bound.ifc | 19 ++ ...nce_for_floating_point_one_upper_bound.ids | 31 ++ ...nce_for_floating_point_one_upper_bound.ifc | 19 ++ ...point_positive_high_number_lower_bound.ids | 31 ++ ...point_positive_high_number_lower_bound.ifc | 19 ++ ...point_positive_high_number_upper_bound.ids | 31 ++ ...point_positive_high_number_upper_bound.ifc | 19 ++ ..._point_positive_low_number_lower_bound.ids | 31 ++ ..._point_positive_low_number_lower_bound.ifc | 19 ++ ..._point_positive_low_number_upper_bound.ids | 31 ++ ..._point_positive_low_number_upper_bound.ifc | 19 ++ ...oint_range_greater_than_zero_exclusive.ids | 33 ++ ...oint_range_greater_than_zero_exclusive.ifc | 19 ++ ...oint_range_greater_than_zero_inclusive.ids | 33 ++ ...oint_range_greater_than_zero_inclusive.ifc | 19 ++ ..._point_range_lower_than_zero_exclusive.ids | 33 ++ ..._point_range_lower_than_zero_exclusive.ifc | 19 ++ ..._point_range_lower_than_zero_inclusive.ids | 33 ++ ..._point_range_lower_than_zero_inclusive.ifc | 19 ++ ...ce_for_floating_point_zero_lower_bound.ids | 31 ++ ...ce_for_floating_point_zero_lower_bound.ifc | 19 ++ ...ce_for_floating_point_zero_upper_bound.ids | 31 ++ ...ce_for_floating_point_zero_upper_bound.ifc | 19 ++ 424 files changed, 10303 insertions(+), 593 deletions(-) create mode 100644 packages/core/src/openbim/IDSSpecifications/conformance.test.ts create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/entity-mapping.ts create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/predefined-properties.ts create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/unit-types.ts create mode 100644 packages/core/src/openbim/IDSSpecifications/src/facets/units.ts create mode 100644 packages/core/tests/fixtures/ids-conformance/LICENSE create mode 100644 packages/core/tests/fixtures/ids-conformance/README.md create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-elements_without_a_material_always_fail.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-elements_without_a_material_always_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_required_facet_checks_all_parameters_as_normal.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-a_required_facet_checks_all_parameters_as_normal.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_facet.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_facet.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ifc create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ids create mode 100644 packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ifc diff --git a/packages/core/src/openbim/IDSSpecifications/conformance.test.ts b/packages/core/src/openbim/IDSSpecifications/conformance.test.ts new file mode 100644 index 000000000..56ebc0884 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/conformance.test.ts @@ -0,0 +1,108 @@ +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 directory = + process.env.IDS_CONFORMANCE_DIR ?? + path.resolve(__dirname, "../../../tests/fixtures/ids-conformance"); +const files = fs + .readdirSync(directory, { recursive: true }) + .map(String) + .filter( + (name) => + /(^|\/)(pass|fail)-.*\.ids$/.test(name) && + fs.existsSync(path.join(directory, name.replace(/\.ids$/, ".ifc"))), + ); +describe("IDS full conformance", () => { + it.each(files)( + "%s", + async (name) => { + const importer = new FRAGS.IfcImporter(); + importer.wasm = { + path: `${path.resolve(__dirname, "../../../../../node_modules/web-ifc")}/`, + absolute: true, + }; + importer.includeRelationNames = true; + importer.includeMaterialProperties = true; + for (const [code, parent, child] of [ + [ + WEBIFC.IFCRELASSOCIATESCLASSIFICATION, + "ClassificationForObjects", + "HasAssociations", + ], + [WEBIFC.IFCRELASSOCIATESMATERIAL, "AssociatedTo", "HasAssociations"], + [WEBIFC.IFCRELDEFINESBYTYPE, "Types", "IsTypedBy"], + [WEBIFC.IFCRELAGGREGATES, "IsDecomposedBy", "Decomposes"], + [WEBIFC.IFCRELNESTS, "IsNestedBy", "Nests"], + [WEBIFC.IFCRELASSIGNSTOGROUP, "IsGroupedBy", "HasAssignments"], + [ + WEBIFC.IFCRELCONTAINEDINSPATIALSTRUCTURE, + "ContainsElements", + "ContainedInStructure", + ], + [WEBIFC.IFCRELVOIDSELEMENT, "HasOpenings", "VoidsElements"], + [WEBIFC.IFCRELFILLSELEMENT, "HasFillings", "FillsVoids"], + ] as const) + importer.relations.set(code, { + forRelated: child, + forRelating: parent, + }); + const ifc = fs.readFileSync( + path.join(directory!, 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); + } + const bytes = await importer.process({ + bytes: new TextEncoder().encode(ifc), + raw: true, + }); + const model = new FRAGS.SingleThreadedFragmentsModel( + "conformance", + bytes, + true, + ); + const components = new OBC.Components(); + const spy = vi + .spyOn(components.get(OBC.FragmentsManager), "list", "get") + .mockReturnValue(new Map([["conformance", model]]) as never); + try { + const specs = components + .get(OBC.IDSSpecifications) + .load(fs.readFileSync(path.join(directory!, name), "utf8")); + let pass = true; + for (const spec of specs) + if ( + !(await spec.verify([/^conformance$/], { skipIfFails: false })).pass + ) + pass = false; + expect(pass).toBe(path.basename(name).startsWith("pass-")); + const exported = components + .get(OBC.IDSSpecifications) + .export({ title: "IDS conformance" }, specs); + const roundtrip = components.get(OBC.IDSSpecifications).load(exported); + expect(roundtrip.length).toBe(specs.length); + let repeated = true; + for (const spec of roundtrip) + if ( + !(await spec.verify([/^conformance$/], { skipIfFails: false })).pass + ) + repeated = false; + expect(repeated).toBe(pass); + } finally { + spy.mockRestore(); + components.dispose(); + model.dispose(); + } + }, + 60000, + ); +}); diff --git a/packages/core/src/openbim/IDSSpecifications/example.html b/packages/core/src/openbim/IDSSpecifications/example.html index d14196a7f..6ffd4f9ff 100644 --- a/packages/core/src/openbim/IDSSpecifications/example.html +++ b/packages/core/src/openbim/IDSSpecifications/example.html @@ -1,67 +1,74 @@ + + + + - - - - - - - - IDS Specifications - - - -
- - + @media (max-width: 480px) { + .options-menu { + visibility: hidden; + bottom: 5px; + left: 5px; + } + + .options-menu-visible { + visibility: visible; + } + + .phone-menu-toggler { + visibility: visible; + position: fixed; + top: 5px; + right: 5px; + } + } + + - \ No newline at end of file + +
+ + + diff --git a/packages/core/src/openbim/IDSSpecifications/example.ts b/packages/core/src/openbim/IDSSpecifications/example.ts index 5706aee16..35c5a302c 100644 --- a/packages/core/src/openbim/IDSSpecifications/example.ts +++ b/packages/core/src/openbim/IDSSpecifications/example.ts @@ -225,7 +225,8 @@ const restoreModelMaterials = () => { for (const [material, data] of originalColors) { const { color, transparent, opacity } = data; material.transparent = transparent; - const isLod = "isLodMaterial" in material && (material as any).isLodMaterial; + const isLod = + "isLodMaterial" in material && (material as any).isLodMaterial; if (isLod) { (material as any).lodOpacity = opacity; material.lodColor.setHex(color); diff --git a/packages/core/src/openbim/IDSSpecifications/index.ts b/packages/core/src/openbim/IDSSpecifications/index.ts index 2c86e6673..a8c5fc4f2 100644 --- a/packages/core/src/openbim/IDSSpecifications/index.ts +++ b/packages/core/src/openbim/IDSSpecifications/index.ts @@ -35,13 +35,14 @@ export class IDSSpecifications extends Component { ignoreDeclaration: true, ignorePiTags: true, numberParseOptions: { leadingZeros: true, hex: true }, - parseAttributeValue: true, + parseAttributeValue: false, + parseTagValue: false, preserveOrder: false, // Decode & < > " ' so values compare equal to the // model's text. fast-xml-parser applies its expansion limits by default. processEntities: true, removeNSPrefix: true, - trimValues: true, + trimValues: false, }); IDSInfo?: IDSInfo; @@ -112,7 +113,10 @@ export class IDSSpecifications extends Component { const ids = IDSSpecifications.xmlParser.parse(data).ids; const { specifications, info } = ids; - this.IDSInfo = { ...info }; + this.IDSInfo = { + ...info, + ...(info.date ? { date: new Date(info.date) } : {}), + }; if (specifications && specifications.specification) { const specs = Array.isArray(specifications.specification) @@ -219,8 +223,10 @@ export class IDSSpecifications extends Component { specification.instructions = instructions; specification.requirementsDescription = requirementsDescription; const { minOccurs, maxOccurs } = applicability ?? {}; - if (typeof minOccurs === "number") specification.minOccurs = minOccurs; - if (typeof maxOccurs === "number") specification.maxOccurs = maxOccurs; + if (minOccurs !== undefined) + specification.minOccurs = Number(minOccurs); + if (maxOccurs !== undefined && maxOccurs !== "unbounded") + specification.maxOccurs = Number(maxOccurs); specification.applicability.add(...applicabilities); specification.requirements.add(...reqs); result.push(specification); @@ -243,7 +249,7 @@ export class IDSSpecifications extends Component { specifications: Iterable = this.list.values(), ) { const _specifications = specifications ?? this.list; - const xml = ` + const xml = ` ${XML.escape(info.title)} diff --git a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts index f8676a5b6..8cc800d77 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts @@ -86,7 +86,11 @@ export class IDSSpecification implements IDSSpecificationData { modelIds: RegExp[], config: { skipIfFails: boolean } = { skipIfFails: true }, ) { - const { result, applicable } = await this.run(modelIds, config, true); + const { result, applicable, entities } = await this.run( + modelIds, + config, + true, + ); const max = this.maxOccurs === "unbounded" ? Infinity : this.maxOccurs; let pass = applicable >= this.minOccurs && applicable <= max; if (max > 0) { @@ -94,7 +98,7 @@ export class IDSSpecification implements IDSSpecificationData { for (const item of items.values()) if (!item.pass) pass = false; } } - return { pass, applicable, result }; + return { pass, applicable, result, items: entities }; } private async run( @@ -125,17 +129,15 @@ export class IDSSpecification implements IDSSpecificationData { this.requirements.size === 0 || (skipProhibitedRequirements && this.maxOccurs === 0) ) { - return { result, applicable }; + return { result, applicable, entities }; } - // Test applicable elements against requirements - const requirementPromises = []; + // Keep facet checks in document order so reports can identify each + // requirement even when several facets have the same kind. for (const requirement of this.requirements) { - requirementPromises.push(requirement.test(entities, result, config)); + await requirement.test(entities, result, config); } - - await Promise.all(requirementPromises); - return { result, applicable }; + return { result, applicable, entities }; } /** @@ -163,9 +165,13 @@ export class IDSSpecification implements IDSSpecificationData { ${[...this.applicability].map((facet) => facet.serialize("applicability")).join("\n")} - + ${ + this.requirements.size + ? ` ${[...this.requirements].map((facet) => facet.serialize("requirement")).join("\n")} - +
` + : "" + }
`; return xml; } diff --git a/packages/core/src/openbim/IDSSpecifications/src/exporters/parameter.ts b/packages/core/src/openbim/IDSSpecifications/src/exporters/parameter.ts index af398d09c..2f2e5c0df 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/exporters/parameter.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/exporters/parameter.ts @@ -30,12 +30,12 @@ export const getParameterXML = ( const { min, minInclusive, max, maxInclusive } = parameter.parameter; let minTag = ""; if (min !== undefined) { - minTag = ``; + minTag = ``; } let maxTag = ""; if (max !== undefined) { - maxTag = ``; + maxTag = ``; } parameterXML = ` @@ -68,6 +68,15 @@ export const getParameterXML = ( `; } + if (parameter.type === "restriction") { + const { base, ...facets } = parameter.parameter; + const children = Object.entries(facets).flatMap(([key, values]) => + (Array.isArray(values) ? values : [values]).map( + (facet) => ``, + ), + ); + parameterXML = `${children.join("\n")}`; + } const xml = `<${name[0].toLowerCase() + name.slice(1)}> ${parameterXML} `; diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts index b6c5e26ea..790a37e34 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Attribute.ts @@ -29,7 +29,7 @@ export class IDSAttribute extends IDSFacet { if (type === "requirement") { attributes += `cardinality="${this.cardinality}"`; attributes += this.instructions - ? `instructions="${XML.escape(this.instructions)}"` + ? ` instructions="${XML.escape(this.instructions)}"` : ""; } return ` diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Entity.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Entity.ts index a4a27d159..c64511f06 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Entity.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Entity.ts @@ -1,3 +1,4 @@ +import { IDS_IFC2X3_MAPPING } from "./entity-mapping"; import * as FRAGS from "@thatopen/fragments"; import { Components } from "../../../../core/Components"; import { IDSFacet } from "./Facet"; @@ -8,7 +9,6 @@ import { ModelIdDataMap, ModelIdMap, } from "../../../../fragments"; -import { ModelIdMapUtils } from "../../../../utils"; import { XML } from "../../../../utils/xml"; // https://github.com/buildingSMART/IDS/blob/development/Documentation/UserManual/entity-facet.md @@ -25,10 +25,12 @@ export class IDSEntity extends IDSFacet { serialize(type: "applicability" | "requirement") { const nameXML = getParameterXML("Name", this.name); - const predefinedTypeXML = getParameterXML("Name", this.predefinedType); + const predefinedTypeXML = getParameterXML( + "PredefinedType", + this.predefinedType, + ); let attributes = ""; if (type === "requirement") { - attributes += `cardinality="${this.cardinality}"`; attributes += this.instructions ? `instructions="${XML.escape(this.instructions)}"` : ""; @@ -40,66 +42,48 @@ export class IDSEntity extends IDSFacet { } async getEntities(modelIds: RegExp[], collector: ModelIdMap) { - const fragments = this._components.get(FragmentsManager); - const modelCategories = new Map(); - - // Check the categories from each model to see - // which of them matches the facet parameter this.name - for (const [modelId, model] of fragments.list) { - const isValidModel = modelIds.find((regex) => regex.test(modelId)); - if (!isValidModel) continue; + for (const [modelId, model] of this._components.get(FragmentsManager) + .list) { + if (!modelIds.some((pattern) => pattern.test(modelId))) continue; const categories = await model.getCategories(); - for (const category of categories) { - const isValidCategory = await this.evalName(category); - if (!isValidCategory) continue; - let validCategories = modelCategories.get(modelId); - if (!validCategories) { - validCategories = []; - modelCategories.set(modelId, validCategories); - } - validCategories.push(category); - } - } - - // Get all the localIds from the categories passing - // the conditions above - const items: ModelIdMap = {}; - await Promise.all( - Array.from(modelCategories.entries()).map( - async ([modelId, categories]) => { - const model = fragments.list.get(modelId); - if (!model) return; - const regexCategories = categories.map( - (cat) => new RegExp(`^${cat}$`), - ); - const categoryItemIds = - await model.getItemsOfCategories(regexCategories); - const localIds = Object.values(categoryItemIds).flat(); - items[modelId] = new Set(localIds); - }, - ), - ); - - if (!this.predefinedType) { - ModelIdMapUtils.add(collector, items); - return; - } - - // Check the predefinedType conditions - for (const [modelId, localIds] of Object.entries(items)) { - const model = fragments.list.get(modelId); - if (!model) continue; - const itemsData = await model.getItemsData([...localIds]); - for (const attribute of itemsData) { - if (!("value" in attribute._localId)) continue; - const isValidPredefinedType = await this.evalPredefinedType( - modelId, - attribute, - ); - if (isValidPredefinedType) { - ModelIdMapUtils.append(collector, modelId, attribute._localId.value); - } - } + const metadata = await model.getMetadata(); + const mapped = String(metadata.schema).startsWith("IFC2X3"); + const possible = categories.filter( + (category) => + this.evalRequirement( + category, + this.name, + "Name", + undefined, + "required", + ) || + (mapped && + Object.entries(IDS_IFC2X3_MAPPING).some( + ([name, [occurrence]]) => + occurrence === category && + this.evalRequirement( + name, + this.name, + "Name", + undefined, + "required", + ), + )), + ); + if (!possible.length) continue; + const ids = Object.values( + await model.getItemsOfCategories( + possible.map((category) => new RegExp(`^${category}$`)), + ), + ).flat(); + const results: ModelIdDataMap = new FRAGS.DataMap(); + await this.test({ [modelId]: new Set(ids) }, results, { + skipIfFails: false, + }); + const selected = collector[modelId] ?? new Set(); + for (const [id, result] of results.get(modelId) ?? []) + if (result.pass) selected.add(id); + if (selected.size) collector[modelId] = selected; } } @@ -113,7 +97,13 @@ export class IDSEntity extends IDSFacet { const model = fragments.list.get(modelId); if (!model) continue; - const data = await model.getItemsData([...localIds]); + const data = await model.getItemsData([...localIds], { + relations: { + IsTypedBy: { attributes: true, relations: false }, + IsDefinedBy: { attributes: true, relations: false }, + }, + }); + const metadata = await model.getMetadata(); for (const item of data) { if (!("value" in item._category)) continue; const checks = this.getItemChecks( @@ -123,7 +113,25 @@ export class IDSEntity extends IDSFacet { config.skipIfFails, ); if (!checks) continue; - await this.evalName(item._category.value, checks); + let category = item._category.value; + if (String(metadata.schema).startsWith("IFC2X3")) { + const definitions = [ + ...(Array.isArray(item.IsTypedBy) ? item.IsTypedBy : []), + ...(Array.isArray(item.IsDefinedBy) ? item.IsDefinedBy : []), + ]; + const mapped = Object.entries(IDS_IFC2X3_MAPPING).find( + ([, [occurrence, type]]) => + occurrence === category && + definitions.some( + (definition) => + definition._category && + "value" in definition._category && + definition._category.value === type, + ), + ); + if (mapped) category = mapped[0]; + } + await this.evalName(category, checks); await this.evalPredefinedType(modelId, item, checks); } } diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts index d6b2b55cd..bc468c805 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Facet.ts @@ -43,7 +43,7 @@ export abstract class IDSFacet { checks?: IDSCheck[], cardinality: IDSSimpleCardinality | IDSConditionalCardinaltiy = this .cardinality, - ) => { + ): boolean => { const checkLog: IDSCheck = { parameter, currentValue: value, @@ -56,11 +56,38 @@ export abstract class IDSFacet { let pass = false; if (facetParameter.type === "simple") { - pass = value === facetParameter.parameter; + const expected = facetParameter.parameter; + pass = value === expected; + if ( + typeof value === "number" && + (typeof expected === "number" || + /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test( + String(expected), + )) + ) { + const number = Number(expected); + const tolerance = Math.abs(number) * 1e-6 + 1e-6; + pass = + Math.abs(value - number) <= + tolerance + + Number.EPSILON * Math.max(1, Math.abs(value), Math.abs(number)); + } + if (typeof value === "boolean") + pass = + String(expected) === String(value) || + String(expected) === (value ? "1" : "0"); } if (facetParameter.type === "enumeration") { - pass = facetParameter.parameter.includes(value as never); + pass = facetParameter.parameter.some((expected) => + this.evalRequirement( + value, + { type: "simple", parameter: expected }, + parameter, + undefined, + "required", + ), + ); } if (facetParameter.type === "pattern") { @@ -96,6 +123,46 @@ export abstract class IDSFacet { pass = minPass && maxPass; } + if (facetParameter.type === "restriction") { + const restriction = facetParameter.parameter; + const repeated = (key: string) => { + const item = restriction[key]; + return item === undefined ? [] : Array.isArray(item) ? item : [item]; + }; + pass = true; + const patterns = repeated("pattern"); + if (patterns.length) + pass = patterns.some(({ value: pattern }) => + new RegExp(`^(?:${pattern})$`, "u").test(String(value)), + ); + const enumeration = repeated("enumeration"); + if (enumeration.length) + pass &&= enumeration.some(({ value: expected }) => + this.evalRequirement( + value, + { type: "simple", parameter: expected }, + parameter, + undefined, + "required", + ), + ); + for (const [key, setting] of Object.entries(restriction)) { + if (["base", "pattern", "enumeration"].includes(key)) continue; + const limit = Number((setting as { value: string | number }).value); + if (key === "length") pass &&= [...String(value)].length === limit; + if (key === "minLength") pass &&= [...String(value)].length >= limit; + if (key === "maxLength") pass &&= [...String(value)].length <= limit; + if (key === "minInclusive") + pass &&= typeof value === "number" && value >= limit; + if (key === "minExclusive") + pass &&= typeof value === "number" && value > limit; + if (key === "maxInclusive") + pass &&= typeof value === "number" && value <= limit; + if (key === "maxExclusive") + pass &&= typeof value === "number" && value < limit; + } + } + if (cardinality === "prohibited") pass = !pass; if (cardinality === "optional") pass = true; diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Material.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Material.ts index 4b95c9602..1720ad314 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Material.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Material.ts @@ -5,135 +5,105 @@ import { ModelIdMap, } from "../../../../fragments"; import { getParameterXML } from "../exporters/parameter"; -import { IDSCheck, IDSFacetParameter, IDSItemCheckResult } from "../types"; +import { IDSFacetParameter, IDSItemCheckResult } from "../types"; import { IDSFacet } from "./Facet"; -import { ModelIdMapUtils } from "../../../../utils"; import { XML } from "../../../../utils/xml"; -// https://github.com/buildingSMART/IDS/blob/development/Documentation/UserManual/material-facet.md +const children = [ + "ForLayerSet", + "MaterialLayers", + "ForProfileSet", + "MaterialProfiles", + "Material", + "MaterialConstituents", + "Materials", +]; +const value = (item: FRAGS.ItemData, name: string) => { + const attribute = item[name]; + return attribute && !Array.isArray(attribute) ? attribute.value : undefined; +}; +const refs = (item: FRAGS.ItemData, name: string): FRAGS.ItemData[] => + Array.isArray(item[name]) ? (item[name] as FRAGS.ItemData[]) : []; export class IDSMaterial extends IDSFacet { - // Every type IfcRelAssociatesMaterial.RelatingMaterial (IfcMaterialSelect) - // can point at. Missing any of them silently drops every element that - // associates its material through it: an element can reference a layer set - // directly instead of through a layer set usage, and both spellings are - // valid IFC. - private _ifcMaterialEntities = [ - /^IFCMATERIALLAYERSETUSAGE$/, - /^IFCMATERIALLAYERSET$/, - /^IFCMATERIALPROFILESETUSAGE$/, - /^IFCMATERIALPROFILESET$/, - /^IFCMATERIALCONSTITUENTSET$/, - /^IFCMATERIAL$/, - /^IFCMATERIALLIST$/, - ]; - - // Attributes that lead from a material set / usage down to its IfcMaterial. - private _materialParentAttributes = [ - "ForLayerSet", - "MaterialLayers", - "ForProfileSet", - "MaterialProfiles", - "Material", - "MaterialConstituents", - "Materials", - ]; - - private _materialRelations = { - MaterialConstituents: { attributes: true, relations: true }, - ForLayerSet: { attributes: true, relations: true }, - MaterialLayers: { attributes: true, relations: true }, - ForProfileSet: { attributes: true, relations: true }, - MaterialProfiles: { attributes: true, relations: true }, - Materials: { attributes: true, relations: false }, - }; - facetType = "Material" as const; value?: IDSFacetParameter; uri?: string; serialize(type: "applicability" | "requirement") { - if (!(this.value && this.uri)) return ""; - const valueXML = getParameterXML("Value", this.value); let attributes = ""; if (type === "requirement") { - attributes += `cardinality="${this.cardinality}"`; - attributes += this.uri ? `uri=${this.uri}` : ""; - attributes += this.instructions - ? `instructions="${XML.escape(this.instructions)}"` - : ""; + attributes += ` cardinality="${this.cardinality}"`; + if (this.uri) attributes += ` uri="${XML.escape(this.uri)}"`; + if (this.instructions) + attributes += ` instructions="${XML.escape(this.instructions)}"`; } - return ` - ${valueXML} -`; + return `${getParameterXML("Value", this.value)}`; } async getEntities(modelIds: RegExp[], collector: ModelIdMap) { - const fragments = this._components.get(FragmentsManager); - - for (const [modelId, model] of fragments.list) { - const isValidModel = modelIds.find((regex) => regex.test(modelId)); - if (!isValidModel) continue; - - // IFCMATERIALLIST: DONE - // IFCMATERIALLAYERSETUSAGE: DONE - // IFCMATERIALCONSTITUENTSET: DONE - // IFCMATERIAL: DONE - const items = await model.getItemsOfCategories(this._ifcMaterialEntities); - const localIds = Object.values(items).flat(); - if (localIds.length === 0) continue; - - const data = await model.getItemsData(localIds, { - relations: { - AssociatedTo: { attributes: true, relations: false }, - ...this._materialRelations, - }, + for (const [modelId, model] of this._components.get(FragmentsManager) + .list) { + if (!modelIds.some((pattern) => pattern.test(modelId))) continue; + const ids = Object.values( + await model.getItemsOfCategories([/.*/]), + ).flat(); + const results: ModelIdDataMap = new FRAGS.DataMap(); + await this.test({ [modelId]: new Set(ids) }, results, { + skipIfFails: false, }); - - for (const item of data) { - if ( - !( - "value" in item._localId && - "value" in item._category && - Array.isArray(item.AssociatedTo) - ) - ) { - continue; - } - - const isValid = this.hasValidMaterial(item); - if (!isValid) continue; - - const relations = item.AssociatedTo.map((relation) => { - if (!("value" in relation._localId && relation._localId.value)) - return null; - return relation._localId.value; - }).filter((value) => value !== null); - - ModelIdMapUtils.append(collector, modelId, ...relations); - } + const selected = collector[modelId] ?? new Set(); + for (const [id, result] of results.get(modelId) ?? []) + if (result.pass) selected.add(id); + if (selected.size) collector[modelId] = selected; } } async test( items: ModelIdMap, collector: ModelIdDataMap, - config: { skipIfFails: boolean } = { skipIfFails: true }, + config = { skipIfFails: true }, ) { - const fragments = this._components.get(FragmentsManager); - for (const [modelId, localIds] of Object.entries(items)) { - const model = fragments.list.get(modelId); + const options = { + attributesDefault: true, + relations: Object.fromEntries( + [...children, "HasAssociations", "IsTypedBy", "IsDefinedBy"].map( + (name) => [name, { attributes: true, relations: false }], + ), + ), + }; + 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([[...localIds][0]], { - relations: { - AssociatedTo: { attributes: false, relations: false }, - HasAssociations: { attributes: true, relations: true }, - ...this._materialRelations, - }, - }); - - for (const item of data) { + const cache = new Map(); + const read = async (item: FRAGS.ItemData) => { + const id = value(item, "_localId"); + if (typeof id !== "number") return item; + if (!cache.has(id)) + cache.set(id, (await model.getItemsData([id], options))[0] ?? item); + return cache.get(id)!; + }; + const associations = async (item: FRAGS.ItemData) => { + const data = await read(item); + const own = refs(data, "HasAssociations").filter((ref) => + String(value(ref, "_category")).startsWith("IFCMATERIAL"), + ); + if (own.length) return own; + const inherited: FRAGS.ItemData[] = []; + for (const type of [ + ...refs(data, "IsTypedBy"), + ...refs(data, "IsDefinedBy"), + ]) { + const definition = await read(type); + inherited.push( + ...refs(definition, "HasAssociations").filter((ref) => + String(value(ref, "_category")).startsWith("IFCMATERIAL"), + ), + ); + } + return inherited; + }; + for (const item of await model.getItemsData([...ids])) { const checks = this.getItemChecks( collector, modelId, @@ -141,108 +111,54 @@ export class IDSMaterial extends IDSFacet { config.skipIfFails, ); if (!checks) continue; - - // If it doesn't have associations - // is because it doesn't have materials - if (!Array.isArray(item.HasAssociations)) { - checks.push({ - parameter: null, - currentValue: null, - requiredValue: this.value, - pass: false, - }); - continue; - } - - for (const association of item.HasAssociations) { - if ( - !this._ifcMaterialEntities.some((parent) => { - if (!("value" in association._category)) return false; - return parent.test(association._category.value); - }) - ) { - continue; + const roots = await associations(item); + let matches = false; + const seen = new Set(); + const visit = async (ref: FRAGS.ItemData): Promise => { + const id = value(ref, "_localId"); + if (typeof id === "number") { + if (seen.has(id)) return false; + seen.add(id); } - - const isValid = this.hasValidMaterial(association, checks); - if (isValid) break; - } - } - } - } - - private hasValidMaterial(item: FRAGS.ItemData, checks?: IDSCheck[]) { - let isValid = false; - if ("value" in item._category && item._category.value === "IFCMATERIAL") { - const result = this.evalValue(item, checks); - if (result) isValid = true; - } else { - // if its not a material, it should be a parent - for (const [name, attribute] of Object.entries(item)) { - if (!this._materialParentAttributes.includes(name)) continue; - if (!Array.isArray(attribute)) continue; - for (const item of attribute) { - const isMaterial = - "value" in item._category && item._category.value === "IFCMATERIAL"; - if (isMaterial) { - const result = this.evalValue(item, checks); - if (result) { - isValid = true; - break; - } - } else { - const result = this.hasValidMaterial(item); - if (result) { - isValid = true; - break; - } + const material = await read(ref); + if (!this.value) return true; + for (const name of ["Name", "LayerSetName", "Category"]) { + const actual = value(material, name); + if ( + actual !== undefined && + actual !== null && + this.evalRequirement( + actual, + this.value, + "Value", + undefined, + "required", + ) + ) + return true; } - } + for (const name of children) + for (const child of refs(material, name)) + if (await visit(child)) return true; + return false; + }; + for (const root of roots) + if (await visit(root)) { + matches = true; + break; + } + let pass = matches; + if (this.cardinality === "prohibited") pass = !matches; + if (this.cardinality === "optional" && !roots.length) pass = true; + checks.push({ + parameter: "Value", + currentValue: roots.length + ? roots.map((root) => value(root, "Name")).join(", ") + : null, + requiredValue: this.value, + pass, + }); } } - return isValid; - } - - private evalValue(item: FRAGS.ItemData, checks?: IDSCheck[]) { - if (!this.value) { - checks?.push({ - parameter: null, - currentValue: - item.Name && "value" in item.Name ? item.Name.value : null, - pass: true, - }); - return true; - } - if ( - !("value" in item._category && item._category.value === "IFCMATERIAL") - ) { - return null; - } - - let result = false; - - if (item.Name && "value" in item.Name) { - result = this.evalRequirement( - item.Name.value, - this.value, - "Value", - checks, - ); - } - - if (result) return result; - - // IDSDocs: if the name doesn't match, the category is also an option - // to look at. - if (item.Category && "value" in item.Category) { - result = this.evalRequirement( - item.Category.value, - this.value, - "Value", - checks, - ); - } - - return result; } } diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts index ea67320ce..356510de4 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts @@ -1,3 +1,5 @@ +import { IDS_PREDEFINED_PROPERTIES } from "./predefined-properties"; +import { idsUnitConverter } from "./units"; import * as FRAGS from "@thatopen/fragments"; import { IDSCheck, IDSFacetParameter, IDSItemCheckResult } from "../types"; import { Components } from "../../../../core/Components"; @@ -8,13 +10,14 @@ import { ModelIdDataMap, ModelIdMap, } from "../../../../fragments"; -import { ModelIdMapUtils } from "../../../../utils"; import { XML } from "../../../../utils/xml"; // https://github.com/buildingSMART/IDS/blob/development/Documentation/UserManual/property-facet.md export class IDSProperty extends IDSFacet { facetType = "Property" as const; + private _schema = "IFC4"; + private _convertUnit?: Awaited>; propertySet: IDSFacetParameter; baseName: IDSFacetParameter; value?: IDSFacetParameter; @@ -41,13 +44,15 @@ export class IDSProperty extends IDSFacet { const propertySetXML = getParameterXML("PropertySet", this.propertySet); const baseNameXML = getParameterXML("BaseName", this.baseName); const valueXML = getParameterXML("Value", this.value); - const dataTypeXML = this.dataType ? `dataType=${this.dataType}` : ""; + const dataTypeXML = this.dataType + ? `dataType="${XML.escape(this.dataType)}"` + : ""; let attributes = ""; if (type === "requirement") { attributes += `cardinality="${this.cardinality}"`; - attributes += this.uri ? `uri=${this.uri}` : ""; + attributes += this.uri ? ` uri="${XML.escape(this.uri)}"` : ""; attributes += this.instructions - ? `instructions="${XML.escape(this.instructions)}"` + ? ` instructions="${XML.escape(this.instructions)}"` : ""; } return ` @@ -58,230 +63,23 @@ export class IDSProperty extends IDSFacet { } async getEntities(modelIds: RegExp[], collector: ModelIdMap) { - const fragments = this._components.get(FragmentsManager); - - for (const [modelId, model] of fragments.list) { - const isValidModel = modelIds.find((regex) => regex.test(modelId)); - if (!isValidModel) continue; - const items = await model.getItemsOfCategories([ - /PROPERTYSET/, - /ELEMENTQUANTITY/, - ]); - const localIds = Object.values(items).flat(); - if (localIds.length === 0) continue; - // Fragments renamed this relation from "DefinesOcurrence" to - // "DefinesOccurrence" in its 3.4 schema, but relation names are stored - // as data inside each .frag file, so files exported before the rename - // still carry the old spelling. Request both; the one not present in - // the file is simply ignored. - const data = await model.getItemsData(localIds, { - relations: { - HasProperties: { attributes: true, relations: false }, - DefinesOccurrence: { attributes: true, relations: false }, - DefinesOcurrence: { attributes: true, relations: false }, - }, + for (const [modelId, model] of this._components.get(FragmentsManager) + .list) { + if (!modelIds.some((pattern) => pattern.test(modelId))) continue; + const ids = Object.values( + await model.getItemsOfCategories([/.*/]), + ).flat(); + const results: ModelIdDataMap = new FRAGS.DataMap(); + await this.test({ [modelId]: new Set(ids) }, results, { + skipIfFails: false, }); - - // Matching sets, by localId: their name and the property names that - // matched. A set attached to a type (IfcTypeObject.HasPropertySets) - // has no DefinesOccurrence, so its elements are found from the type. - const matchedSets = new Map< - number, - { name: string; props: Set } - >(); - - for (const set of data) { - const definesOccurrence = set.DefinesOccurrence ?? set.DefinesOcurrence; - if ( - !( - "value" in set._localId && - "value" in set._category && - set.Name && - "value" in set.Name - ) - ) { - continue; - } - - const nameMatches = this.evalRequirement( - set.Name.value, - this.propertySet, - "PropertySet", - undefined, - "required", - ); - - if (!nameMatches) continue; - - let propsListName: string | undefined; - if (set._category.value === "IFCPROPERTYSET") - propsListName = "HasProperties"; - if (set._category.value === "IFCELEMENTQUANTITY") - propsListName = "Quantities"; - - if (!propsListName) continue; - const props = set[propsListName]; - if (!Array.isArray(props)) continue; - - for (const prop of props) { - const keys = Object.keys(prop); - const nameKey = keys.find((key) => /Name/.test(key)); - if (!(nameKey && "value" in prop[nameKey])) continue; - const attribute = prop[nameKey]; - if (!("value" in attribute)) continue; - - const propNameMatches = this.evalRequirement( - attribute.value, - this.baseName, - "BaseName", - ); - - if (!propNameMatches) continue; - - if (this.value) { - const valueKey = keys.find((key) => /Value/.test(key)); - if (!valueKey) continue; - const attribute = prop[valueKey]; - if (!("value" in attribute)) continue; - - const valueMatches = this.evalRequirement( - attribute.value, - this.value, - "Value", - ); - if (!valueMatches) continue; - } - - const setId = set._localId.value as number; - let matched = matchedSets.get(setId); - if (!matched) { - matched = { name: String(set.Name.value), props: new Set() }; - matchedSets.set(setId, matched); - } - matched.props.add(String(attribute.value)); - - if (!Array.isArray(definesOccurrence)) continue; - - const items = definesOccurrence - .map((ocurrence) => { - if ( - !( - "value" in ocurrence._localId && - typeof ocurrence._localId.value === "number" - ) - ) { - return null; - } - - return ocurrence._localId.value; - }) - .filter((id) => id !== null) as number[]; - - ModelIdMapUtils.append(collector, modelId, ...items); - } - } - - if (matchedSets.size > 0) { - await this.appendTypeInstances(model, modelId, matchedSets, collector); - } + const selected = collector[modelId] ?? new Set(); + for (const [id, result] of results.get(modelId) ?? []) + if (result.pass) selected.add(id); + if (selected.size) collector[modelId] = selected; } } - /** - * Appends the elements that inherit one of `matchedSets` from their type, - * as `test()` does through {@link getTypePsets} (issue #708), so a set that - * only lives on a type selects the type's instances (issue #798). - * - * An element's own set of the same name overrides the inherited value of - * any property it also defines: if it defines every matched property - * itself, whether it applies was already decided from that set above. - */ - private async appendTypeInstances( - model: FRAGS.FragmentsModel, - modelId: string, - matchedSets: Map }>, - collector: ModelIdMap, - ) { - // IfcTypeObject subtypes: `...TYPE`, IFCTYPEOBJECT / IFCTYPEPRODUCT, and - // the IFC2x3 door / window styles. - const typeIds = Object.values( - await model.getItemsOfCategories([/TYPE$/, /^IFCTYPE/, /STYLE$/]), - ).flat(); - if (typeIds.length === 0) return; - - const related = { attributes: true, relations: false }; - const types = await model.getItemsData(typeIds, { - attributesDefault: false, - relations: { - HasPropertySets: related, - // The fragments name for the inverse of IfcRelDefinesByType, and - // the IFC one, in case a file stores that. - ObjectTypeOf: related, - Types: related, - }, - }); - - // Element -> the matched sets it inherits. - const inherited = new Map }[]>(); - const selected = collector[modelId]; - for (const type of types) { - if (!Array.isArray(type.HasPropertySets)) continue; - const sets = type.HasPropertySets.flatMap((set) => { - const id = - set._localId && "value" in set._localId ? set._localId.value : null; - const matched = matchedSets.get(id as number); - return matched ? [matched] : []; - }); - if (sets.length === 0) continue; - const instances = [ - ...(Array.isArray(type.ObjectTypeOf) ? type.ObjectTypeOf : []), - ...(Array.isArray(type.Types) ? type.Types : []), - ]; - for (const instance of instances) { - if (!(instance._localId && "value" in instance._localId)) continue; - const id = instance._localId.value; - if (typeof id !== "number" || selected?.has(id)) continue; - let list = inherited.get(id); - if (!list) { - list = []; - inherited.set(id, list); - } - list.push(...sets); - } - } - if (inherited.size === 0) return; - - // Default attributes: the sets' and properties' names are needed. - const elements = await model.getItemsData([...inherited.keys()], { - relations: { IsDefinedBy: { attributes: true, relations: true } }, - }); - const applies: number[] = []; - for (const element of elements) { - if (!("value" in element._localId)) continue; - const id = element._localId.value as number; - const own = Array.isArray(element.IsDefinedBy) ? element.IsDefinedBy : []; - const overrides = (setName: string, propName: string) => - own.some((set) => { - if (!(set.Name && "value" in set.Name) || set.Name.value !== setName) - return false; - const list = this.getPropertyListName(set); - const props = list ? set[list] : undefined; - if (!Array.isArray(props)) return false; - return props.some( - (prop) => - prop.Name && "value" in prop.Name && prop.Name.value === propName, - ); - }); - const inherits = inherited - .get(id)! - .some((set) => - [...set.props].some((prop) => !overrides(set.name, prop)), - ); - if (inherits) applies.push(id); - } - ModelIdMapUtils.append(collector, modelId, ...applies); - } - async test( items: ModelIdMap, collector: ModelIdDataMap, @@ -291,11 +89,19 @@ export class IDSProperty extends IDSFacet { for (const [modelId, localIds] of Object.entries(items)) { const model = fragments.list.get(modelId); if (!model) continue; + this._schema = String((await model.getMetadata()).schema); + this._convertUnit = await idsUnitConverter(model); const data = await model.getItemsData([...localIds], { relations: { IsDefinedBy: { attributes: true, relations: true }, - IsTypedBy: { attributes: true, relations: false }, + HasProperties: { attributes: true, relations: true }, + Properties: { attributes: true, relations: true }, + ExtendedProperties: { attributes: true, relations: true }, + IsTypedBy: { attributes: true, relations: true }, HasPropertySets: { attributes: true, relations: true }, + Unit: { attributes: true, relations: false }, + DefiningUnit: { attributes: true, relations: false }, + DefinedUnit: { attributes: true, relations: false }, // Both spellings on purpose: old .frag files store the pre-3.4 // relation name "DefinesOcurrence" (see getEntities above). DefinesOccurrence: { attributes: false, relations: false }, @@ -441,7 +247,7 @@ export class IDSProperty extends IDSFacet { } private getPropertyListName(item: FRAGS.ItemData) { - let propsListName: "HasProperties" | "Quantities" | undefined; + let propsListName: string | undefined; if (!(item._category && "value" in item._category)) return propsListName; if (item._category.value === "IFCPROPERTYSET") @@ -449,6 +255,10 @@ export class IDSProperty extends IDSFacet { if (item._category.value === "IFCELEMENTQUANTITY") propsListName = "Quantities"; + if (item._category.value === "IFCMATERIALPROPERTIES") + propsListName = "Properties"; + if (item._category.value === "IFCEXTENDEDMATERIALPROPERTIES") + propsListName = "ExtendedProperties"; return propsListName; } @@ -462,7 +272,15 @@ export class IDSProperty extends IDSFacet { if (!/Values?$/.test(name) || !attr || Array.isArray(attr)) continue; if (!("value" in attr) || attr.value === null || attr.value === undefined) continue; - attrs.push(attr as { value: unknown; type?: string }); + const attribute = attr as { value: unknown; type?: string }; + const convert = (actual: unknown) => + this._convertUnit?.(actual, attribute.type, item, name) ?? actual; + attrs.push({ + ...attribute, + value: Array.isArray(attribute.value) + ? attribute.value.map(convert) + : convert(attribute.value), + }); } return attrs; } @@ -509,6 +327,35 @@ export class IDSProperty extends IDSFacet { private async getPsets(item: FRAGS.ItemData) { const typeSets = this.getTypePsets(item); + const materialSets = Array.isArray(item.HasProperties) + ? item.HasProperties + : []; + const definitions = [ + ...(Array.isArray(item.IsDefinedBy) ? item.IsDefinedBy : []), + ...materialSets, + ]; + for (const definition of definitions) { + const category = + definition._category && "value" in definition._category + ? String(definition._category.value) + : ""; + const declared = IDS_PREDEFINED_PROPERTIES[this._schema]?.[category]; + if (!declared) continue; + const properties: FRAGS.ItemData[] = []; + for (const [name, type] of Object.entries(declared)) { + const attribute = definition[name]; + if (!attribute || Array.isArray(attribute) || attribute.value == null) + continue; + properties.push({ + _category: { value: "IFCPROPERTYSINGLEVALUE" }, + Name: { value: name }, + NominalValue: { value: attribute.value, type }, + }); + } + definition._category = { value: "IFCPROPERTYSET" }; + definition.HasProperties = properties; + } + if (definitions.length) item = { ...item, IsDefinedBy: definitions }; if (!Array.isArray(item.IsDefinedBy)) return typeSets; const sets: FRAGS.ItemData[] = []; diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/entity-mapping.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/entity-mapping.ts new file mode 100644 index 000000000..8db7845d1 --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/entity-mapping.ts @@ -0,0 +1,78 @@ +// buildingSMART IDS IFC2X3 occurrence/type mapping table (IDS development). +export const IDS_IFC2X3_MAPPING: Record = { + IFCFURNITURE: ["IFCFURNISHINGELEMENT", "IFCFURNITURETYPE"], + IFCSYSTEMFURNITUREELEMENT: [ + "IFCFURNISHINGELEMENT", + "IFCSYSTEMFURNITUREELEMENTTYPE", + ], + IFCACTUATOR: ["IFCDISTRIBUTIONCONTROLELEMENT", "IFCACTUATORTYPE"], + IFCALARM: ["IFCDISTRIBUTIONCONTROLELEMENT", "IFCALARMTYPE"], + IFCCONTROLLER: ["IFCDISTRIBUTIONCONTROLELEMENT", "IFCCONTROLLERTYPE"], + IFCFLOWINSTRUMENT: ["IFCDISTRIBUTIONCONTROLELEMENT", "IFCFLOWINSTRUMENTTYPE"], + IFCSENSOR: ["IFCDISTRIBUTIONCONTROLELEMENT", "IFCSENSORTYPE"], + IFCAIRTOAIRHEATRECOVERY: [ + "IFCENERGYCONVERSIONDEVICE", + "IFCAIRTOAIRHEATRECOVERYTYPE", + ], + IFCBOILER: ["IFCENERGYCONVERSIONDEVICE", "IFCBOILERTYPE"], + IFCCHILLER: ["IFCENERGYCONVERSIONDEVICE", "IFCCHILLERTYPE"], + IFCCOIL: ["IFCENERGYCONVERSIONDEVICE", "IFCCOILTYPE"], + IFCCONDENSER: ["IFCENERGYCONVERSIONDEVICE", "IFCCONDENSERTYPE"], + IFCCOOLEDBEAM: ["IFCENERGYCONVERSIONDEVICE", "IFCCOOLEDBEAMTYPE"], + IFCCOOLINGTOWER: ["IFCENERGYCONVERSIONDEVICE", "IFCCOOLINGTOWERTYPE"], + IFCELECTRICGENERATOR: [ + "IFCENERGYCONVERSIONDEVICE", + "IFCELECTRICGENERATORTYPE", + ], + IFCELECTRICMOTOR: ["IFCENERGYCONVERSIONDEVICE", "IFCELECTRICMOTORTYPE"], + IFCEVAPORATIVECOOLER: [ + "IFCENERGYCONVERSIONDEVICE", + "IFCEVAPORATIVECOOLERTYPE", + ], + IFCEVAPORATOR: ["IFCENERGYCONVERSIONDEVICE", "IFCEVAPORATORTYPE"], + IFCHEATEXCHANGER: ["IFCENERGYCONVERSIONDEVICE", "IFCHEATEXCHANGERTYPE"], + IFCHUMIDIFIER: ["IFCENERGYCONVERSIONDEVICE", "IFCHUMIDIFIERTYPE"], + IFCMOTORCONNECTION: ["IFCENERGYCONVERSIONDEVICE", "IFCMOTORCONNECTIONTYPE"], + IFCSPACEHEATER: ["IFCENERGYCONVERSIONDEVICE", "IFCSPACEHEATERTYPE"], + IFCTRANSFORMER: ["IFCENERGYCONVERSIONDEVICE", "IFCTRANSFORMERTYPE"], + IFCTUBEBUNDLE: ["IFCENERGYCONVERSIONDEVICE", "IFCTUBEBUNDLETYPE"], + IFCUNITARYEQUIPMENT: ["IFCENERGYCONVERSIONDEVICE", "IFCUNITARYEQUIPMENTTYPE"], + IFCAIRTERMINALBOX: ["IFCFLOWCONTROLLER", "IFCAIRTERMINALBOXTYPE"], + IFCDAMPER: ["IFCFLOWCONTROLLER", "IFCDAMPERTYPE"], + IFCELECTRICTIMECONTROL: ["IFCFLOWCONTROLLER", "IFCELECTRICTIMECONTROLTYPE"], + IFCFLOWMETER: ["IFCFLOWCONTROLLER", "IFCFLOWMETERTYPE"], + IFCPROTECTIVEDEVICE: ["IFCFLOWCONTROLLER", "IFCPROTECTIVEDEVICETYPE"], + IFCSWITCHINGDEVICE: ["IFCFLOWCONTROLLER", "IFCSWITCHINGDEVICETYPE"], + IFCVALVE: ["IFCFLOWCONTROLLER", "IFCVALVETYPE"], + IFCCABLECARRIERFITTING: ["IFCFLOWFITTING", "IFCCABLECARRIERFITTINGTYPE"], + IFCDUCTFITTING: ["IFCFLOWFITTING", "IFCDUCTFITTINGTYPE"], + IFCJUNCTIONBOX: ["IFCFLOWFITTING", "IFCJUNCTIONBOXTYPE"], + IFCPIPEFITTING: ["IFCFLOWFITTING", "IFCPIPEFITTINGTYPE"], + IFCCOMPRESSOR: ["IFCFLOWMOVINGDEVICE", "IFCCOMPRESSORTYPE"], + IFCFAN: ["IFCFLOWMOVINGDEVICE", "IFCFANTYPE"], + IFCPUMP: ["IFCFLOWMOVINGDEVICE", "IFCPUMPTYPE"], + IFCCABLECARRIERSEGMENT: ["IFCFLOWSEGMENT", "IFCCABLECARRIERSEGMENTTYPE"], + IFCCABLESEGMENT: ["IFCFLOWSEGMENT", "IFCCABLESEGMENTTYPE"], + IFCDUCTSEGMENT: ["IFCFLOWSEGMENT", "IFCDUCTSEGMENTTYPE"], + IFCPIPESEGMENT: ["IFCFLOWSEGMENT", "IFCPIPESEGMENTTYPE"], + IFCELECTRICFLOWSTORAGEDEVICE: [ + "IFCFLOWSTORAGEDEVICE", + "IFCELECTRICFLOWSTORAGEDEVICETYPE", + ], + IFCTANK: ["IFCFLOWSTORAGEDEVICE", "IFCTANKTYPE"], + IFCAIRTERMINAL: ["IFCFLOWTERMINAL", "IFCAIRTERMINALTYPE"], + IFCELECTRICAPPLIANCE: ["IFCFLOWTERMINAL", "IFCELECTRICAPPLIANCETYPE"], + IFCFIRESUPPRESSIONTERMINAL: [ + "IFCFLOWTERMINAL", + "IFCFIRESUPPRESSIONTERMINALTYPE", + ], + IFCLAMP: ["IFCFLOWTERMINAL", "IFCLAMPTYPE"], + IFCLIGHTFIXTURE: ["IFCFLOWTERMINAL", "IFCLIGHTFIXTURETYPE"], + IFCOUTLET: ["IFCFLOWTERMINAL", "IFCOUTLETTYPE"], + IFCSANITARYTERMINAL: ["IFCFLOWTERMINAL", "IFCSANITARYTERMINALTYPE"], + IFCSTACKTERMINAL: ["IFCFLOWTERMINAL", "IFCSTACKTERMINALTYPE"], + IFCWASTETERMINAL: ["IFCFLOWTERMINAL", "IFCWASTETERMINALTYPE"], + IFCDUCTSILENCER: ["IFCFLOWTREATMENTDEVICE", "IFCDUCTSILENCERTYPE"], + IFCFILTER: ["IFCFLOWTREATMENTDEVICE", "IFCFILTERTYPE"], + IFCVIBRATIONISOLATOR: ["IFCEQUIPMENTELEMENT", "IFCVIBRATIONISOLATORTYPE"], +}; diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/predefined-properties.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/predefined-properties.ts new file mode 100644 index 000000000..d06d088eb --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/predefined-properties.ts @@ -0,0 +1,296 @@ +// Declared attribute types for IFC predefined property sets, generated from web-ifc 0.0.77 ifc-schema.d.ts. +export const IDS_PREDEFINED_PROPERTIES: Record< + string, + Record> +> = { + IFC2X3: { + IFCREINFORCEMENTDEFINITIONPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + DefinitionType: "IFCLABEL", + }, + IFCSERVICELIFEFACTOR: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + PredefinedType: "IFCSERVICELIFEFACTORTYPEENUM", + UpperValue: "IFCMEASUREVALUE", + MostUsedValue: "IFCMEASUREVALUE", + LowerValue: "IFCMEASUREVALUE", + }, + IFCSOUNDPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + IsAttenuating: "IFCBOOLEAN", + SoundScale: "IFCSOUNDSCALEENUM", + }, + IFCSOUNDVALUE: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + Frequency: "IFCFREQUENCYMEASURE", + SoundLevelSingleValue: "IFCDERIVEDMEASUREVALUE", + }, + IFCSPACETHERMALLOADPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + ApplicableValueRatio: "IFCPOSITIVERATIOMEASURE", + ThermalLoadSource: "IFCTHERMALLOADSOURCEENUM", + PropertySource: "IFCPROPERTYSOURCEENUM", + SourceDescription: "IFCTEXT", + MaximumValue: "IFCPOWERMEASURE", + MinimumValue: "IFCPOWERMEASURE", + UserDefinedThermalLoadSource: "IFCLABEL", + UserDefinedPropertySource: "IFCLABEL", + ThermalLoadType: "IFCTHERMALLOADTYPEENUM", + }, + IFCWINDOWLININGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + LiningDepth: "IFCPOSITIVELENGTHMEASURE", + LiningThickness: "IFCPOSITIVELENGTHMEASURE", + TransomThickness: "IFCPOSITIVELENGTHMEASURE", + MullionThickness: "IFCPOSITIVELENGTHMEASURE", + FirstTransomOffset: "IFCNORMALISEDRATIOMEASURE", + SecondTransomOffset: "IFCNORMALISEDRATIOMEASURE", + FirstMullionOffset: "IFCNORMALISEDRATIOMEASURE", + SecondMullionOffset: "IFCNORMALISEDRATIOMEASURE", + }, + IFCWINDOWPANELPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + OperationType: "IFCWINDOWPANELOPERATIONENUM", + PanelPosition: "IFCWINDOWPANELPOSITIONENUM", + FrameDepth: "IFCPOSITIVELENGTHMEASURE", + FrameThickness: "IFCPOSITIVELENGTHMEASURE", + }, + IFCDOORLININGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + LiningDepth: "IFCPOSITIVELENGTHMEASURE", + LiningThickness: "IFCPOSITIVELENGTHMEASURE", + ThresholdDepth: "IFCPOSITIVELENGTHMEASURE", + ThresholdThickness: "IFCPOSITIVELENGTHMEASURE", + TransomThickness: "IFCPOSITIVELENGTHMEASURE", + TransomOffset: "IFCLENGTHMEASURE", + LiningOffset: "IFCLENGTHMEASURE", + ThresholdOffset: "IFCLENGTHMEASURE", + CasingThickness: "IFCPOSITIVELENGTHMEASURE", + CasingDepth: "IFCPOSITIVELENGTHMEASURE", + }, + IFCDOORPANELPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + PanelDepth: "IFCPOSITIVELENGTHMEASURE", + PanelOperation: "IFCDOORPANELOPERATIONENUM", + PanelWidth: "IFCNORMALISEDRATIOMEASURE", + PanelPosition: "IFCDOORPANELPOSITIONENUM", + }, + IFCENERGYPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + EnergySequence: "IFCENERGYSEQUENCEENUM", + UserDefinedEnergySequence: "IFCLABEL", + }, + IFCFLUIDFLOWPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + PropertySource: "IFCPROPERTYSOURCEENUM", + UserDefinedPropertySource: "IFCLABEL", + TemperatureSingleValue: "IFCTHERMODYNAMICTEMPERATUREMEASURE", + WetBulbTemperatureSingleValue: "IFCTHERMODYNAMICTEMPERATUREMEASURE", + FlowrateSingleValue: "IFCDERIVEDMEASUREVALUE", + FlowConditionSingleValue: "IFCPOSITIVERATIOMEASURE", + VelocitySingleValue: "IFCLINEARVELOCITYMEASURE", + PressureSingleValue: "IFCPRESSUREMEASURE", + }, + IFCPERMEABLECOVERINGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + OperationType: "IFCPERMEABLECOVERINGOPERATIONENUM", + PanelPosition: "IFCWINDOWPANELPOSITIONENUM", + FrameDepth: "IFCPOSITIVELENGTHMEASURE", + FrameThickness: "IFCPOSITIVELENGTHMEASURE", + }, + IFCELECTRICALBASEPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + EnergySequence: "IFCENERGYSEQUENCEENUM", + UserDefinedEnergySequence: "IFCLABEL", + ElectricCurrentType: "IFCELECTRICCURRENTENUM", + InputVoltage: "IFCELECTRICVOLTAGEMEASURE", + InputFrequency: "IFCFREQUENCYMEASURE", + FullLoadCurrent: "IFCELECTRICCURRENTMEASURE", + MinimumCircuitCurrent: "IFCELECTRICCURRENTMEASURE", + MaximumPowerInput: "IFCPOWERMEASURE", + RatedPowerInput: "IFCPOWERMEASURE", + }, + }, + IFC4: { + IFCQUANTITYSET: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + }, + IFCPREDEFINEDPROPERTYSET: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + }, + IFCREINFORCEMENTDEFINITIONPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + DefinitionType: "IFCLABEL", + }, + IFCWINDOWLININGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + LiningDepth: "IFCPOSITIVELENGTHMEASURE", + LiningThickness: "IFCNONNEGATIVELENGTHMEASURE", + TransomThickness: "IFCNONNEGATIVELENGTHMEASURE", + MullionThickness: "IFCNONNEGATIVELENGTHMEASURE", + FirstTransomOffset: "IFCNORMALISEDRATIOMEASURE", + SecondTransomOffset: "IFCNORMALISEDRATIOMEASURE", + FirstMullionOffset: "IFCNORMALISEDRATIOMEASURE", + SecondMullionOffset: "IFCNORMALISEDRATIOMEASURE", + LiningOffset: "IFCLENGTHMEASURE", + LiningToPanelOffsetX: "IFCLENGTHMEASURE", + LiningToPanelOffsetY: "IFCLENGTHMEASURE", + }, + IFCWINDOWPANELPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + OperationType: "IFCWINDOWPANELOPERATIONENUM", + PanelPosition: "IFCWINDOWPANELPOSITIONENUM", + FrameDepth: "IFCPOSITIVELENGTHMEASURE", + FrameThickness: "IFCPOSITIVELENGTHMEASURE", + }, + IFCDOORLININGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + LiningDepth: "IFCPOSITIVELENGTHMEASURE", + LiningThickness: "IFCNONNEGATIVELENGTHMEASURE", + ThresholdDepth: "IFCPOSITIVELENGTHMEASURE", + ThresholdThickness: "IFCNONNEGATIVELENGTHMEASURE", + TransomThickness: "IFCNONNEGATIVELENGTHMEASURE", + TransomOffset: "IFCLENGTHMEASURE", + LiningOffset: "IFCLENGTHMEASURE", + ThresholdOffset: "IFCLENGTHMEASURE", + CasingThickness: "IFCPOSITIVELENGTHMEASURE", + CasingDepth: "IFCPOSITIVELENGTHMEASURE", + LiningToPanelOffsetX: "IFCLENGTHMEASURE", + LiningToPanelOffsetY: "IFCLENGTHMEASURE", + }, + IFCDOORPANELPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + PanelDepth: "IFCPOSITIVELENGTHMEASURE", + PanelOperation: "IFCDOORPANELOPERATIONENUM", + PanelWidth: "IFCNORMALISEDRATIOMEASURE", + PanelPosition: "IFCDOORPANELPOSITIONENUM", + }, + IFCPERMEABLECOVERINGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + OperationType: "IFCPERMEABLECOVERINGOPERATIONENUM", + PanelPosition: "IFCWINDOWPANELPOSITIONENUM", + FrameDepth: "IFCPOSITIVELENGTHMEASURE", + FrameThickness: "IFCPOSITIVELENGTHMEASURE", + }, + }, + IFC4X3: { + IFCQUANTITYSET: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + }, + IFCPREDEFINEDPROPERTYSET: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + }, + IFCREINFORCEMENTDEFINITIONPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + DefinitionType: "IFCLABEL", + }, + IFCWINDOWLININGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + LiningDepth: "IFCPOSITIVELENGTHMEASURE", + LiningThickness: "IFCNONNEGATIVELENGTHMEASURE", + TransomThickness: "IFCNONNEGATIVELENGTHMEASURE", + MullionThickness: "IFCNONNEGATIVELENGTHMEASURE", + FirstTransomOffset: "IFCNORMALISEDRATIOMEASURE", + SecondTransomOffset: "IFCNORMALISEDRATIOMEASURE", + FirstMullionOffset: "IFCNORMALISEDRATIOMEASURE", + SecondMullionOffset: "IFCNORMALISEDRATIOMEASURE", + LiningOffset: "IFCLENGTHMEASURE", + LiningToPanelOffsetX: "IFCLENGTHMEASURE", + LiningToPanelOffsetY: "IFCLENGTHMEASURE", + }, + IFCWINDOWPANELPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + OperationType: "IFCWINDOWPANELOPERATIONENUM", + PanelPosition: "IFCWINDOWPANELPOSITIONENUM", + FrameDepth: "IFCPOSITIVELENGTHMEASURE", + FrameThickness: "IFCPOSITIVELENGTHMEASURE", + }, + IFCDOORLININGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + LiningDepth: "IFCPOSITIVELENGTHMEASURE", + LiningThickness: "IFCNONNEGATIVELENGTHMEASURE", + ThresholdDepth: "IFCPOSITIVELENGTHMEASURE", + ThresholdThickness: "IFCNONNEGATIVELENGTHMEASURE", + TransomThickness: "IFCNONNEGATIVELENGTHMEASURE", + TransomOffset: "IFCLENGTHMEASURE", + LiningOffset: "IFCLENGTHMEASURE", + ThresholdOffset: "IFCLENGTHMEASURE", + CasingThickness: "IFCPOSITIVELENGTHMEASURE", + CasingDepth: "IFCPOSITIVELENGTHMEASURE", + LiningToPanelOffsetX: "IFCLENGTHMEASURE", + LiningToPanelOffsetY: "IFCLENGTHMEASURE", + }, + IFCDOORPANELPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + PanelDepth: "IFCPOSITIVELENGTHMEASURE", + PanelOperation: "IFCDOORPANELOPERATIONENUM", + PanelWidth: "IFCNORMALISEDRATIOMEASURE", + PanelPosition: "IFCDOORPANELPOSITIONENUM", + }, + IFCPERMEABLECOVERINGPROPERTIES: { + GlobalId: "IFCGLOBALLYUNIQUEID", + Name: "IFCLABEL", + Description: "IFCTEXT", + OperationType: "IFCPERMEABLECOVERINGOPERATIONENUM", + PanelPosition: "IFCWINDOWPANELPOSITIONENUM", + FrameDepth: "IFCPOSITIVELENGTHMEASURE", + FrameThickness: "IFCPOSITIVELENGTHMEASURE", + }, + }, +}; diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/property.test.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/property.test.ts index 17dba7c57..eae235508 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/property.test.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/property.test.ts @@ -21,6 +21,7 @@ const MODEL_ID = "type-psets"; * | #42 | no | IsExternal = TRUE | TRUE | * | #43 | no | none | none | * | #45 | yes | IsExternal = FALSE | FALSE, overrides | + * | #52 | type | HasPropertySets | TRUE, its own pset | * | #46 | yes | LoadBearing only | TRUE, from its type | */ const WITH_IS_EXTERNAL_TRUE = [40, 41, 42, 46]; @@ -81,7 +82,7 @@ describe("IDSProperty applicability through type property sets (#798)", () => { }; it("selects elements whose matching pset lives only on their type", async () => { - expect(await select(facet(true))).toEqual(WITH_IS_EXTERNAL_TRUE); + expect(await select(facet(true))).toEqual([...WITH_IS_EXTERNAL_TRUE, 52]); }); it("lets an instance pset override the value it inherits from its type", async () => { @@ -90,7 +91,9 @@ describe("IDSProperty applicability through type property sets (#798)", () => { }); it("selects every element that has the property at all, however it got it", async () => { - expect(await select(facet())).toEqual([...WITH_IS_EXTERNAL_TRUE, 45].sort()); + expect(await select(facet())).toEqual( + [...WITH_IS_EXTERNAL_TRUE, 45, 52].sort(), + ); }); it("agrees with test(): an applicable element passes the same facet as a requirement", async () => { @@ -101,7 +104,7 @@ describe("IDSProperty applicability through type property sets (#798)", () => { FRAGS.DataMap >(); await requirement.test( - { [MODEL_ID]: new Set([40, 41, 42, 43, 45, 46]) }, + { [MODEL_ID]: new Set([40, 41, 42, 43, 45, 46, 52]) }, results as never, ); const passing = [...results.get(MODEL_ID)!.entries()] diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/unit-types.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/unit-types.ts new file mode 100644 index 000000000..0907b51dc --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/unit-types.ts @@ -0,0 +1,88 @@ +// IDS SI measure/unit mapping from buildingSMART IDS Documentation/UserManual/units.md. +export const IDS_MEASURE_UNITS: Record = { + IFCABSORBEDDOSEMEASURE: "ABSORBEDDOSEUNIT", + IFCACCELERATIONMEASURE: "ACCELERATIONUNIT", + IFCAMOUNTOFSUBSTANCEMEASURE: "AMOUNTOFSUBSTANCEUNIT", + IFCANGULARVELOCITYMEASURE: "ANGULARVELOCITYUNIT", + IFCAREADENSITYMEASURE: "AREADENSITYUNIT", + IFCAREAMEASURE: "AREAUNIT", + IFCCURVATUREMEASURE: "CURVATUREUNIT", + IFCDOSEEQUIVALENTMEASURE: "DOSEEQUIVALENTUNIT", + IFCDYNAMICVISCOSITYMEASURE: "DYNAMICVISCOSITYUNIT", + IFCELECTRICCAPACITANCEMEASURE: "ELECTRICCAPACITANCEUNIT", + IFCELECTRICCHARGEMEASURE: "ELECTRICCHARGEUNIT", + IFCELECTRICCONDUCTANCEMEASURE: "ELECTRICCONDUCTANCEUNIT", + IFCELECTRICCURRENTMEASURE: "ELECTRICCURRENTUNIT", + IFCELECTRICRESISTANCEMEASURE: "ELECTRICRESISTANCEUNIT", + IFCELECTRICVOLTAGEMEASURE: "ELECTRICVOLTAGEUNIT", + IFCENERGYMEASURE: "ENERGYUNIT", + IFCFORCEMEASURE: "FORCEUNIT", + IFCFREQUENCYMEASURE: "FREQUENCYUNIT", + IFCHEATFLUXDENSITYMEASURE: "HEATFLUXDENSITYUNIT", + IFCHEATINGVALUEMEASURE: "HEATINGVALUEUNIT", + IFCILLUMINANCEMEASURE: "ILLUMINANCEUNIT", + IFCINDUCTANCEMEASURE: "INDUCTANCEUNIT", + IFCINTEGERCOUNTRATEMEASURE: "INTEGERCOUNTRATEUNIT", + IFCIONCONCENTRATIONMEASURE: "IONCONCENTRATIONUNIT", + IFCISOTHERMALMOISTURECAPACITYMEASURE: "ISOTHERMALMOISTURECAPACITYUNIT", + IFCKINEMATICVISCOSITYMEASURE: "KINEMATICVISCOSITYUNIT", + IFCLENGTHMEASURE: "LENGTHUNIT", + IFCLINEARFORCEMEASURE: "LINEARFORCEUNIT", + IFCLINEARMOMENTMEASURE: "LINEARMOMENTUNIT", + IFCLINEARSTIFFNESSMEASURE: "LINEARSTIFFNESSUNIT", + IFCLINEARVELOCITYMEASURE: "LINEARVELOCITYUNIT", + IFCLUMINOUSFLUXMEASURE: "LUMINOUSFLUXUNIT", + IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE: "LUMINOUSINTENSITYDISTRIBUTIONUNIT", + IFCLUMINOUSINTENSITYMEASURE: "LUMINOUSINTENSITYUNIT", + IFCMAGNETICFLUXDENSITYMEASURE: "MAGNETICFLUXDENSITYUNIT", + IFCMAGNETICFLUXMEASURE: "MAGNETICFLUXUNIT", + IFCMASSDENSITYMEASURE: "MASSDENSITYUNIT", + IFCMASSFLOWRATEMEASURE: "MASSFLOWRATEUNIT", + IFCMASSMEASURE: "MASSUNIT", + IFCMASSPERLENGTHMEASURE: "MASSPERLENGTHUNIT", + IFCMODULUSOFELASTICITYMEASURE: "MODULUSOFELASTICITYUNIT", + IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE: + "MODULUSOFLINEARSUBGRADEREACTIONUNIT", + IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE: + "MODULUSOFROTATIONALSUBGRADEREACTIONUNIT", + IFCMODULUSOFSUBGRADEREACTIONMEASURE: "MODULUSOFSUBGRADEREACTIONUNIT", + IFCMOISTUREDIFFUSIVITYMEASURE: "MOISTUREDIFFUSIVITYUNIT", + IFCMOLECULARWEIGHTMEASURE: "MOLECULARWEIGHTUNIT", + IFCMOMENTOFINERTIAMEASURE: "MOMENTOFINERTIAUNIT", + IFCNONNEGATIVELENGTHMEASURE: "LENGTHUNIT", + IFCPHMEASURE: "PHUNIT", + IFCPLANARFORCEMEASURE: "PLANARFORCEUNIT", + IFCPLANEANGLEMEASURE: "PLANEANGLEUNIT", + IFCPOSITIVELENGTHMEASURE: "LENGTHUNIT", + IFCPOSITIVEPLANEANGLEMEASURE: "PLANEANGLEUNIT", + IFCPOWERMEASURE: "POWERUNIT", + IFCPRESSUREMEASURE: "PRESSUREUNIT", + IFCRADIOACTIVITYMEASURE: "RADIOACTIVITYUNIT", + IFCROTATIONALFREQUENCYMEASURE: "ROTATIONALFREQUENCYUNIT", + IFCROTATIONALMASSMEASURE: "ROTATIONALMASSUNIT", + IFCROTATIONALSTIFFNESSMEASURE: "ROTATIONALSTIFFNESSUNIT", + IFCSECTIONALAREAINTEGRALMEASURE: "SECTIONALAREAINTEGRALUNIT", + IFCSECTIONMODULUSMEASURE: "SECTIONMODULUSUNIT", + IFCSHEARMODULUSMEASURE: "SHEARMODULUSUNIT", + IFCSOLIDANGLEMEASURE: "SOLIDANGLEUNIT", + IFCSOUNDPOWERLEVELMEASURE: "SOUNDPOWERLEVELUNIT", + IFCSOUNDPOWERMEASURE: "SOUNDPOWERUNIT", + IFCSOUNDPRESSURELEVELMEASURE: "SOUNDPRESSURELEVELUNIT", + IFCSOUNDPRESSUREMEASURE: "SOUNDPRESSUREUNIT", + IFCSPECIFICHEATCAPACITYMEASURE: "SPECIFICHEATCAPACITYUNIT", + IFCTEMPERATUREGRADIENTMEASURE: "TEMPERATUREGRADIENTUNIT", + IFCTEMPERATURERATEOFCHANGEMEASURE: "TEMPERATURERATEOFCHANGEUNIT", + IFCTHERMALADMITTANCEMEASURE: "THERMALADMITTANCEUNIT", + IFCTHERMALCONDUCTIVITYMEASURE: "THERMALCONDUCTANCEUNIT", + IFCTHERMALEXPANSIONCOEFFICIENTMEASURE: "THERMALEXPANSIONCOEFFICIENTUNIT", + IFCTHERMALRESISTANCEMEASURE: "THERMALRESISTANCEUNIT", + IFCTHERMALTRANSMITTANCEMEASURE: "THERMALTRANSMITTANCEUNIT", + IFCTHERMODYNAMICTEMPERATUREMEASURE: "THERMODYNAMICTEMPERATUREUNIT", + IFCTIMEMEASURE: "TIMEUNIT", + IFCTORQUEMEASURE: "TORQUEUNIT", + IFCVAPORPERMEABILITYMEASURE: "VAPORPERMEABILITYUNIT", + IFCVOLUMEMEASURE: "VOLUMEUNIT", + IFCVOLUMETRICFLOWRATEMEASURE: "VOLUMETRICFLOWRATEUNIT", + IFCWARPINGCONSTANTMEASURE: "WARPINGCONSTANTUNIT", + IFCWARPINGMOMENTMEASURE: "WARPINGMOMENTUNIT", +}; diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/units.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/units.ts new file mode 100644 index 000000000..e0bb6fc0a --- /dev/null +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/units.ts @@ -0,0 +1,152 @@ +import * as FRAGS from "@thatopen/fragments"; +import { IDS_MEASURE_UNITS } from "./unit-types"; +const prefixes: Record = { + EXA: 1e18, + PETA: 1e15, + TERA: 1e12, + GIGA: 1e9, + MEGA: 1e6, + KILO: 1e3, + HECTO: 1e2, + DECA: 10, + DECI: 0.1, + CENTI: 1e-2, + MILLI: 1e-3, + MICRO: 1e-6, + NANO: 1e-9, + PICO: 1e-12, + FEMTO: 1e-15, + ATTO: 1e-18, +}; +const value = (item: FRAGS.ItemData, name: string) => { + const attr = item[name]; + return attr && !Array.isArray(attr) ? attr.value : undefined; +}; +const refs = (item: FRAGS.ItemData, name: string) => + Array.isArray(item[name]) ? (item[name] as FRAGS.ItemData[]) : []; + +/** Read explicit property units and project units. Convert numerical IDS values to SI. */ +export async function idsUnitConverter(model: FRAGS.FragmentsModel) { + const ids = Object.values( + await model.getItemsOfCategories([ + /UNIT/, + /MEASUREWITHUNIT$/, + /^IFCPROJECT$/, + ]), + ).flat(); + const options = { + attributesDefault: true, + relations: Object.fromEntries( + [ + "UnitsInContext", + "Units", + "ConversionFactor", + "UnitComponent", + "Elements", + "Unit", + ].map((name) => [name, { attributes: true, relations: false }]), + ), + }; + const data = ( + await Promise.all(ids.map((id) => model.getItemsData([id], options))) + ).flat(); + const byId = new Map(); + for (const item of data) { + const id = value(item, "_localId"); + if (typeof id === "number") byId.set(id, item); + } + const read = (item: FRAGS.ItemData) => + byId.get(value(item, "_localId") as number) ?? item; + const unitType = (type: string | undefined) => + IDS_MEASURE_UNITS[type ?? ""] ?? + IDS_MEASURE_UNITS[ + (type ?? "") + .replace("IFCPOSITIVE", "IFC") + .replace("IFCNONNEGATIVE", "IFC") + ]; + const projectUnits = new Map(); + for (const project of data.filter( + (item) => value(item, "_category") === "IFCPROJECT", + )) + for (const assignment of refs(project, "UnitsInContext")) + for (const unit of refs(read(assignment), "Units")) { + const full = read(unit); + projectUnits.set(String(value(full, "UnitType")), full); + } + const factor = ( + ref: FRAGS.ItemData, + seen = new Set(), + ): { scale: number; offset: number } => { + const unit = read(ref), + id = value(unit, "_localId") as number; + if (seen.has(id)) throw new Error("IDS: cyclic unit definition"); + seen.add(id); + const category = value(unit, "_category"); + if (category === "IFCSIUNIT") { + const prefix = prefixes[String(value(unit, "Prefix"))] ?? 1; + const name = value(unit, "Name"); + let power = 1; + if (name === "SQUARE_METRE") power = 2; + if (name === "CUBIC_METRE") power = 3; + return { + scale: prefix ** power * (name === "GRAM" ? 0.001 : 1), + offset: name === "DEGREE_CELSIUS" ? 273.15 : 0, + }; + } + if ( + category === "IFCCONVERSIONBASEDUNIT" || + category === "IFCCONVERSIONBASEDUNITWITHOFFSET" + ) { + const measure = refs(unit, "ConversionFactor")[0]; + if (!measure) throw new Error("IDS: missing unit conversion factor"); + const full = read(measure), + component = refs(full, "UnitComponent")[0]; + if (!component) throw new Error("IDS: missing unit component"); + const base = factor(component, seen), + coefficient = Number(value(full, "ValueComponent")); + return { + scale: coefficient * base.scale, + offset: + Number(value(unit, "ConversionOffset") ?? 0) * + coefficient * + base.scale + + base.offset, + }; + } + if (category === "IFCDERIVEDUNIT") { + let scale = 1; + for (const element of refs(unit, "Elements")) { + const full = read(element), + component = refs(full, "Unit")[0]; + if (!component) throw new Error("IDS: missing derived unit component"); + scale *= + factor(component, new Set(seen)).scale ** + Number(value(full, "Exponent")); + } + return { scale, offset: 0 }; + } + throw new Error("IDS: unsupported unit definition"); + }; + return ( + actual: unknown, + type: string | undefined, + property: FRAGS.ItemData, + name: string, + ) => { + if (typeof actual !== "number") return actual; + const expectedUnit = unitType(type); + if (!expectedUnit) return actual; + let unit: FRAGS.ItemData | undefined = refs( + property, + name === "DefiningValues" + ? "DefiningUnit" + : name === "DefinedValues" + ? "DefinedUnit" + : "Unit", + )[0]; + unit ??= projectUnits.get(expectedUnit); + if (!unit) return actual; + const { scale, offset } = factor(unit); + return actual * scale + offset; + }; +} diff --git a/packages/core/src/openbim/IDSSpecifications/src/importers/parameter.ts b/packages/core/src/openbim/IDSSpecifications/src/importers/parameter.ts index 7edd650ab..72b338658 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/importers/parameter.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/importers/parameter.ts @@ -10,8 +10,25 @@ export const getParameterValue = (property: any) => { } if ("restriction" in property) { - const restriction = property.restriction; + const clean = (value: any): any => + Array.isArray(value) + ? value.map(clean) + : value && typeof value === "object" + ? Object.fromEntries( + Object.entries(value) + .filter(([key]) => key !== "#text") + .map(([key, item]) => [key, clean(item)]), + ) + : value; + const restriction = clean(property.restriction); const keys = Object.keys(restriction); + const constraints = keys.filter((key) => key !== "base"); + if (constraints.length > 1 || Array.isArray(restriction.pattern)) { + return { + type: "restriction", + parameter: structuredClone(restriction), + } as IDSFacetParameter; + } if ("pattern" in restriction) { result.type = "pattern"; @@ -19,17 +36,19 @@ export const getParameterValue = (property: any) => { } if ("enumeration" in restriction) { result.type = "enumeration"; - const enumeration = restriction.enumeration.map( - ({ value }: { value: string }) => { - if (restriction.base.includes("string")) return String(value); - if ( - restriction.base.includes("integer") || - restriction.base.includes("double") - ) - return Number(value); - return value; - }, - ); + const enumeration = ( + Array.isArray(restriction.enumeration) + ? restriction.enumeration + : [restriction.enumeration] + ).map(({ value }: { value: string }) => { + if (restriction.base.includes("string")) return String(value); + if ( + restriction.base.includes("integer") || + restriction.base.includes("double") + ) + return Number(value); + return value; + }); result.parameter = enumeration; } if ( @@ -56,12 +75,12 @@ export const getParameterValue = (property: any) => { if (minKey) { parameter.minInclusive = minKey === "minInclusive"; - parameter.min = restriction[minKey].value; + parameter.min = Number(restriction[minKey].value); } if (maxKey) { parameter.maxInclusive = maxKey === "maxInclusive"; - parameter.max = restriction[maxKey].value; + parameter.max = Number(restriction[maxKey].value); } result.parameter = parameter; @@ -77,15 +96,15 @@ export const getParameterValue = (property: any) => { } = {}; if (restriction.length !== undefined) { - parameter.length = restriction.length.value; + parameter.length = Number(restriction.length.value); } if (restriction.minLength !== undefined) { - parameter.min = restriction.minLength.value; + parameter.min = Number(restriction.minLength.value); } if (restriction.maxLength !== undefined) { - parameter.max = restriction.maxLength.value; + parameter.max = Number(restriction.maxLength.value); } result.parameter = parameter; diff --git a/packages/core/src/openbim/IDSSpecifications/src/types.ts b/packages/core/src/openbim/IDSSpecifications/src/types.ts index 2980e89ed..12ddb9bf0 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/types.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/types.ts @@ -78,7 +78,14 @@ export type IDSRestrictionParameter = | IDSBoundsParameter | IDSLengthParameter; -export type IDSFacetParameter = IDSSimpleParameter | IDSRestrictionParameter; +export interface IDSCombinedRestrictionParameter { + type: "restriction"; + parameter: Record; +} +export type IDSFacetParameter = + | IDSSimpleParameter + | IDSRestrictionParameter + | IDSCombinedRestrictionParameter; // TODO: This check result need more standarization export interface IDSCheck { diff --git a/packages/core/tests/fixtures/ids-conformance/LICENSE b/packages/core/tests/fixtures/ids-conformance/LICENSE new file mode 100644 index 000000000..18f0e4d48 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/LICENSE @@ -0,0 +1,6 @@ +# LICENSE + +(c) buildingSMART International Ltd. + +This work is licensed under the Creative Commons Attribution-NoDerivatives 4.0 International License. +To view a copy of this license, visit [http://creativecommons.org/licenses/by-nd/4.0/](http://creativecommons.org/licenses/by-nd/4.0/). diff --git a/packages/core/tests/fixtures/ids-conformance/README.md b/packages/core/tests/fixtures/ids-conformance/README.md new file mode 100644 index 000000000..33a7fe02f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/README.md @@ -0,0 +1,3 @@ +# buildingSMART IDS conformance fixtures + +Unmodified test cases from the buildingSMART/IDS development tree at commit `870f9c4e6e8f414e737b4d84ca1aa9b46fc6c8f3` (https://github.com/buildingSMART/IDS/tree/870f9c4e6e8f414e737b4d84ca1aa9b46fc6c8f3/Documentation/ImplementersDocumentation/TestCases). The attribute, classification and partOf cases are in sibling fixture directories. The original CC BY-ND 4.0 license is reproduced in LICENSE. diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ids new file mode 100644 index 000000000..36bfea150 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ids @@ -0,0 +1,28 @@ + + + + A null predefined type should always fail a specified predefined types + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + SOLIDWALL + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ifc new file mode 100644 index 000000000..e48556c4a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_null_predefined_type_should_always_fail_a_specified_predefined_types.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ids new file mode 100644 index 000000000..38985d615 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ids @@ -0,0 +1,28 @@ + + + + A predefined type from an enumeration must be uppercase + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + solidwall + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ifc new file mode 100644 index 000000000..ebe48571a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-a_predefined_type_from_an_enumeration_must_be_uppercase.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,.SOLIDWALL.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ids new file mode 100644 index 000000000..82f600bfb --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ids @@ -0,0 +1,28 @@ + + + + An entity not matching a specified predefined type will fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + SOLIDWALL + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ifc new file mode 100644 index 000000000..981b490ed --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-an_entity_not_matching_a_specified_predefined_type_will_fail.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,.PARTITIONING.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids new file mode 100644 index 000000000..3ad86eff5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc new file mode 100644 index 000000000..46369d88d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ids new file mode 100644 index 000000000..3a21b21ba --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_2_2.ifc new file mode 100644 index 000000000..0b70a6659 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids new file mode 100644 index 000000000..65c94b08c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ids @@ -0,0 +1,28 @@ + + + + In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + + IFCAIRTERMINAL + + + DIFFUSER + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_2_2.ifc new file mode 100644 index 000000000..787edaa7e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ids new file mode 100644 index 000000000..1d4f91aa1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_2_2.ifc new file mode 100644 index 000000000..6e648712f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ids new file mode 100644 index 000000000..06e3d7aa3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ids @@ -0,0 +1,30 @@ + + + + Restrictions can be specified for the predefined type 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ifc new file mode 100644 index 000000000..a02f8a923 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-restrictions_can_be_specified_for_the_predefined_type_3_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'BAZFOO',$,$,$,.USERDEFINED.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ids b/packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ids new file mode 100644 index 000000000..fb38d95a1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ids @@ -0,0 +1,28 @@ + + + + User-defined types are checked case sensitively + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + WALDO + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ifc b/packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ifc new file mode 100644 index 000000000..c5fd9aad9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/fail-user_defined_types_are_checked_case_sensitively.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'waldo',$,$,$,.USERDEFINED.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ids new file mode 100644 index 000000000..e90fc9386 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ids @@ -0,0 +1,25 @@ + + + + A matching entity should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ifc new file mode 100644 index 000000000..e48556c4a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_entity_should_pass.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ids new file mode 100644 index 000000000..a89da2015 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ids @@ -0,0 +1,28 @@ + + + + A matching predefined type should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + SOLIDWALL + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ifc new file mode 100644 index 000000000..ebe48571a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_matching_predefined_type_should_pass.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,.SOLIDWALL.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ids new file mode 100644 index 000000000..404274240 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ids @@ -0,0 +1,28 @@ + + + + A predefined type may specify a user-defined element type + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALLTYPE + + + + + + + IFCWALLTYPE + + + WALDO + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ifc new file mode 100644 index 000000000..e8db38b03 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_element_type.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALLTYPE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,'WALDO',.USERDEFINED.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ids new file mode 100644 index 000000000..b3b544c63 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ids @@ -0,0 +1,28 @@ + + + + A predefined type may specify a user-defined object type + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + WALDO + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ifc new file mode 100644 index 000000000..129db990b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_object_type.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'WALDO',$,$,$,.USERDEFINED.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ids new file mode 100644 index 000000000..66fe172d1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ids @@ -0,0 +1,28 @@ + + + + A predefined type may specify a user-defined process type + Generated via code automation in the Ids Repository on github. + + + + + + + IFCTASKTYPE + + + + + + + IFCTASKTYPE + + + TASKY + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ifc new file mode 100644 index 000000000..bce6e7635 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-a_predefined_type_may_specify_a_user_defined_process_type.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCTASKTYPE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,'TASKY',.USERDEFINED.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ids new file mode 100644 index 000000000..9791bae7b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ids @@ -0,0 +1,25 @@ + + + + An matching entity should pass regardless of predefined type + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ifc new file mode 100644 index 000000000..ebe48571a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-an_matching_entity_should_pass_regardless_of_predefined_type.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,.SOLIDWALL.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ids new file mode 100644 index 000000000..9a2d0d92b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ids @@ -0,0 +1,27 @@ + + + + Entities can be specified as a XSD regex pattern 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALLTYPE + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ifc new file mode 100644 index 000000000..fdd89c718 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_a_xsd_regex_pattern_2_2.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALLTYPE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$,.ELEMENTEDWALL.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ids new file mode 100644 index 000000000..c4d0f5c50 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ids @@ -0,0 +1,28 @@ + + + + Entities can be specified as an enumeration 1/3 + 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-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ifc new file mode 100644 index 000000000..e48556c4a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_1_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ids new file mode 100644 index 000000000..e651c80fc --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ids @@ -0,0 +1,28 @@ + + + + Entities can be specified as an enumeration 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ifc new file mode 100644 index 000000000..1b5bf2054 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-entities_can_be_specified_as_an_enumeration_2_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCSLAB('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids new file mode 100644 index 000000000..3bc510500 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_a_user_defined_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc new file mode 100644 index 000000000..43c56dd34 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ids new file mode 100644 index 000000000..5383e0288 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_can_be_checked_by_name_via_the_type_mapping_table_1_2.ifc new file mode 100644 index 000000000..fcb76d2c4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids new file mode 100644 index 000000000..f267aed0f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ids @@ -0,0 +1,28 @@ + + + + In IFC2X3 an AirTerminal predefined type resolves via the type mapping table 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCAIRTERMINAL + + + + + + + IFCAIRTERMINAL + + + DIFFUSER + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_an_airterminal_predefined_type_resolves_via_the_type_mapping_table_1_2.ifc new file mode 100644 index 000000000..f2cb6ec32 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ids new file mode 100644 index 000000000..2db016347 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-in_ifc2x3_there_must_be_an_airterminal_per_the_type_mapping_table_1_2.ifc new file mode 100644 index 000000000..e7d1d4aac --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/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/packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ids new file mode 100644 index 000000000..73ad70724 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ids @@ -0,0 +1,28 @@ + + + + Inherited predefined types should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + X + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ifc new file mode 100644 index 000000000..464efa401 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-inherited_predefined_types_should_pass.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCWALLTYPE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,'X',.USERDEFINED.); +#3=IFCRELDEFINESBYTYPE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ids new file mode 100644 index 000000000..9b0ab4d06 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ids @@ -0,0 +1,28 @@ + + + + Overridden predefined types should pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + X + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ifc new file mode 100644 index 000000000..a704f4b07 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-overridden_predefined_types_should_pass.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'X',$,$,$,.USERDEFINED.); +#2=IFCWALLTYPE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,.NOTDEFINED.); +#3=IFCRELDEFINESBYTYPE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ids new file mode 100644 index 000000000..ae847c325 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ids @@ -0,0 +1,30 @@ + + + + Restrictions can be specified for the predefined type 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ifc new file mode 100644 index 000000000..6cce4cd0b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_1_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'FOOBAR',$,$,$,.USERDEFINED.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ids new file mode 100644 index 000000000..b634f4524 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ids @@ -0,0 +1,30 @@ + + + + Restrictions can be specified for the predefined type 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + IFCWALL + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ifc new file mode 100644 index 000000000..0a5105f25 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-restrictions_can_be_specified_for_the_predefined_type_2_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,'FOOBAZ',$,$,$,.USERDEFINED.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ids b/packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ids new file mode 100644 index 000000000..7cfe239c6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ids @@ -0,0 +1,28 @@ + + + + Userdefined predefined types may be specified + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALLTYPE + + + + + + + IFCWALLTYPE + + + USERDEFINED + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ifc b/packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ifc new file mode 100644 index 000000000..e8db38b03 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/entity/pass-userdefined_predefined_types_may_be_specified.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALLTYPE('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,'WALDO',.USERDEFINED.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_1_2.ids b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_1_2.ids new file mode 100644 index 000000000..0f1903d22 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_1_2.ids @@ -0,0 +1,28 @@ + + + + A minimal ids can check a minimal ifc (1/2) + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_1_2.ifc new file mode 100644 index 000000000..84cff7d8d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_minimal_ids_can_check_a_minimal_ifc_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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ids b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ids new file mode 100644 index 000000000..16c9f240a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ids @@ -0,0 +1,36 @@ + + + + A specification passes only if all requirements pass (1/2) + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + Description + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ifc new file mode 100644 index 000000000..db0af70f9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-a_specification_passes_only_if_all_requirements_pass_1_2.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids b/packages/core/tests/fixtures/ids-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids new file mode 100644 index 000000000..c4a421e33 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids @@ -0,0 +1,18 @@ + + + + Prohibited specifications fails if the applicability matches + 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-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ifc b/packages/core/tests/fixtures/ids-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ifc new file mode 100644 index 000000000..db0af70f9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ids b/packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ids new file mode 100644 index 000000000..c7ccbd9cb --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ids @@ -0,0 +1,28 @@ + + + + Required specifications need at least one applicable entity (2/2) + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ifc new file mode 100644 index 000000000..654f31202 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/fail-required_specifications_need_at_least_one_applicable_entity_2_2.ifc @@ -0,0 +1,10 @@ +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',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_2.ids b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_2.ids new file mode 100644 index 000000000..47b4a59dc --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_2.ids @@ -0,0 +1,28 @@ + + + + A minimal ids can check a minimal ifc (2/2) + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_2.ifc new file mode 100644 index 000000000..69ed910c9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_minimal_ids_can_check_a_minimal_ifc_2_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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ids b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ids new file mode 100644 index 000000000..df7ba8a4a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ids @@ -0,0 +1,36 @@ + + + + A specification passes only if all requirements pass (2/2) + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + Description + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ifc new file mode 100644 index 000000000..28c6fead9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-a_specification_passes_only_if_all_requirements_pass_2_2.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo','Foobar',$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ids b/packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ids new file mode 100644 index 000000000..40dc9cde8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ids @@ -0,0 +1,28 @@ + + + + Optional specifications may still pass if nothing is applicable + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ifc b/packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ifc new file mode 100644 index 000000000..654f31202 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ifc @@ -0,0 +1,10 @@ +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',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids b/packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids new file mode 100644 index 000000000..7f2ca1692 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids @@ -0,0 +1,18 @@ + + + + Prohibited specifications passes if the applicability does not matches + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWINDOW + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ifc b/packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ifc new file mode 100644 index 000000000..db0af70f9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ids b/packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ids new file mode 100644 index 000000000..3d08443a1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ids @@ -0,0 +1,28 @@ + + + + Required specifications need at least one applicable entity (1/2) + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ifc new file mode 100644 index 000000000..db0af70f9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ids b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ids new file mode 100644 index 000000000..a17143515 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ids @@ -0,0 +1,36 @@ + + + + Specification optionality and facet optionality can be combined + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + Description + + + Foobar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ifc b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ifc new file mode 100644 index 000000000..db0af70f9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_optionality_and_facet_optionality_can_be_combined.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.ids b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.ids new file mode 100644 index 000000000..c8f7c8fc0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.ids @@ -0,0 +1,28 @@ + + + + Specification version is purely metadata and does not impact pass or fail result + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + Waldo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.ifc b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.ifc new file mode 100644 index 000000000..69ed910c9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/ids/pass-specification_version_is_purely_metadata_and_does_not_impact_pass_or_fail_result.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +#2=IFCWALL('0eA6m4fELI9QBIhP3wiLAp',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.ids new file mode 100644 index 000000000..8068a03b2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.ids @@ -0,0 +1,25 @@ + + + + A constituent set with no data will fail a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.ifc new file mode 100644 index 000000000..89e72f096 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-a_constituent_set_with_no_data_will_fail_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALCONSTITUENTSET('Unnamed',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ids new file mode 100644 index 000000000..c03a91d96 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ids @@ -0,0 +1,25 @@ + + + + A material list with no data will fail a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ifc new file mode 100644 index 000000000..ca749a4c4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-a_material_list_with_no_data_will_fail_a_value_check.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-09-12T23:03:13',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('05rScmOVzMoQXOfbYdtLYj',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLIST((#4)); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Concrete',$,'CONCRETE'); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids b/packages/core/tests/fixtures/ids-conformance/material/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids new file mode 100644 index 000000000..48deb4d79 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids @@ -0,0 +1,21 @@ + + + + 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-conformance/material/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc b/packages/core/tests/fixtures/ids-conformance/material/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc new file mode 100644 index 000000000..f4476e729 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('Unnamed',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.ids b/packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.ids new file mode 100644 index 000000000..e2c6483a7 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.ids @@ -0,0 +1,25 @@ + + + + An optional material fails if no value matches + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.ifc b/packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.ifc new file mode 100644 index 000000000..122b6dbab --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-an_optional_material_fails_if_no_value_matches.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('No match',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-elements_without_a_material_always_fail.ids b/packages/core/tests/fixtures/ids-conformance/material/fail-elements_without_a_material_always_fail.ids new file mode 100644 index 000000000..05bde51b0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-elements_without_a_material_always_fail.ids @@ -0,0 +1,21 @@ + + + + Elements without a material always fail + 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-conformance/material/fail-elements_without_a_material_always_fail.ifc b/packages/core/tests/fixtures/ids-conformance/material/fail-elements_without_a_material_always_fail.ifc new file mode 100644 index 000000000..123dee33d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-elements_without_a_material_always_fail.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ids new file mode 100644 index 000000000..cece57633 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Material with no data will fail a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ifc new file mode 100644 index 000000000..85643f5c0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/fail-material_with_no_data_will_fail_a_value_check.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-09-12T23:03:13',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('05rScmOVzMoQXOfbYdtLYj',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('Unnamed',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.ids new file mode 100644 index 000000000..ed5a449f6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + A layer set name will pass the value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Bar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.ifc new file mode 100644 index 000000000..8c8a7836f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-a_layer_set_name_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLAYERSET((#5),'Bar',$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Unnamed',$,$); +#5=IFCMATERIALLAYER(#4,1.,$,'Foo',$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.ids new file mode 100644 index 000000000..777161620 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.ids @@ -0,0 +1,25 @@ + + + + A material category may pass the value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.ifc new file mode 100644 index 000000000..62b68b0b9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_category_may_pass_the_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('Bar',$,'Foo'); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.ids new file mode 100644 index 000000000..f33f6bed9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.ids @@ -0,0 +1,25 @@ + + + + A material name may pass the value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.ifc new file mode 100644 index 000000000..eda426880 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-a_material_name_may_pass_the_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('Foo',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-a_required_facet_checks_all_parameters_as_normal.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-a_required_facet_checks_all_parameters_as_normal.ids new file mode 100644 index 000000000..fb548bb0f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-a_required_facet_checks_all_parameters_as_normal.ids @@ -0,0 +1,21 @@ + + + + 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-conformance/material/pass-a_required_facet_checks_all_parameters_as_normal.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-a_required_facet_checks_all_parameters_as_normal.ifc new file mode 100644 index 000000000..f4476e729 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('Unnamed',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ids new file mode 100644 index 000000000..8973d7652 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ids @@ -0,0 +1,25 @@ + + + + An optional material passes if null + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ifc new file mode 100644 index 000000000..123dee33d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_null.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.ids new file mode 100644 index 000000000..07e0cf200 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.ids @@ -0,0 +1,25 @@ + + + + An optional material passes if specified + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.ifc new file mode 100644 index 000000000..eda426880 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-an_optional_material_passes_if_specified.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('Foo',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..4cc5ca7ce --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any constituent Category in a constituent set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..96557bd28 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_category_in_a_constituent_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALCONSTITUENTSET('Unnamed',$,(#5)); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Unnamed',$,$); +#5=IFCMATERIALCONSTITUENT('Bar',$,#4,$,'Foo'); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..5b060a6ff --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any constituent Name in a constituent set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..c4f83bc07 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_constituent_name_in_a_constituent_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALCONSTITUENTSET('Unnamed',$,(#5)); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Unnamed',$,$); +#5=IFCMATERIALCONSTITUENT('Foo',$,#4,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..7f6a802fc --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any layer Category in a layer set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..3079c68c5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_category_in_a_layer_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLAYERSET((#5),'Unnamed',$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Unnamed',$,$); +#5=IFCMATERIALLAYER(#4,1.,$,'Bar',$,'Foo',$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..ee2c43ab2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any layer Name in a layer set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..4d3eecc01 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_layer_name_in_a_layer_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLAYERSET((#5),'Unnamed',$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Unnamed',$,$); +#5=IFCMATERIALLAYER(#4,1.,$,'Foo',$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..81dd51fed --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material Category in a constituent set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..cf92ef67b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_constituent_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALCONSTITUENTSET('Unnamed',$,(#5)); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Bar',$,'Foo'); +#5=IFCMATERIALCONSTITUENT('Bar',$,#4,$,'Bar'); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..2ab3a7900 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material Category in a layer set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..97635695c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_layer_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLAYERSET((#5),'Unnamed',$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Bar',$,'Foo'); +#5=IFCMATERIALLAYER(#4,1.,$,'Bar',$,'Bar',$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ids new file mode 100644 index 000000000..2e21263e4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material Category in a list will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ifc new file mode 100644 index 000000000..933abda6a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_list_will_pass_a_value_check.ifc @@ -0,0 +1,13 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLIST((#4)); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Bar',$,'Foo'); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..aeaa69179 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material category in a profile set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..fa2488c31 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_category_in_a_profile_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALPROFILESET('Unnamed',$,(#5),$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Bar',$,'Foo'); +#5=IFCMATERIALPROFILE('Bar',$,#4,#6,$,'Bar'); +#6=IFCCIRCLEPROFILEDEF(.AREA.,$,$,1.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..179a01556 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material Name in a constituent set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..9aeda2148 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_constituent_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALCONSTITUENTSET('Unnamed',$,(#5)); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Foo',$,$); +#5=IFCMATERIALCONSTITUENT('Bar',$,#4,$,'Bar'); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..1e0c25b9a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material Name in a layer set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..96f96adc8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_layer_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLAYERSET((#5),'Unnamed',$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Foo',$,$); +#5=IFCMATERIALLAYER(#4,1.,$,'Bar',$,'Bar',$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ids new file mode 100644 index 000000000..9c7fd3150 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material Name in a list will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ifc new file mode 100644 index 000000000..2a14796b2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_list_will_pass_a_value_check.ifc @@ -0,0 +1,13 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALLIST((#4)); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Foo',$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..331b0f1dc --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any material Name in a profile set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..c0dfd5dd1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_material_name_in_a_profile_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALPROFILESET('Unnamed',$,(#5),$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Foo',$,$); +#5=IFCMATERIALPROFILE('Bar',$,#4,#6,$,'Bar'); +#6=IFCCIRCLEPROFILEDEF(.AREA.,$,$,1.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..22023b328 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any profile Category in a profile set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..847532439 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_category_in_a_profile_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALPROFILESET('Unnamed',$,(#5),$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Unnamed',$,$); +#5=IFCMATERIALPROFILE('Bar',$,#4,#6,$,'Foo'); +#6=IFCCIRCLEPROFILEDEF(.AREA.,$,$,1.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.ids new file mode 100644 index 000000000..d734f9d77 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.ids @@ -0,0 +1,25 @@ + + + + Any profile Name in a profile set will pass a value check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.ifc new file mode 100644 index 000000000..26b29a719 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-any_profile_name_in_a_profile_set_will_pass_a_value_check.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIALPROFILESET('Unnamed',$,(#5),$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Unnamed',$,$); +#5=IFCMATERIALPROFILE('Foo',$,#4,#6,$,$); +#6=IFCCIRCLEPROFILEDEF(.AREA.,$,$,1.); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_facet.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_facet.ids new file mode 100644 index 000000000..7603c3140 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_facet.ids @@ -0,0 +1,21 @@ + + + + Elements with any material will pass an empty material 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-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_facet.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_facet.ifc new file mode 100644 index 000000000..f4476e729 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-elements_with_any_material_will_pass_an_empty_material_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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCMATERIAL('Unnamed',$,$); +#3=IFCRELASSOCIATESMATERIAL('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.ids new file mode 100644 index 000000000..5fbeeeef2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.ids @@ -0,0 +1,25 @@ + + + + Occurrences can inherit materials from their types + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.ifc new file mode 100644 index 000000000..12d5b9c94 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_inherit_materials_from_their_types.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCWALLTYPE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,.ELEMENTEDWALL.); +#3=IFCRELDEFINESBYTYPE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Foo',$,$); +#5=IFCRELASSOCIATESMATERIAL('0BbkGoC6vPvRW13UT7D8zH',$,$,$,(#2),#4); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.ids b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.ids new file mode 100644 index 000000000..45995f6d0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.ids @@ -0,0 +1,25 @@ + + + + Occurrences can override materials from their types + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.ifc b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.ifc new file mode 100644 index 000000000..303eedcbe --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/material/pass-occurrences_can_override_materials_from_their_types.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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCWALLTYPE('0eA6m4fELI9QBIhP3wiLAp',$,$,$,$,$,$,$,$,.ELEMENTEDWALL.); +#3=IFCRELDEFINESBYTYPE('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCMATERIAL('Bar',$,$); +#5=IFCRELASSOCIATESMATERIAL('0BbkGoC6vPvRW13UT7D8zH',$,$,$,(#2),#4); +#6=IFCMATERIAL('Foo',$,$); +#7=IFCRELASSOCIATESMATERIAL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#1),#6); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ids new file mode 100644 index 000000000..92a9e3e29 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ids @@ -0,0 +1,28 @@ + + + + A logical unknown is considered as not matching and will not pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ifc new file mode 100644 index 000000000..d468328e6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-a_logical_unknown_is_considered_false_and_will_not_pass.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLOGICAL(.U.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids new file mode 100644 index 000000000..127f84014 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ids @@ -0,0 +1,28 @@ + + + + A prohibited facet returns the opposite of a required facet + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc new file mode 100644 index 000000000..98b26a604 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-a_prohibited_facet_returns_the_opposite_of_a_required_facet.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ids new file mode 100644 index 000000000..27de0ac1e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ids @@ -0,0 +1,33 @@ + + + + All matching properties must satisfy requirements 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + + + + + + x + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ifc new file mode 100644 index 000000000..733208718 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_properties_must_satisfy_requirements_3_3.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10,#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foobar',$,IFCLABEL('x'),$); +#11=IFCPROPERTYSINGLEVALUE('Foobaz',$,IFCLABEL('y'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ids new file mode 100644 index 000000000..095290755 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ids @@ -0,0 +1,30 @@ + + + + All matching property sets must satisfy requirements 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ifc new file mode 100644 index 000000000..06311724f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-all_matching_property_sets_must_satisfy_requirements_2_3.ifc @@ -0,0 +1,22 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +#11=IFCPROPERTYSET('1n81bO_6nGjgypJwWUVavJ',$,'Foo_Baz',$,(#13)); +#12=IFCRELDEFINESBYPROPERTIES('3b0AoFivPN6RDJO6UL_GfZ',$,$,$,(#7),#11); +#13=IFCPROPERTYSINGLEVALUE('AnotherProperty',$,IFCLABEL('AnotherValue'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ids new file mode 100644 index 000000000..994c6a1f2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ids @@ -0,0 +1,28 @@ + + + + An empty string is considered not matching and will not pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ifc new file mode 100644 index 000000000..8b469cd9d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-an_empty_string_is_considered_false_and_will_not_pass.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL(''),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ids new file mode 100644 index 000000000..13da9d6c2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a bounded property will pass 4/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 2 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ifc new file mode 100644 index 000000000..08ff8724f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_bounded_property_will_pass_4_4.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(5000.),IFCLENGTHMEASURE(1000.),$,IFCLENGTHMEASURE(3000.)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ids new file mode 100644 index 000000000..0428e6a58 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a list property will pass 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + Z + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ifc new file mode 100644 index 000000000..0b30dd6a4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_list_property_will_pass_3_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYLISTVALUE('Foo',$,(IFCLABEL('X'),IFCLABEL('Y')),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ids new file mode 100644 index 000000000..6d0183c5a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a table property will pass 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + Y + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ifc new file mode 100644 index 000000000..c8a7d4765 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-any_matching_value_in_a_table_property_will_pass_3_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYTABLEVALUE('Foo',$,(IFCLABEL('X')),(IFCLENGTHMEASURE(1000.)),$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids new file mode 100644 index 000000000..417980454 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ids @@ -0,0 +1,31 @@ + + + + Booleans must be specified as lowercase strings 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + true + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc new file mode 100644 index 000000000..8b248e161 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-booleans_must_be_specified_as_lowercase_strings_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCBOOLEAN(.F.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ids new file mode 100644 index 000000000..9c80a29c7 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ids @@ -0,0 +1,28 @@ + + + + Complex properties are not supported 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ifc new file mode 100644 index 000000000..1326f18b5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_1_2.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCELEMENTQUANTITY('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPHYSICALCOMPLEXQUANTITY('Foo',$,(#11),'FurThickness',$,$); +#11=IFCQUANTITYLENGTH('MyLength',$,$,42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ids new file mode 100644 index 000000000..cf7dc47b8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ids @@ -0,0 +1,28 @@ + + + + Complex properties are not supported 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo + + + MyLength + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ifc new file mode 100644 index 000000000..1326f18b5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-complex_properties_are_not_supported_2_2.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCELEMENTQUANTITY('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPHYSICALCOMPLEXQUANTITY('Foo',$,(#11),'FurThickness',$,$); +#11=IFCQUANTITYLENGTH('MyLength',$,$,42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ids new file mode 100644 index 000000000..cdfd23b82 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ids @@ -0,0 +1,31 @@ + + + + Dates are treated as strings 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 2022-01-01 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ifc new file mode 100644 index 000000000..c1f6dc0f5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-dates_are_treated_as_strings_2_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCDATE('2022-01-01+00:00'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ids new file mode 100644 index 000000000..7190658bb --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ids @@ -0,0 +1,31 @@ + + + + Durations are treated as strings 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + PT16H + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ifc new file mode 100644 index 000000000..bbf284703 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-durations_are_treated_as_strings_1_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCDURATION('P2D'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ids new file mode 100644 index 000000000..6d3ba49fa --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ids @@ -0,0 +1,28 @@ + + + + Elements with a matching pset but no property also fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ifc new file mode 100644 index 000000000..427d10b39 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_a_matching_pset_but_no_property_also_fail.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('AnotherProperty',$,IFCLABEL('AnotherValue'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ids new file mode 100644 index 000000000..7cefe5cf4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ids @@ -0,0 +1,28 @@ + + + + Elements with no properties always fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ifc new file mode 100644 index 000000000..e25ccedc8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-elements_with_no_properties_always_fail.ifc @@ -0,0 +1,16 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids new file mode 100644 index 000000000..1d140bfc4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ids @@ -0,0 +1,31 @@ + + + + IDS does not handle string truncation such as for identifiers + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345_extra_characters + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc new file mode 100644 index 000000000..73a24d148 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-ids_does_not_handle_string_truncation_such_as_for_identifiers.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCIDENTIFIER('123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ids new file mode 100644 index 000000000..d65ff9c7a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ids @@ -0,0 +1,36 @@ + + + + If multiple properties are matched, all values must satisfy requirements 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ifc new file mode 100644 index 000000000..c969eb83d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_2_2.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10,#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foobar',$,IFCLABEL('x'),$); +#11=IFCPROPERTYSINGLEVALUE('Foobaz',$,IFCLABEL('z'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ids new file mode 100644 index 000000000..b1f306983 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ids @@ -0,0 +1,28 @@ + + + + Material properties that are absent fail under IFC2X3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCMATERIAL + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ifc new file mode 100644 index 000000000..9927cff7e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc2x3.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +#2=IFCMATERIAL('Concrete'); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ids new file mode 100644 index 000000000..b0bb9478e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ids @@ -0,0 +1,28 @@ + + + + Material properties that are absent fail under IFC4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCMATERIAL + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ifc new file mode 100644 index 000000000..1bf81fe96 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-material_properties_that_are_absent_fail_under_ifc4.ifc @@ -0,0 +1,11 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +#2=IFCMATERIAL('Concrete',$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ids new file mode 100644 index 000000000..8788a8142 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ids @@ -0,0 +1,31 @@ + + + + Measures are used to specify an IFC data type 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 2 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ifc new file mode 100644 index 000000000..e84cc6e45 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-measures_are_used_to_specify_an_ifc_data_type_1_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCMASSMEASURE(2.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ids new file mode 100644 index 000000000..b592c7e90 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ids @@ -0,0 +1,31 @@ + + + + No matching value in an enumerated property will fail 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Pset_WallCommon + + + Status + + + NEW + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ifc new file mode 100644 index 000000000..7b8de2b2f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-no_matching_value_in_an_enumerated_property_will_fail_3_3.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Pset_WallCommon',$,(#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYENUMERATION('Status',(IFCLABEL('NEW'),IFCLABEL('EXISTING'),IFCLABEL('DEMOLISH'),IFCLABEL('TEMPORARY'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$); +#11=IFCPROPERTYENUMERATEDVALUE('Status',$,(IFCLABEL('EXISTING'),IFCLABEL('DEMOLISH')),#10); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ids new file mode 100644 index 000000000..ab77078ab --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ids @@ -0,0 +1,31 @@ + + + + Predefined properties are supported but discouraged 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCDOOR + + + + + + + Foo_Bar + + + PanelOperation + + + SWONGING + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ifc new file mode 100644 index 000000000..599e17c27 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-predefined_properties_are_supported_but_discouraged_2_2.ifc @@ -0,0 +1,18 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCDOOR('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$,$,$,$,$); +#8=IFCDOORPANELPROPERTIES('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,$,.SWINGING.,$,.LEFT.,$); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ids new file mode 100644 index 000000000..7d45c966f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ids @@ -0,0 +1,28 @@ + + + + Project properties that are absent fail under IFC2X3 via IfcObject + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPROJECT + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ifc new file mode 100644 index 000000000..48c967e53 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc2x3_via_ifcobject.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ids new file mode 100644 index 000000000..5b8d5c954 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ids @@ -0,0 +1,28 @@ + + + + Project properties that are absent fail under IFC4 via IfcContext + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPROJECT + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ifc new file mode 100644 index 000000000..c931eefca --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-project_properties_that_are_absent_fail_under_ifc4_via_ifccontext.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ids new file mode 100644 index 000000000..4499b524e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ids @@ -0,0 +1,33 @@ + + + + Properties can be associated to relevant object types + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALLTYPE + + + + + + + Pset_WallCommon + + + FireRating + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ifc new file mode 100644 index 000000000..3a0f39c5a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_associated_to_relevant_object_types.ifc @@ -0,0 +1,109 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-19T11:51:41',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1GQEZ0MwD4ahKvualfHyAm',$,'TEST',$,$,$,$,(#10),#5); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#5=IFCUNITASSIGNMENT((#4,#2,#3)); +#6=IFCCARTESIANPOINT((0.,0.,0.)); +#7=IFCDIRECTION((0.,0.,1.)); +#8=IFCDIRECTION((1.,0.,0.)); +#9=IFCAXIS2PLACEMENT3D(#6,#7,#8); +#10=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#9,$); +#11=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#10,$,.MODEL_VIEW.,$); +#12=IFCSITE('2bkn_WDBH7RQpCyAUYCERG',$,'My Site',$,$,$,$,$,$,$,$,$,$,$); +#13=IFCBUILDING('27VrO8HaLDKA57J8adJhe8',$,'Building A',$,$,$,$,$,$,$,$,$); +#14=IFCBUILDINGSTOREY('2i$USS0Tj73geVelA0jId2',$,'Ground Floor',$,$,$,$,$,$,$); +#15=IFCRELAGGREGATES('24xgvmFD906vTUl5nlJL$H',$,$,$,#1,(#12)); +#16=IFCRELAGGREGATES('0vfkDd1WT1aA8U_K3iLCvl',$,$,$,#12,(#13)); +#17=IFCRELAGGREGATES('3pBNqWAFD97Ps61WpJkTbY',$,$,$,#13,(#14)); +#18=IFCWALLTYPE('0$fEBCD6jEv9jpRUt3zkZz',$,'DEMO1',$,$,$,$,$,$,.NOTDEFINED.); +#19=IFCWALL('0CmsRNafDFERwQeQNUE1gy',$,'WALL 1',$,$,#42,#31,$,.NOTDEFINED.); +#20=IFCRELDEFINESBYTYPE('3EVY8iTa58TBY_rYn0YXoj',$,$,$,(#19),#18); +#21=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.,50.),(5000.,50.),(5000.,0.),(0.,0.))); +#22=IFCINDEXEDPOLYCURVE(#21,$,.F.); +#23=IFCDIRECTION((0.,0.,1.)); +#24=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#22); +#25=IFCCARTESIANPOINT((0.,0.,0.)); +#26=IFCDIRECTION((0.,0.,1.)); +#27=IFCDIRECTION((1.,0.,0.)); +#28=IFCAXIS2PLACEMENT3D(#25,#26,#27); +#29=IFCEXTRUDEDAREASOLID(#24,#28,#23,3000.); +#30=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#29)); +#31=IFCPRODUCTDEFINITIONSHAPE($,$,(#30)); +#37=IFCRELCONTAINEDINSPATIALSTRUCTURE('2YxdDanZb23AMToFp_OBMy',$,$,$,(#19,#44,#70,#96),#14); +#38=IFCCARTESIANPOINT((0.,0.,0.)); +#39=IFCDIRECTION((0.,0.,1.)); +#40=IFCDIRECTION((1.,0.,0.)); +#41=IFCAXIS2PLACEMENT3D(#38,#39,#40); +#42=IFCLOCALPLACEMENT($,#41); +#43=IFCWALLTYPE('1f5eb9nK1CMPeSaQZXnxap',$,'DEMO2',$,$,(#56),$,$,$,.NOTDEFINED.); +#44=IFCWALL('1wbudnTVz2N87TMdj7ddGh',$,'WALL 2',$,$,#68,#58,$,.NOTDEFINED.); +#45=IFCRELDEFINESBYTYPE('31rcZMmsD1iPx_OrHeumAw',$,$,$,(#44),#43); +#46=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.,100.),(5000.,100.),(5000.,0.),(0.,0.))); +#47=IFCINDEXEDPOLYCURVE(#46,$,.F.); +#48=IFCDIRECTION((0.,0.,1.)); +#49=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#47); +#50=IFCCARTESIANPOINT((0.,0.,0.)); +#51=IFCDIRECTION((0.,0.,1.)); +#52=IFCDIRECTION((1.,0.,0.)); +#53=IFCAXIS2PLACEMENT3D(#50,#51,#52); +#54=IFCEXTRUDEDAREASOLID(#49,#53,#48,3000.); +#55=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#54)); +#56=IFCPROPERTYSET('3zIozU7yP9zv1n9ja7GTc5',$,'Pset_WallCommon',$,(#57)); +#57=IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('-/-/-'),$); +#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#55)); +#64=IFCCARTESIANPOINT((0.,1000.,0.)); +#65=IFCDIRECTION((0.,0.,1.)); +#66=IFCDIRECTION((1.,0.,0.)); +#67=IFCAXIS2PLACEMENT3D(#64,#65,#66); +#68=IFCLOCALPLACEMENT($,#67); +#69=IFCWALLTYPE('3Ymap1J8fD$grTswMSn1Pj',$,'DEMO3',$,$,(#82),$,$,$,.NOTDEFINED.); +#70=IFCWALL('3TYh_KNxD7L8ThsAiLWIi7',$,'WALL 3',$,$,#94,#84,$,.NOTDEFINED.); +#71=IFCRELDEFINESBYTYPE('3s6W0qWcL6IvRH$BacBrdD',$,$,$,(#70),#69); +#72=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.,150.),(5000.,150.),(5000.,0.),(0.,0.))); +#73=IFCINDEXEDPOLYCURVE(#72,$,.F.); +#74=IFCDIRECTION((0.,0.,1.)); +#75=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#73); +#76=IFCCARTESIANPOINT((0.,0.,0.)); +#77=IFCDIRECTION((0.,0.,1.)); +#78=IFCDIRECTION((1.,0.,0.)); +#79=IFCAXIS2PLACEMENT3D(#76,#77,#78); +#80=IFCEXTRUDEDAREASOLID(#75,#79,#74,3000.); +#81=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#80)); +#82=IFCPROPERTYSET('3A4z0rxAL6vAhL0dFpUTgE',$,'Pset_WallCommon',$,(#83)); +#83=IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('120/120/120'),$); +#84=IFCPRODUCTDEFINITIONSHAPE($,$,(#81)); +#90=IFCCARTESIANPOINT((0.,2000.,0.)); +#91=IFCDIRECTION((0.,0.,1.)); +#92=IFCDIRECTION((1.,0.,0.)); +#93=IFCAXIS2PLACEMENT3D(#90,#91,#92); +#94=IFCLOCALPLACEMENT($,#93); +#95=IFCWALLTYPE('1v0oUekInBbQ$b$56Yn_$z',$,'DEMO4',$,$,(#108),$,$,$,.NOTDEFINED.); +#96=IFCWALL('1iuBEMYbL5q8FLrEdzU7CF',$,'WALL 4',$,$,#120,#110,$,.NOTDEFINED.); +#97=IFCRELDEFINESBYTYPE('1I7kq7znL5bgDdg5cenpVo',$,$,$,(#96),#95); +#98=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.,200.),(5000.,200.),(5000.,0.),(0.,0.))); +#99=IFCINDEXEDPOLYCURVE(#98,$,.F.); +#100=IFCDIRECTION((0.,0.,1.)); +#101=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#99); +#102=IFCCARTESIANPOINT((0.,0.,0.)); +#103=IFCDIRECTION((0.,0.,1.)); +#104=IFCDIRECTION((1.,0.,0.)); +#105=IFCAXIS2PLACEMENT3D(#102,#103,#104); +#106=IFCEXTRUDEDAREASOLID(#101,#105,#100,3000.); +#107=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#106)); +#108=IFCPROPERTYSET('0ucEk2GmfET84nwHQE_lHA',$,'Pset_WallCommon',$,(#109)); +#109=IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('FOOBAR'),$); +#110=IFCPRODUCTDEFINITIONSHAPE($,$,(#107)); +#116=IFCCARTESIANPOINT((0.,3000.,0.)); +#117=IFCDIRECTION((0.,0.,1.)); +#118=IFCDIRECTION((1.,0.,0.)); +#119=IFCAXIS2PLACEMENT3D(#116,#117,#118); +#120=IFCLOCALPLACEMENT($,#119); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ids new file mode 100644 index 000000000..54ea7984c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ids @@ -0,0 +1,31 @@ + + + + Properties can be overriden by an occurrence 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALLTYPE + + + + + + + Foo_Bar + + + Foo + + + Bar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ifc new file mode 100644 index 000000000..103edaac9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_can_be_overriden_by_an_occurrence_2_2.ifc @@ -0,0 +1,23 @@ +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=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#2,#5,#3,#4)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCWALLTYPE('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,(#10),$,$,$,.ELEMENTEDWALL.); +#9=IFCRELDEFINESBYTYPE('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSET('0WTUhjMwvT39YBFH2pryoM',$,'Foo_Bar',$,(#11)); +#11=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Baz'),$); +#12=IFCPROPERTYSET('3b0AoFivPN6RDJO6UL_GfZ',$,'Foo_Bar',$,(#14)); +#13=IFCRELDEFINESBYPROPERTIES('1UJX0DW6PGVvNXUEmD0sBq',$,$,$,(#7),#12); +#14=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ids new file mode 100644 index 000000000..96e65e952 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ids @@ -0,0 +1,28 @@ + + + + Properties with a null value fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ifc new file mode 100644 index 000000000..9c6a4a114 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-properties_with_a_null_value_fail.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('AnotherProperty',$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ids new file mode 100644 index 000000000..7ed82e52a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ids @@ -0,0 +1,28 @@ + + + + Quantities must also match the appropriate measure + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ifc new file mode 100644 index 000000000..3e894a685 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-quantities_must_also_match_the_appropriate_measure.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCELEMENTQUANTITY('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCQUANTITYLENGTH('Foo',$,$,42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ids new file mode 100644 index 000000000..1cb82a2ab --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ids @@ -0,0 +1,28 @@ + + + + Reference properties are treated as objects and not supported + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ifc new file mode 100644 index 000000000..f25845e16 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-reference_properties_are_treated_as_objects_and_not_supported.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYREFERENCEVALUE('Foo',$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ids new file mode 100644 index 000000000..e1953f68b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ids @@ -0,0 +1,31 @@ + + + + Specifying a value fails against different values + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + Bar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ifc new file mode 100644 index 000000000..a0d535290 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_fails_against_different_values.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Baz'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ids new file mode 100644 index 000000000..3bd4e1d90 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ids @@ -0,0 +1,31 @@ + + + + Specifying a value performs a case-sensitive match 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + Bar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ifc new file mode 100644 index 000000000..77d22d037 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-specifying_a_value_performs_a_case_sensitive_match_2_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ids new file mode 100644 index 000000000..460907b97 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ids @@ -0,0 +1,31 @@ + + + + Unit conversions shall take place to IDS-nominated standard units 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 2 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ifc new file mode 100644 index 000000000..9ef361b9b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/fail-unit_conversions_shall_take_place_to_ids_nominated_standard_units_1_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLENGTHMEASURE(2.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ids new file mode 100644 index 000000000..ca91c60ea --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ids @@ -0,0 +1,28 @@ + + + + A name check will match any property with any string value + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ifc new file mode 100644 index 000000000..4dcf4a16e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_property_with_any_string_value.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10,#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('AnotherProperty',$,$,$); +#11=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ids new file mode 100644 index 000000000..c01ad6db7 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ids @@ -0,0 +1,28 @@ + + + + A name check will match any quantity with any value + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ifc new file mode 100644 index 000000000..3e894a685 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_name_check_will_match_any_quantity_with_any_value.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCELEMENTQUANTITY('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCQUANTITYLENGTH('Foo',$,$,42.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ids new file mode 100644 index 000000000..26083b7fb --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ids @@ -0,0 +1,31 @@ + + + + A number specified as a string is treated as a string + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ifc new file mode 100644 index 000000000..3125cdb78 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_number_specified_as_a_string_is_treated_as_a_string.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('1'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ids new file mode 100644 index 000000000..b5d1e31b1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ids @@ -0,0 +1,28 @@ + + + + A property set to false is still considered a value and will pass a name check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ifc new file mode 100644 index 000000000..8b248e161 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_false_is_still_considered_a_value_and_will_pass_a_name_check.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCBOOLEAN(.F.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ids new file mode 100644 index 000000000..4167f0849 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ids @@ -0,0 +1,28 @@ + + + + A property set to true will pass a name check + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ifc new file mode 100644 index 000000000..9479a72bf --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_property_set_to_true_will_pass_a_name_check.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCBOOLEAN(.T.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ids new file mode 100644 index 000000000..46d35bbcd --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ids @@ -0,0 +1,28 @@ + + + + A required facet checks all parameters as normal + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ifc new file mode 100644 index 000000000..98b26a604 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_required_facet_checks_all_parameters_as_normal.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ids new file mode 100644 index 000000000..c15e9b7a3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ids @@ -0,0 +1,28 @@ + + + + A zero duration will pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ifc new file mode 100644 index 000000000..decc9c702 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-a_zero_duration_will_pass.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCDURATION('P0D'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ids new file mode 100644 index 000000000..9e1a23697 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ids @@ -0,0 +1,33 @@ + + + + All matching properties must satisfy requirements 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + + + + + + x + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ifc new file mode 100644 index 000000000..c07e60fa9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foobar',$,IFCLABEL('x'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ids new file mode 100644 index 000000000..3bd36a0e5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ids @@ -0,0 +1,33 @@ + + + + All matching properties must satisfy requirements 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + + + + + + x + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ifc new file mode 100644 index 000000000..99a64a8a4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_properties_must_satisfy_requirements_2_3.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10,#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foobar',$,IFCLABEL('x'),$); +#11=IFCPROPERTYSINGLEVALUE('Foobaz',$,IFCLABEL('x'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ids new file mode 100644 index 000000000..498534ee7 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ids @@ -0,0 +1,30 @@ + + + + All matching property sets must satisfy requirements 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ifc new file mode 100644 index 000000000..06f77d0b7 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ids new file mode 100644 index 000000000..4d61b1067 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ids @@ -0,0 +1,30 @@ + + + + All matching property sets must satisfy requirements 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + + + + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ifc new file mode 100644 index 000000000..c9e48de8f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-all_matching_property_sets_must_satisfy_requirements_3_3.ifc @@ -0,0 +1,23 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +#11=IFCPROPERTYSET('1n81bO_6nGjgypJwWUVavJ',$,'Foo_Baz',$,(#13,#14)); +#12=IFCRELDEFINESBYPROPERTIES('3b0AoFivPN6RDJO6UL_GfZ',$,$,$,(#7),#11); +#13=IFCPROPERTYSINGLEVALUE('AnotherProperty',$,IFCLABEL('AnotherValue'),$); +#14=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ids new file mode 100644 index 000000000..34ae16ee2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ids @@ -0,0 +1,28 @@ + + + + An optional facet always passes regardless of outcome 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ifc new file mode 100644 index 000000000..98b26a604 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_1_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ids new file mode 100644 index 000000000..491fa236f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ids @@ -0,0 +1,28 @@ + + + + An optional facet always passes regardless of outcome 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Bar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ifc new file mode 100644 index 000000000..98b26a604 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-an_optional_facet_always_passes_regardless_of_outcome_2_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ids new file mode 100644 index 000000000..9a712fa6c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a bounded property will pass 1/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ifc new file mode 100644 index 000000000..08ff8724f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_1_4.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(5000.),IFCLENGTHMEASURE(1000.),$,IFCLENGTHMEASURE(3000.)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ids new file mode 100644 index 000000000..d9707cc05 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a bounded property will pass 2/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 5 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ifc new file mode 100644 index 000000000..08ff8724f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_2_4.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(5000.),IFCLENGTHMEASURE(1000.),$,IFCLENGTHMEASURE(3000.)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ids new file mode 100644 index 000000000..9bc9959a6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a bounded property will pass 3/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 3 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ifc new file mode 100644 index 000000000..08ff8724f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_bounded_property_will_pass_3_4.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(5000.),IFCLENGTHMEASURE(1000.),$,IFCLENGTHMEASURE(3000.)); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ids new file mode 100644 index 000000000..de10cf109 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a list property will pass 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + X + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ifc new file mode 100644 index 000000000..0b30dd6a4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYLISTVALUE('Foo',$,(IFCLABEL('X'),IFCLABEL('Y')),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ids new file mode 100644 index 000000000..f6b6cb257 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a list property will pass 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + Y + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ifc new file mode 100644 index 000000000..0b30dd6a4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_list_property_will_pass_2_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYLISTVALUE('Foo',$,(IFCLABEL('X'),IFCLABEL('Y')),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ids new file mode 100644 index 000000000..cd44e4936 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a table property will pass 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + X + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ifc new file mode 100644 index 000000000..c8a7d4765 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYTABLEVALUE('Foo',$,(IFCLABEL('X')),(IFCLENGTHMEASURE(1000.)),$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ids new file mode 100644 index 000000000..243cdee97 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in a table property will pass 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ifc new file mode 100644 index 000000000..c8a7d4765 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_a_table_property_will_pass_2_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYTABLEVALUE('Foo',$,(IFCLABEL('X')),(IFCLENGTHMEASURE(1000.)),$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ids new file mode 100644 index 000000000..d3528e6bf --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in an enumerated property will pass 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Pset_WallCommon + + + Status + + + EXISTING + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ifc new file mode 100644 index 000000000..7b8de2b2f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_1_3.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Pset_WallCommon',$,(#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYENUMERATION('Status',(IFCLABEL('NEW'),IFCLABEL('EXISTING'),IFCLABEL('DEMOLISH'),IFCLABEL('TEMPORARY'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$); +#11=IFCPROPERTYENUMERATEDVALUE('Status',$,(IFCLABEL('EXISTING'),IFCLABEL('DEMOLISH')),#10); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ids new file mode 100644 index 000000000..d9cbe8704 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ids @@ -0,0 +1,31 @@ + + + + Any matching value in an enumerated property will pass 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Pset_WallCommon + + + Status + + + DEMOLISH + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ifc new file mode 100644 index 000000000..7b8de2b2f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-any_matching_value_in_an_enumerated_property_will_pass_2_3.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Pset_WallCommon',$,(#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYENUMERATION('Status',(IFCLABEL('NEW'),IFCLABEL('EXISTING'),IFCLABEL('DEMOLISH'),IFCLABEL('TEMPORARY'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$); +#11=IFCPROPERTYENUMERATEDVALUE('Status',$,(IFCLABEL('EXISTING'),IFCLABEL('DEMOLISH')),#10); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ids new file mode 100644 index 000000000..1ff55a322 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ids @@ -0,0 +1,31 @@ + + + + Booleans must be specified as lowercase strings 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + false + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ifc new file mode 100644 index 000000000..8b248e161 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-booleans_must_be_specified_as_lowercase_strings_2_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCBOOLEAN(.F.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ids new file mode 100644 index 000000000..66c9c729b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ids @@ -0,0 +1,31 @@ + + + + Dates are treated as strings 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 2022-01-01 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ifc new file mode 100644 index 000000000..acde474a2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-dates_are_treated_as_strings_1_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCDATE('2022-01-01'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ids new file mode 100644 index 000000000..e9bf1ebca --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ids @@ -0,0 +1,31 @@ + + + + Durations are treated as strings 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + PT16H + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ifc new file mode 100644 index 000000000..09eae17ca --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-durations_are_treated_as_strings_2_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCDURATION('PT16H'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ids new file mode 100644 index 000000000..e9525c188 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ids @@ -0,0 +1,36 @@ + + + + If multiple properties are matched, all values must satisfy requirements 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ifc new file mode 100644 index 000000000..733208718 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-if_multiple_properties_are_matched__all_values_must_satisfy_requirements_1_2.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10,#11)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foobar',$,IFCLABEL('x'),$); +#11=IFCPROPERTYSINGLEVALUE('Foobaz',$,IFCLABEL('y'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ids new file mode 100644 index 000000000..53ddfb6f4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ids @@ -0,0 +1,31 @@ + + + + Integer values are checked using type casting 1/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 42 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ifc new file mode 100644 index 000000000..fb523253c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-integer_values_are_checked_using_type_casting_1_4.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCINTEGER(42),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ids new file mode 100644 index 000000000..6ebb78f81 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ids @@ -0,0 +1,28 @@ + + + + Material properties are supported under IFC2X3 via extended material properties + Generated via code automation in the Ids Repository on github. + + + + + + + IFCMATERIAL + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ifc new file mode 100644 index 000000000..51992321a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc2x3_via_extendedmaterialproperties.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +#2=IFCMATERIAL('Concrete'); +#3=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +#4=IFCEXTENDEDMATERIALPROPERTIES(#2,(#3),$,'Custom_Pset'); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ids new file mode 100644 index 000000000..b25dfea68 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ids @@ -0,0 +1,28 @@ + + + + Material properties are supported under IFC4 via IfcMaterialProperties + Generated via code automation in the Ids Repository on github. + + + + + + + IFCMATERIAL + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ifc new file mode 100644 index 000000000..f2e69271d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-material_properties_are_supported_under_ifc4_via_ifcmaterialproperties.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +#2=IFCMATERIAL('Concrete',$,$); +#3=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +#4=IFCMATERIALPROPERTIES('Custom_Pset',$,(#3),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ids new file mode 100644 index 000000000..748a1a30a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ids @@ -0,0 +1,31 @@ + + + + Measures are used to specify an IFC data type 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 2 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ifc new file mode 100644 index 000000000..80e7303c8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-measures_are_used_to_specify_an_ifc_data_type_2_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCTIMEMEASURE(2.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ids new file mode 100644 index 000000000..e4502fa95 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ids @@ -0,0 +1,31 @@ + + + + Non-ascii characters are treated without encoding + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + ♫Don'tÄrgerhôtelЊет + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ifc new file mode 100644 index 000000000..a9d32b3ca --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-non_ascii_characters_are_treated_without_encoding.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('\X2\266B\X0\Don''t\X2\00C4\X0\rgerh\X2\00F4\X0\tel\X2\040A04350442\X0\'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids new file mode 100644 index 000000000..80bbc432e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ids @@ -0,0 +1,31 @@ + + + + Only specifically formatted numbers are allowed 3/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1.2345e3 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc new file mode 100644 index 000000000..8cadfb66f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_3_4.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(1234.5),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids new file mode 100644 index 000000000..f51a300e5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ids @@ -0,0 +1,31 @@ + + + + Only specifically formatted numbers are allowed 4/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1.2345E3 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc new file mode 100644 index 000000000..8cadfb66f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-only_specifically_formatted_numbers_are_allowed_4_4.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(1234.5),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ids new file mode 100644 index 000000000..e055abea5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ids @@ -0,0 +1,31 @@ + + + + Predefined properties are supported but discouraged 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCDOOR + + + + + + + Foo_Bar + + + PanelOperation + + + SWINGING + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ifc new file mode 100644 index 000000000..599e17c27 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-predefined_properties_are_supported_but_discouraged_1_2.ifc @@ -0,0 +1,18 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCDOOR('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$,$,$,$,$); +#8=IFCDOORPANELPROPERTIES('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,$,.SWINGING.,$,.LEFT.,$); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ids new file mode 100644 index 000000000..361eebfec --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ids @@ -0,0 +1,28 @@ + + + + Project properties are supported under IFC2X3 via IfcObject + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPROJECT + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ifc new file mode 100644 index 000000000..0ae6973b5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc2x3_via_ifcobject.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +#2=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +#3=IFCPROPERTYSET('03z7JP9zr2w9rkiQlFGgOv',$,'Custom_Pset',$,(#2)); +#4=IFCRELDEFINESBYPROPERTIES('0N9$lcz4H1lgXGBV5jUras',$,$,$,(#1),#3); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ids new file mode 100644 index 000000000..711ff0447 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ids @@ -0,0 +1,28 @@ + + + + Project properties are supported under IFC4 via IfcContext + Generated via code automation in the Ids Repository on github. + + + + + + + IFCPROJECT + + + + + + + Custom_Pset + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ifc new file mode 100644 index 000000000..600a65104 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-project_properties_are_supported_under_ifc4_via_ifccontext.ifc @@ -0,0 +1,13 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2026-08-05T11:36:31',(''),(''),'IfcOpenShell 0.8.5-1c5b825','IfcOpenShell 0.8.5-1c5b825',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'P',$,$,$,$,$,$); +#2=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +#3=IFCPROPERTYSET('2L4MWmten4V8zSRSFndPUu',$,'Custom_Pset',$,(#2)); +#4=IFCRELDEFINESBYPROPERTIES('3MNYCUYuD3UQxvKNqSBUpZ',$,$,$,(#1),#3); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ids new file mode 100644 index 000000000..ff091c5a3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ids @@ -0,0 +1,28 @@ + + + + Properties can be inherited from the type 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ifc new file mode 100644 index 000000000..ce8dca618 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_1_2.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCWALLTYPE('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,(#10),$,$,$,.ELEMENTEDWALL.); +#9=IFCRELDEFINESBYTYPE('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSET('0WTUhjMwvT39YBFH2pryoM',$,'Foo_Bar',$,(#11)); +#11=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ids new file mode 100644 index 000000000..539010ca0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ids @@ -0,0 +1,28 @@ + + + + Properties can be inherited from the type 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALLTYPE + + + + + + + Foo_Bar + + + Foo + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ifc new file mode 100644 index 000000000..ce8dca618 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_inherited_from_the_type_2_2.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCWALLTYPE('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,(#10),$,$,$,.ELEMENTEDWALL.); +#9=IFCRELDEFINESBYTYPE('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSET('0WTUhjMwvT39YBFH2pryoM',$,'Foo_Bar',$,(#11)); +#11=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ids new file mode 100644 index 000000000..6a3c87122 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ids @@ -0,0 +1,31 @@ + + + + Properties can be overriden by an occurrence 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + Bar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ifc new file mode 100644 index 000000000..103edaac9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-properties_can_be_overriden_by_an_occurrence_1_2.ifc @@ -0,0 +1,23 @@ +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=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#2,#5,#3,#4)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCWALLTYPE('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,(#10),$,$,$,.ELEMENTEDWALL.); +#9=IFCRELDEFINESBYTYPE('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSET('0WTUhjMwvT39YBFH2pryoM',$,'Foo_Bar',$,(#11)); +#11=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Baz'),$); +#12=IFCPROPERTYSET('3b0AoFivPN6RDJO6UL_GfZ',$,'Foo_Bar',$,(#14)); +#13=IFCRELDEFINESBYPROPERTIES('1UJX0DW6PGVvNXUEmD0sBq',$,$,$,(#7),#12); +#14=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ids new file mode 100644 index 000000000..16d420843 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ids @@ -0,0 +1,31 @@ + + + + Real values are checked using type casting 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 42 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ifc new file mode 100644 index 000000000..fdab2b2d3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_1_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(42.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ids new file mode 100644 index 000000000..d16c4d079 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ids @@ -0,0 +1,31 @@ + + + + Real values are checked using type casting 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 42.0 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ifc new file mode 100644 index 000000000..fdab2b2d3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_2_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(42.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ids new file mode 100644 index 000000000..a0c0ffbe2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ids @@ -0,0 +1,31 @@ + + + + Real values are checked using type casting 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 42.3 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ifc new file mode 100644 index 000000000..136233c68 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-real_values_are_checked_using_type_casting_3_3.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(42.3),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ids new file mode 100644 index 000000000..cbf16a6a4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ids @@ -0,0 +1,31 @@ + + + + Specifying a value performs a case-sensitive match 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + Bar + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ifc new file mode 100644 index 000000000..ddb1455ef --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-specifying_a_value_performs_a_case_sensitive_match_1_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#5,#4,#2,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLABEL('Bar'),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ids b/packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ids new file mode 100644 index 000000000..2fee62e38 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ids @@ -0,0 +1,31 @@ + + + + Unit conversions shall take place to IDS-nominated standard units 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 2 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ifc new file mode 100644 index 000000000..0013b338e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/property/pass-unit_conversions_shall_take_place_to_ids_nominated_standard_units_2_2.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#4,#2,#5,#3)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCLENGTHMEASURE(2000.),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ids new file mode 100644 index 000000000..1f9473ba9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ids @@ -0,0 +1,31 @@ + + + + A bound can be exclusive 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ifc new file mode 100644 index 000000000..27e640b71 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_1_3.ifc @@ -0,0 +1,10 @@ +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=IFCSURFACESTYLEREFRACTION(0.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ids new file mode 100644 index 000000000..41a92ca40 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ids @@ -0,0 +1,31 @@ + + + + A bound can be exclusive 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ifc new file mode 100644 index 000000000..2cf8d18e5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_exclusive_3_3.ifc @@ -0,0 +1,10 @@ +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=IFCSURFACESTYLEREFRACTION(10.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ids new file mode 100644 index 000000000..b9fcc4f9e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ids @@ -0,0 +1,31 @@ + + + + A bound can be inclusive 4/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ifc new file mode 100644 index 000000000..96df5f1e1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-a_bound_can_be_inclusive_4_4.ifc @@ -0,0 +1,10 @@ +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=IFCSURFACESTYLEREFRACTION(100.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ids new file mode 100644 index 000000000..04a46a13d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ids @@ -0,0 +1,31 @@ + + + + An enumeration matches case sensitively 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ifc new file mode 100644 index 000000000..e6760e512 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_3_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Baz',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ids new file mode 100644 index 000000000..08478ffc6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ids @@ -0,0 +1,31 @@ + + + + An enumeration matches case sensitively 4/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ifc new file mode 100644 index 000000000..56e64391a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-an_enumeration_matches_case_sensitively_4_3.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-09-13T21:58:50',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'BAR',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ids new file mode 100644 index 000000000..693574c6f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ids @@ -0,0 +1,30 @@ + + + + Length checks can be used 1/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ifc new file mode 100644 index 000000000..5db3ed982 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-length_checks_can_be_used_1_2.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'ABC',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ids new file mode 100644 index 000000000..25d1b8f25 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ids @@ -0,0 +1,31 @@ + + + + Max and min length checks can be used 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ifc new file mode 100644 index 000000000..bceef7e19 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_1_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'A',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ids new file mode 100644 index 000000000..aea6e741b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ids @@ -0,0 +1,31 @@ + + + + Max and min length checks can be used 4/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ifc new file mode 100644 index 000000000..62841af1d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-max_and_min_length_checks_can_be_used_4_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'ABCD',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ids new file mode 100644 index 000000000..1726b0403 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ids @@ -0,0 +1,30 @@ + + + + Regex patterns can be used 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ifc new file mode 100644 index 000000000..59a2c50cb --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_can_be_used_3_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'A5',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ids new file mode 100644 index 000000000..cad7e3507 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ids @@ -0,0 +1,31 @@ + + + + Regex patterns work in OR 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ifc new file mode 100644 index 000000000..5a0cbca55 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/fail-regex_patterns_work_in_OR_3_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'XY99',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ids new file mode 100644 index 000000000..8413e5778 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ids @@ -0,0 +1,31 @@ + + + + A bound can be exclusive 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ifc new file mode 100644 index 000000000..c89859975 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_exclusive_2_3.ifc @@ -0,0 +1,10 @@ +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=IFCSURFACESTYLEREFRACTION(5.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ids new file mode 100644 index 000000000..315bb6064 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ids @@ -0,0 +1,31 @@ + + + + A bound can be inclusive 1/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ifc new file mode 100644 index 000000000..27e640b71 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_1_4.ifc @@ -0,0 +1,10 @@ +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=IFCSURFACESTYLEREFRACTION(0.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ids new file mode 100644 index 000000000..baa75d03a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ids @@ -0,0 +1,31 @@ + + + + A bound can be inclusive 2/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ifc new file mode 100644 index 000000000..c89859975 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_2_4.ifc @@ -0,0 +1,10 @@ +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=IFCSURFACESTYLEREFRACTION(5.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ids new file mode 100644 index 000000000..a65e3a4e2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ids @@ -0,0 +1,31 @@ + + + + A bound can be inclusive 3/4 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSURFACESTYLEREFRACTION + + + + + + + RefractionIndex + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ifc new file mode 100644 index 000000000..2cf8d18e5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-a_bound_can_be_inclusive_3_4.ifc @@ -0,0 +1,10 @@ +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=IFCSURFACESTYLEREFRACTION(10.,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ids new file mode 100644 index 000000000..67b74fd93 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ids @@ -0,0 +1,31 @@ + + + + An enumeration matches case sensitively 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ifc new file mode 100644 index 000000000..f07aedd4c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_1_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ids new file mode 100644 index 000000000..b8bc8c749 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ids @@ -0,0 +1,31 @@ + + + + An enumeration matches case sensitively 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ifc new file mode 100644 index 000000000..074e00feb --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-an_enumeration_matches_case_sensitively_2_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Bar',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ids new file mode 100644 index 000000000..5ca03d802 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ids @@ -0,0 +1,30 @@ + + + + Length checks can be used 2/2 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ifc new file mode 100644 index 000000000..01ad0926d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-length_checks_can_be_used_2_2.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'AB',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ids new file mode 100644 index 000000000..8999aaa7d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ids @@ -0,0 +1,31 @@ + + + + Max and min length checks can be used 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ifc new file mode 100644 index 000000000..01ad0926d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_2_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'AB',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ids new file mode 100644 index 000000000..d03562364 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ids @@ -0,0 +1,31 @@ + + + + Max and min length checks can be used 3/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ifc new file mode 100644 index 000000000..5db3ed982 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-max_and_min_length_checks_can_be_used_3_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'ABC',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ids new file mode 100644 index 000000000..32b203a90 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ids @@ -0,0 +1,30 @@ + + + + Regex patterns can be used 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ifc new file mode 100644 index 000000000..6f7619450 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_1_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'WT01',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ids new file mode 100644 index 000000000..a9504cc3c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ids @@ -0,0 +1,30 @@ + + + + Regex patterns can be used 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ifc new file mode 100644 index 000000000..5a0cbca55 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_can_be_used_2_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'XY99',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ids new file mode 100644 index 000000000..9af55192b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ids @@ -0,0 +1,31 @@ + + + + Regex patterns work in OR 1/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ifc new file mode 100644 index 000000000..5a0cbca55 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_1_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'XY99',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ids b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ids new file mode 100644 index 000000000..df65c8afa --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ids @@ -0,0 +1,31 @@ + + + + Regex patterns work in OR 2/3 + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Name + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ifc b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ifc new file mode 100644 index 000000000..5a0cbca55 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/restriction/pass-regex_patterns_work_in_OR_2_3.ifc @@ -0,0 +1,10 @@ +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=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'XY99',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids new file mode 100644 index 000000000..bf7e96b5b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative high number lower bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1000000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc new file mode 100644 index 000000000..22e98e475 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-1000001.0000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids new file mode 100644 index 000000000..cfb7d5bc0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative high number upper bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1000000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc new file mode 100644 index 000000000..0dd2a07dd --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-999998.9999989),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids new file mode 100644 index 000000000..7b03a448c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative low number lower bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc new file mode 100644 index 000000000..825521c34 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.00000110000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids new file mode 100644 index 000000000..5bd53399d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative low number upper bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc new file mode 100644 index 000000000..90bc9e7de --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.00000090000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids new file mode 100644 index 000000000..39a6ffcb1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative one lower bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc new file mode 100644 index 000000000..7116dccdc --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-1.00000200001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids new file mode 100644 index 000000000..8d8d15e24 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative one upper bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc new file mode 100644 index 000000000..5fd5947f2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.9999979),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ids new file mode 100644 index 000000000..3628fdaf9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point one lower bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ifc new file mode 100644 index 000000000..a39367c8c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.9999979),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ids new file mode 100644 index 000000000..252a23c36 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point one upper bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ifc new file mode 100644 index 000000000..88d72b471 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_one_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(1.0000021),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids new file mode 100644 index 000000000..9141fcdf1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive high number lower bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 100000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc new file mode 100644 index 000000000..4e81af3e4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(99999.8999989),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids new file mode 100644 index 000000000..509a3dcf0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive high number upper bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 100000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc new file mode 100644 index 000000000..ec5375685 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(100000.1000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids new file mode 100644 index 000000000..6eb7c4233 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive low number lower bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc new file mode 100644 index 000000000..4caa2e0ff --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.00000090000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids new file mode 100644 index 000000000..f30fc2bca --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive low number upper bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc new file mode 100644 index 000000000..3dde171af --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.00000110000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids new file mode 100644 index 000000000..637bac0d4 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range greater than zero exclusive fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc new file mode 100644 index 000000000..729738ca5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.000000),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids new file mode 100644 index 000000000..d30bb7b5a --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range greater than zero inclusive fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc new file mode 100644 index 000000000..e5482ac2d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.0000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids new file mode 100644 index 000000000..031c185f1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range lower than zero exclusive fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc new file mode 100644 index 000000000..729738ca5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.000000),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids new file mode 100644 index 000000000..33101ee7d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range lower than zero inclusive fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc new file mode 100644 index 000000000..b0d3573a6 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.00000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ids new file mode 100644 index 000000000..712c902f7 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point zero lower bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ifc new file mode 100644 index 000000000..23b3cdf52 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.0000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ids new file mode 100644 index 000000000..fd8a783e0 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point zero upper bound fail + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ifc new file mode 100644 index 000000000..069e37ca2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/fail-comparison_tolerance_for_floating_point_zero_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.0000011),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids new file mode 100644 index 000000000..2e40739a2 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative high number lower bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1000000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc new file mode 100644 index 000000000..1f618caa7 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-1000001.0000010000),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids new file mode 100644 index 000000000..0309e492b --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative high number upper bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1000000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc new file mode 100644 index 000000000..17be21473 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_high_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-999998.999999),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids new file mode 100644 index 000000000..fe6748aa5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative low number lower bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc new file mode 100644 index 000000000..46df30b28 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.0000011000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids new file mode 100644 index 000000000..11fb951b8 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative low number upper bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc new file mode 100644 index 000000000..b45a3ff45 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_low_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.0000009000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids new file mode 100644 index 000000000..1aa4fb42e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative one lower bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc new file mode 100644 index 000000000..2263b2b83 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-1.0000020000),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids new file mode 100644 index 000000000..f28a593fa --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point negative one upper bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + -1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc new file mode 100644 index 000000000..e4ab477d1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_negative_one_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.999998),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ids new file mode 100644 index 000000000..d4a720d9e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point one lower bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ifc new file mode 100644 index 000000000..5034e4e34 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.999998),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ids new file mode 100644 index 000000000..0d00d6bc5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point one upper bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 1. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ifc new file mode 100644 index 000000000..e91cab3e9 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_one_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(1.000002),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids new file mode 100644 index 000000000..bf4652d3d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive high number lower bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 100000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc new file mode 100644 index 000000000..f5130060e --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(99999.899999),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids new file mode 100644 index 000000000..1f2bd6bde --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive high number upper bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 100000. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc new file mode 100644 index 000000000..04a50ef1d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_high_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(100000.100001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids new file mode 100644 index 000000000..36010750c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive low number lower bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc new file mode 100644 index 000000000..b752f6a09 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.0000009000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids new file mode 100644 index 000000000..30460556f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point positive low number upper bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0.0000001 + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc new file mode 100644 index 000000000..64567bc3c --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_positive_low_number_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.0000011000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids new file mode 100644 index 000000000..8152a88ee --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range greater than zero exclusive pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc new file mode 100644 index 000000000..806b2929f --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_exclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.0000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids new file mode 100644 index 000000000..eb7e1e6b1 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range greater than zero inclusive pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc new file mode 100644 index 000000000..729738ca5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_greater_than_zero_inclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.000000),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids new file mode 100644 index 000000000..fc2e3c2ed --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range lower than zero exclusive pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc new file mode 100644 index 000000000..e5482ac2d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_exclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.0000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids new file mode 100644 index 000000000..a7a26847d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ids @@ -0,0 +1,33 @@ + + + + Comparison tolerance for floating point range lower than zero inclusive pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + + + + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc new file mode 100644 index 000000000..729738ca5 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_range_lower_than_zero_inclusive.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.000000),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ids new file mode 100644 index 000000000..a1195e8ac --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point zero lower bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ifc new file mode 100644 index 000000000..420a4afb3 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_lower_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(-0.000001),$); +ENDSEC; +END-ISO-10303-21; diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ids b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ids new file mode 100644 index 000000000..154fe0b8d --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ids @@ -0,0 +1,31 @@ + + + + Comparison tolerance for floating point zero upper bound pass + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + + Foo_Bar + + + Foo + + + 0. + + + + + + \ No newline at end of file diff --git a/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ifc b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ifc new file mode 100644 index 000000000..2f61cd928 --- /dev/null +++ b/packages/core/tests/fixtures/ids-conformance/tolerance/pass-comparison_tolerance_for_floating_point_zero_upper_bound.ifc @@ -0,0 +1,19 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:43',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,'Foo_name',$,$,$,$,$,#6); +#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); +#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#6=IFCUNITASSIGNMENT((#3,#5,#4,#2)); +#7=IFCWALL('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,$,$,$,$,$); +#8=IFCPROPERTYSET('16MocU_IDOF8_x3Iqllz0d',$,'Foo_Bar',$,(#10)); +#9=IFCRELDEFINESBYPROPERTIES('1xdwj8qGXK4hzoNbvMdXJW',$,$,$,(#7),#8); +#10=IFCPROPERTYSINGLEVALUE('Foo',$,IFCREAL(0.000001),$); +ENDSEC; +END-ISO-10303-21; From 3ee4e68d77ff303042e40fdbe6e744af4a4f9878 Mon Sep 17 00:00:00 2001 From: Riho Kirss Date: Sat, 7 Nov 2026 21:31:23 +0200 Subject: [PATCH 11/11] fix(ids): skip empty selections and reject null property values --- .../IDSSpecifications/conformance.test.ts | 29 ++++++++++++++++--- .../IDSSpecifications/src/Specification.ts | 1 + .../IDSSpecifications/src/facets/Property.ts | 10 ++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/packages/core/src/openbim/IDSSpecifications/conformance.test.ts b/packages/core/src/openbim/IDSSpecifications/conformance.test.ts index 56ebc0884..6ea952df3 100644 --- a/packages/core/src/openbim/IDSSpecifications/conformance.test.ts +++ b/packages/core/src/openbim/IDSSpecifications/conformance.test.ts @@ -17,10 +17,29 @@ const files = fs /(^|\/)(pass|fail)-.*\.ids$/.test(name) && fs.existsSync(path.join(directory, name.replace(/\.ids$/, ".ifc"))), ); +const cases = files.map((name) => ({ + name, + label: name, + transform: (xml: string) => xml, +})); +cases.push({ + name: "property/fail-properties_with_a_null_value_fail.ids", + label: "null property without a datatype still fails", + transform: (xml) => xml.replace(' dataType="IFCLABEL"', ""), +}); +cases.push({ + name: "ids/pass-optional_specifications_may_still_pass_if_nothing_is_applicable.ids", + label: "requirements do not inspect unrelated objects when nothing applies", + transform: (xml) => + xml.replace( + "Waldo", + "Unrelated objects must not be checked", + ), +}); describe("IDS full conformance", () => { - it.each(files)( - "%s", - async (name) => { + it.each(cases)( + "$label", + async ({ name, transform }) => { const importer = new FRAGS.IfcImporter(); importer.wasm = { path: `${path.resolve(__dirname, "../../../../../node_modules/web-ifc")}/`, @@ -77,7 +96,9 @@ describe("IDS full conformance", () => { try { const specs = components .get(OBC.IDSSpecifications) - .load(fs.readFileSync(path.join(directory!, name), "utf8")); + .load( + transform(fs.readFileSync(path.join(directory!, name), "utf8")), + ); let pass = true; for (const spec of specs) if ( diff --git a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts index 8cc800d77..8c49b8e1f 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/Specification.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/Specification.ts @@ -126,6 +126,7 @@ export class IDSSpecification implements IDSSpecificationData { for (const ids of Object.values(entities)) applicable += ids.size; if ( + applicable === 0 || this.requirements.size === 0 || (skipProhibitedRequirements && this.maxOccurs === 0) ) { diff --git a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts index 356510de4..bc73b480e 100644 --- a/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts +++ b/packages/core/src/openbim/IDSSpecifications/src/facets/Property.ts @@ -444,7 +444,15 @@ export class IDSProperty extends IDSFacet { return pass; } - if (values.length === 0) return true; + if (values.length === 0) { + checks?.push({ + parameter: "Value", + currentValue: null, + pass: false, + requiredValue: this.value, + }); + return false; + } // IDSDocs: Values with a logical unknown always fail // if (valueAttr.type === 3 && valueAttr.value === 2) {