def METHOD_NAME(
    test_case, batchsize, in_feature, dtype, device,
):
    x = np.random.uniform(low=-1, high=1, size=(batchsize, in_feature))
    weight = np.random.uniform(low=-1, high=1, size=(in_feature, in_feature))
    bias = np.random.uniform(low=-1, high=1, size=(in_feature))
    x0 = np.random.uniform(low=-1, high=1, size=(batchsize, in_feature))
    fused_x = flow.tensor(x, dtype=dtype, device=device, requires_grad=True)
    naive_x = flow.tensor(x, dtype=dtype, device=device, requires_grad=True)
    fused_weight = flow.tensor(weight, dtype=dtype, device=device, requires_grad=True)
    naive_weight = flow.tensor(weight, dtype=dtype, device=device, requires_grad=True)
    fused_bias = flow.tensor(bias, dtype=dtype, device=device, requires_grad=True)
    naive_bias = flow.tensor(bias, dtype=dtype, device=device, requires_grad=True)
    fused_x0 = flow.tensor(x0, dtype=dtype, device=device, requires_grad=True)
    naive_x0 = flow.tensor(x0, dtype=dtype, device=device, requires_grad=True)
    fused_out = flow._C.fused_cross_feature_interaction(
        fused_x, fused_weight, fused_x0, fused_bias, "matrix"
    )
    naive_out = (
        flow._C.bias_add(
            flow._C.matmul(naive_x, naive_weight, transpose_b=True), naive_bias, axis=1
        )
        * naive_x0
        + naive_x
    )
    total_out = fused_out.sum() + naive_out.sum()
    total_out.backward()
    test_case.assertTrue(
        np.allclose(fused_out.numpy(), naive_out.numpy(), atol=1e-4, rtol=1e-4)
    )
    test_case.assertTrue(
        np.allclose(fused_x.grad.numpy(), naive_x.grad.numpy(), atol=1e-4, rtol=1e-4,)
    )
    test_case.assertTrue(
        np.allclose(
            fused_weight.grad.numpy(), naive_weight.grad.numpy(), atol=1e-4, rtol=1e-4,
        )
    )
    test_case.assertTrue(
        np.allclose(fused_x0.grad.numpy(), naive_x0.grad.numpy(), atol=1e-4, rtol=1e-4,)
    )
    test_case.assertTrue(
        np.allclose(
            fused_bias.grad.numpy(), naive_bias.grad.numpy(), atol=1e-4, rtol=1e-4,
        )
    )