def METHOD_NAME(self):
    def check(shape, slices, i_to_vs="", i_to_o="", o_shape=""):
        # print(slices)
        x = jt.random(shape)
        with jt.log_capture_scope(log_vprefix="getitem=999") as logs:
            a = x.getitem(slices)
            a.sync()
        b = x.data[slices]
        bshape = b.shape if len(b.shape) else (1,)
        assert a.shape == bshape, (a.shape, bshape)
        s = logs[-1]['msg']
        assert "i_to_vs: "+i_to_vs in s
        assert "i_to_o: "+i_to_o in s
        assert "o_shape: "+o_shape in s
        aa = a.numpy()
        assert (aa==b).all(), (aa, b)
        y = x.numpy()
        v = jt.random(a.shape)
        z = x.setitem(slices, v)
        y[slices] = v.data
        assert (z.data==y).all(), (z.data, y, v.data, x.data)
        # test_setitem broadcast
        adim = len(a.shape)
        for mask in range(1<<adim):
            new_shape = list(a.shape)
            for i in range(adim):
                if (mask>>i)&1:
                    new_shape[i] = 1
            y = x.numpy()
            v = jt.random(new_shape)
            z = x.setitem(slices, v)
            y[slices] = v.data
            assert (z.data==y).all(), (z.data, y, v.data, x.data)
    # TODO: when slice same row/col many times and assign value, numpy will retain the last value but we assign their sum. eg: check([3,3,3,3], ([[0,1,1]],slice(None),[[1],[2],[0]],1))
    check([3], (1), "[0,]", "[-1,]", "[]")
    check([3,3,3,3], ([[0],[1]],slice(None),[1,2],1), "[0,-1,2,3,]", "[-1,2,-1,-1,]", "[2,2,3,]")
    check([3,3,3,3], (slice(None),slice(None),slice(None),slice(None)), "[-1,-2,-2,-2,]", "[0,0,0,0,]", "[81,]")
    check([3,3,3,3], ([0,1],[0,1],[0,1],[0,1]), "[0,1,2,3,]", "[-1,-1,-1,-1,]", "[2,]")
    check([3,3,3,3], ([0,1],-2,slice(None),[0,1]), "[0,1,-1,3,]", "[-1,-1,1,-1,]", "[2,3,]")
    check([3,3,3,3], ([0,1],slice(1,2,2),[1,2],1), "[0,1,2,3,]", "[-1,1,-1,-1,]", "[2,1,]")
    check([3,3,3,3], ([0,1],slice(None),[1,2],1), "[0,-1,2,3,]", "[-1,1,-1,-1,]", "[2,3,]")
    check([3,3,3,3], (slice(1,10,1),...,slice(2,None,-1)), "[0,-1,-2,2,]", "[0,1,1,2,]", "[2,9,3,]")
    check([10,10,10,10], (slice(1,None,2),slice(-1,None,2),[1,2],-4), "[0,1,2,3,]", "[0,1,-1,-1,]", "")
    check([20], 0, "[0,]", "[-1,]", "[]")
    check([20], 10, "[0,]", "[-1,]", "[]")
    check([20], -10, "[0,]", "[-1,]", "[]")
    check([10,10,10,10], 1, "[0,-1,-2,-2,]", "[-1,0,0,0,]", "[1000,]")
    check([10,10,10,10], (1,slice(None),2), "[0,-1,2,-1,]", "[-1,0,-1,1,]", "")
    check([10,10,10,10], (-2,slice(None),2,slice(1,9,2)), "[0,-1,2,3,]", "[-1,0,-1,1,]")