def test_crossover(self):
        """
        Should perform binary crossover on a subset of the population
        """
        ind0 = np.random.rand(4) 
        fit0 = np.arange(len(ind0))
        pop = Population(individuals=ind0, fitness=fit0)

        # should change some values
        pop.crossover(p=1.)
        count = 0
        for f0, f1 in zip(ind0, pop.individuals):
            if f0 != f1:
                count += 1

        self.assertGreater(count, 0)
        
        # should set fitness for changed individuals to nan
        self.assertGreater(len(pop.inew), 0)
        
        # should handle > 1d
        ind0 = np.random.rand(50, 10)
        pop = Population(individuals=ind0, fitness=range(50))

        pop.crossover(p=1.)
        self.assertGreater(len(pop.inew), 0)

        # should not change shape of individuals
        self.assertEqual(pop.individuals.shape, ind0.shape)

        # FIXME?? fails on np.log10(0) in power calc. in float2bin()
        ## should not produce NaNs
        ind0 = np.round(np.random.rand(100))
        pop = Population(individuals=ind0)
        for p in [0.1, 0.5, 1.]:
            pop.crossover(p=p)
            self.assertEqual(len(np.nonzero(np.isnan(pop.individuals))[0]), 0)