@@ -120,7 +120,8 @@ def define(self, dimensions):
120120 for m , o in zip (mappers , ops ):
121121 check_op (m , o )
122122
123- # FIXME: Currently throws an error
123+ # FIXME: Currently throws an error - probably a missing handler for GuardFactor
124+ # in Uxreplace
124125 # def test_factor(self):
125126 # """Test that ConditionalDimensions can have their symbolic factors specialized"""
126127 # size = 16
@@ -141,6 +142,28 @@ def define(self, dimensions):
141142 # assert ci.symbolic_factor.name not in str(op1.ccode)
142143 # assert "if ((i)%(4) == 0)" in str(op1.ccode)
143144
144- # Spacings
145+ def test_spacing (self ):
146+ """Test that grid spacings can be specialized"""
147+ grid = Grid (shape = (11 ,))
148+ f = Function (name = 'f' , grid = grid )
149+
150+ op0 = Operator (Eq (f , f .dx ))
151+
152+ mapper = {grid .dimensions [0 ].spacing : sympy .Float (grid .spacing [0 ])}
153+ op1 = Specializer (mapper ).visit (op0 )
154+
155+ assert grid .dimensions [0 ].spacing not in op1 .parameters
156+ assert grid .dimensions [0 ].spacing .name not in str (op1 .ccode )
157+ assert "/1.0e-1F;" in str (op1 .ccode )
145158
146159 # Strides/sizes
160+ def test_strides (self ):
161+ """Test that strides and sizes generated for linearization can be specialized"""
162+ grid = Grid (shape = (11 , 11 ))
163+
164+ f = TimeFunction (name = 'f' , grid = grid , space_order = 2 )
165+
166+ op0 = Operator (Eq (f .forward , f .dx2 ),
167+ opt = ('advanced' , {'expand' : True , 'linearize' : True }))
168+
169+ from IPython import embed ; embed ()
0 commit comments