def METHOD_NAME(test_case):
    shape = (8, 8)
    sbp = [flow.sbp.split(0), flow.sbp.broadcast]
    for device in ["cpu", "cuda"]:
        placement = flow.placement(device, [[0, 1], [2, 3]])
        for _, fn in _fn_param.items():
            flow.manual_seed(233)
            local_tensor = fn(shape, placement, sbp).to_local().cpu()
            # broadcast local data for each rank
            rank_to_tensor = [
                local_tensor
                if rank_id == flow.env.get_rank()
                else flow.empty(local_tensor.shape, dtype=local_tensor.dtype)
                for rank_id in range(4)
            ]
            for rank_id in range(4):
                flow.comm.broadcast(rank_to_tensor[rank_id], rank_id)
            np_local = [x.numpy() for x in rank_to_tensor]
            # rank0 == rank1
            test_case.assertTrue(np.array_equal(np_local[0], np_local[1]))
            # rank2 == rank3
            test_case.assertTrue(np.array_equal(np_local[2], np_local[3]))
            # rank0 != rank2
            test_case.assertFalse(np.array_equal(np_local[0], np_local[2]))
            # rank1 != rank3
            test_case.assertFalse(np.array_equal(np_local[1], np_local[3]))