def _test_attack(self, classifier, x_test, y_test, targeted):
        """
        Test with the Pixel Attack
        :return:
        """
        x_test_original = x_test.copy()

        if targeted:
            # Generate random target classes
            class_y_test = np.argmax(y_test, axis=1)
            nb_classes = np.unique(class_y_test).shape[0]
            targets = np.random.randint(nb_classes, size=self.n_test)
            for i in range(self.n_test):
                if class_y_test[i] == targets[i]:
                    targets[i] -= 1
        else:
            targets = y_test

        for th in [None, 128]:
            for es in [0, 1]:
                df = PixelAttack(classifier, th=th, es=es, max_iter=20, targeted=targeted, verbose=False)
                x_test_adv = df.generate(x_test_original, targets)

                np.testing.assert_raises(AssertionError, np.testing.assert_array_equal, x_test, x_test_adv)
                self.assertFalse((0.0 == x_test_adv).all())

        # Check that x_test has not been modified by attack and classifier
        self.assertAlmostEqual(float(np.max(np.abs(x_test_original - x_test))), 0.0, delta=0.00001)

        Test with the Pixel Attack
        :return:
        
tests/attacks/test_pixel_attack.py