def test_clone(self):
        """
        Should create a new generation by copying the fittest indivuals in
        the current generation
        """
        fit0 = [1, 2, 3, 4]
        pop = Population(individuals=fit0, fitness=fit0)

        sumfit = []
        for i in range(100):
            pop.clone()
            sumfit.append(np.sum(pop.fitness))

        self.assertGreater(np.max(sumfit), np.sum(fit0))

        # should not change shape of 1d array
        ind0 = np.random.rand(50)
        pop = Population(individuals=ind0, fitness=range(50))
        pop.clone()
        self.assertEqual(pop.individuals.shape, ind0.shape) 

        # should not change shape of multi-d array
        ind0 = np.random.rand(50, 5)
        pop = Population(individuals=ind0, fitness=range(50))
        pop.clone()
        self.assertEqual(pop.individuals.shape, ind0.shape)

        # should not produce NaNs
        ind0 = np.round(np.random.rand(100))
        pop = Population(individuals=ind0)
        for p in range(100):
            pop.clone()
            self.assertEqual(len(np.nonzero(np.isnan(pop.individuals))[0]), 0)