'- Is as_arg() and from_arg() implemented?
- Are they the inverse of each other?'

def test_as_arg(self):

    fnty = ir.FunctionType(ir.VoidType(), [])
    function = ir.Function(self.module, fnty, name='test_as_arg')
    builder = ir.IRBuilder()
    builder.position_at_end(function.append_basic_block())
    undef_value = ir.Constant(self.datamodel.get_value_type(), None)
    args = self.datamodel.as_argument(builder, undef_value)
    self.assertIsNot(args, NotImplemented, 'as_argument    returned    NotImplementedError')
    if isinstance(args, (tuple, list)):
        def recur_tuplize(args, func=None):
            for arg in args:
                if isinstance(arg, (tuple, list)):
                    (yield tuple(recur_tuplize(arg, func=func)))
                elif (func is None):
                    (yield arg)
                else:
                    (yield func(arg))
        argtypes = tuple(recur_tuplize(args, func=(lambda x: x.type)))
        exptypes = tuple(recur_tuplize(self.datamodel.get_argument_type()))
        self.assertEqual(exptypes, argtypes)
    else:
        self.assertEqual(args.type, self.datamodel.get_argument_type())
    rev_value = self.datamodel.from_argument(builder, args)
    self.assertEqual(rev_value.type, self.datamodel.get_value_type())
    builder.ret_void()
    materialized = ll.parse_assembly(str(self.module))
    str(materialized)
