code: def test_range(self, unroll):
      @jit.rawkernel()
      def f(x):
          tid = jit.threadIdx.x + jit.blockDim.x * jit.blockIdx.x
          y = x[tid]
          # workaround: can't use "is" here...
          if unroll == None:  # noqa: E711
              for i in jit.range(5):
                  y += 2
          else:
              for i in jit.range(5, unroll=unroll):
                  y += 2
          x[tid] = y
  
      x = testing.shaped_random((30,), dtype=numpy.float32, seed=0)
      y = x.copy()
      f[3, 10](x)
      assert (x == y + 10).all()
      if unroll is True:
          assert "#pragma unroll\n" in f.cached_code
      elif unroll is False:
          assert "#pragma unroll(1)\n" in f.cached_code
      elif unroll is None:
          assert "unroll" not in f.cached_code
      elif unroll >= 0:
          assert f"#pragma unroll({unroll})\n" in f.cached_code
  
imports: import numpy
  import pytest
  import cupy
  from cupyx import jit
  from cupy import testing
  from cupy.cuda import device
  from cupy.cuda import runtime
label_desc: Use image node_id 50 for calling the TestRaw obj's underlying member method code with example usage: obj.test_range(unroll) without return types