mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
import os
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
import ifcopenshell.express
|
|
|
|
sys.path.insert(0, os.path.dirname(ifcopenshell.express.__file__))
|
|
|
|
|
|
def _parse(schema_text):
|
|
with tempfile.NamedTemporaryFile(mode="w", suffix=".exp", delete=False) as f:
|
|
f.write(schema_text)
|
|
path = f.name
|
|
try:
|
|
return ifcopenshell.express.parse(path)
|
|
finally:
|
|
os.unlink(path)
|
|
cache = path + ".cache.dat"
|
|
if os.path.exists(cache):
|
|
os.unlink(cache)
|
|
|
|
|
|
class TestAggregateBounds(unittest.TestCase):
|
|
def test_literal_bounds_preserved(self):
|
|
"""After loading [1;3] -> (1, 3)?"""
|
|
s = _parse("SCHEMA t; ENTITY E; v : ARRAY [1:3] OF REAL; END_ENTITY; END_SCHEMA;")
|
|
agg = (
|
|
next(d for d in s.schema.declarations() if d.name() == "E")
|
|
.attributes()[0]
|
|
.type_of_attribute()
|
|
.as_aggregation_type()
|
|
)
|
|
self.assertEqual((agg.bound1(), agg.bound2()), (1, 3))
|
|
s.disown()
|
|
|
|
def test_unbounded_marker(self):
|
|
"""[0:?] -> (0, -1)?"""
|
|
s = _parse("SCHEMA t; ENTITY E; v : LIST [0:?] OF REAL; END_ENTITY; END_SCHEMA;")
|
|
agg = (
|
|
next(d for d in s.schema.declarations() if d.name() == "E")
|
|
.attributes()[0]
|
|
.type_of_attribute()
|
|
.as_aggregation_type()
|
|
)
|
|
# import pdb; pdb.set_trace()
|
|
self.assertEqual((agg.bound1(), agg.bound2()), (0, -1))
|
|
s.disown()
|
|
|
|
def test_voxel_grid_with_dynamic_bound_loads(self):
|
|
"""
|
|
Array that is an expression : [1:dim_x*dim_y*dim_z]
|
|
Parsing must not crash, Bbund must be (1, -1)
|
|
"""
|
|
s = _parse("""
|
|
SCHEMA t;
|
|
TYPE IfcBoolean = BOOLEAN; END_TYPE;
|
|
|
|
ENTITY IfcVoxelHolder;
|
|
NumberOfVoxelsX : INTEGER;
|
|
NumberOfVoxelsY : INTEGER;
|
|
NumberOfVoxelsZ : INTEGER;
|
|
Voxels : ARRAY [1:NumberOfVoxelsX*NumberOfVoxelsY*NumberOfVoxelsZ] OF IfcBoolean;
|
|
END_ENTITY;
|
|
END_SCHEMA;
|
|
""")
|
|
holder = next(d for d in s.schema.declarations() if d.name() == "IfcVoxelHolder")
|
|
voxels = holder.attributes()[-1].type_of_attribute().as_aggregation_type()
|
|
self.assertEqual((voxels.bound1(), voxels.bound2()), (1, -1))
|
|
s.disown()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|