Пример #1
0
 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)
Пример #2
0
 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])
Пример #3
0
 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)
Пример #4
0
 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])
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
 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"))