def test_adds_read_only_write_method_to_alias_of_alias_of_read_only(self): ir = self._make_ir("struct Foo:\n" " let x = z\n" " let z = y\n" " let y = 5\n") self.assertEqual([], write_inference.set_write_methods(ir)) field = ir.module[0].type[0].structure.field[0] self.assertTrue(field.write_method.read_only)
def test_adds_alias_write_method_to_alias_of_physical_field(self): ir = self._make_ir("struct Foo:\n" " let x = y\n" " 0 [+1] UInt y\n") self.assertEqual([], write_inference.set_write_methods(ir)) field = ir.module[0].type[0].structure.field[0] self.assertTrue(field.write_method.HasField("alias")) self.assertEqual( "y", field.write_method.alias.path[0].canonical_name.object_path[-1])
def test_adds_transform_write_method_to_base_value_field(self): ir = self._make_ir("struct Foo:\n" " 0 [+1] UInt x\n" " let y = x + 50\n") self.assertEqual([], write_inference.set_write_methods(ir)) field = ir.module[0].type[0].structure.field[1] transform = field.write_method.transform self.assertTrue(transform) self.assertEqual( "x", transform.destination.path[0].canonical_name.object_path[-1]) self.assertEqual(ir_pb2.Function.SUBTRACTION, transform.function_body.function.function) arg0, arg1 = transform.function_body.function.args self.assertEqual("$logical_value", arg0.builtin_reference.canonical_name.object_path[0]) self.assertEqual("50", arg1.constant.value)
def test_adds_transform_write_method_with_complex_auxiliary_subexpression( self): ir = self._make_ir("struct Foo:\n" " 0 [+1] UInt x\n" " let y = x - $max(Foo.$size_in_bytes, Foo.z)\n" " let z = 500\n") self.assertEqual([], write_inference.set_write_methods(ir)) field = ir.module[0].type[0].structure.field[1] transform = field.write_method.transform self.assertTrue(transform) self.assertEqual( "x", transform.destination.path[0].canonical_name.object_path[-1]) self.assertEqual(ir_pb2.Function.ADDITION, transform.function_body.function.function) args = transform.function_body.function.args self.assertEqual( "$logical_value", args[0].builtin_reference.canonical_name.object_path[0]) self.assertEqual(field.read_transform.function.args[1], args[1])
def test_adds_read_only_write_method_to_alias_of_parameter(self): ir = self._make_ir("struct Foo(x: UInt:8):\n" " let y = x\n") self.assertEqual([], write_inference.set_write_methods(ir)) field = ir.module[0].type[0].structure.field[0] self.assertTrue(field.write_method.read_only)
def test_adds_read_only_write_method_to_non_alias_virtual(self): ir = self._make_ir("struct Foo:\n" " let x = 5\n") self.assertEqual([], write_inference.set_write_methods(ir)) self.assertTrue( ir.module[0].type[0].structure.field[0].write_method.read_only)
def test_adds_physical_write_method(self): ir = self._make_ir("struct Foo:\n" " 0 [+1] UInt x\n") self.assertEqual([], write_inference.set_write_methods(ir)) self.assertTrue( ir.module[0].type[0].structure.field[0].write_method.physical)
def test_does_not_add_transform_write_method_for_parameter_target(self): ir = self._make_ir("struct Foo(x: UInt:8):\n" " let y = 50 + x\n") self.assertEqual([], write_inference.set_write_methods(ir)) field = ir.module[0].type[0].structure.field[0] self.assertEqual("read_only", field.write_method.WhichOneof("method"))