code: def test_roll(
      *,
      dtype_value,
      shift,
      axis,
      test_flags,
      backend_fw,
      fn_name,
      on_device,
  ):
      value_dtype, value = dtype_value
      shift_dtype, shift_val = shift
  
      if shift_val[0].ndim == 0:  # If shift is an int
          shift_val = shift_val[0]  # Drop shift's dtype (always int32)
          axis = axis[0]  # Extract an axis value from the tuple
      else:
          # Drop shift's dtype (always int32) and convert list to tuple
          shift_val = tuple(shift_val[0].tolist())
  
      helpers.test_function(
          input_dtypes=value_dtype + shift_dtype,
          test_flags=test_flags,
          backend_to_test=backend_fw,
          fn_name=fn_name,
          on_device=on_device,
          x=value[0],
          shift=shift_val,
          axis=axis,
          xs_grad_idxs=[[0, 0]],
      )
  
imports: import numpy
  from hypothesis import strategies, assume
  import ivy
  import ivy_tests.test_ivy.helpers
  from ivy_tests.test_ivy.helpers import handle_test
label_desc: Use image node_id 18 for calling a global function with example usage: test_roll() without return types