def METHOD_NAME(self):
    """Test on CPU that the Adasum correctly computes 2D tensors."""
    hvd.init()
    # TODO support non-MPI Adasum operation
    if not hvd.mpi_enabled():
        self.skipTest("MPI not enabled")
    size = hvd.size()
    # TODO support testing with non-power 2 ranks
    if not is_power2(size):
        self.skipTest("MPI rank is not power of 2")
    rank = hvd.rank()
    rank_tensors = []
    for _ in range(size):
        rank_tensors.append([np.random.random_sample((2,2)), np.random.random_sample((2,2))])
    answer = reference_tree_reduction(rank_tensors, size)
    for dtype in [tf.float16, tf.float32, tf.float64]:
        with tf.device("/cpu:0"):
            tensors = map(tf.constant, rank_tensors[rank])
            # cast to the corresponding dtype
            tensors = map(lambda tensor: tf.cast(tensor, dtype), tensors)
            # and away we go: do reduction
            reduced_tensors = [
                self.evaluate(hvd.allreduce(tensor, op=hvd.Adasum))
                for tensor in tensors
            ]
            # cast expected result to the type of the tensorflow values
            np_type = dtype.as_numpy_dtype
            tmp = [t.astype(np_type) for t in answer]
            self.assertAllCloseAccordingToType(tmp, reduced_tensors)