def test_given_a_basic_mapping_yields_expected_results_with_scale_change(self):
        height = 1.0
        lower_points = {
                (1.0, 1.0): (1.0, 1.0),
                (0.0, 1.0): (-1.0, 1.0),
                (1.0, 0.0): (1.0, -1.0),
                (0.0, 0.0): (-1.0, -1.0)
                }
        upper_points = {
                (1.0, 1.0): (1.0, 1.0),
                (0.0, 1.0): (-1.0, 1.0),
                (1.0, 0.0): (1.0, -1.0),
                (0.0, 0.0): (-1.0, -1.0)
                }
        scale = 0.5
        transformer = HomogenousTransformer(scale, height, lower_points, upper_points)
        test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0]]
        expected_points_pre = [(0.75, 0.75), (0.25, 0.25), (0.5, 0.5), (0.625, 0.625)]
        expected_points_post = [(1.0, 1.0), (0.0, 0.0), (0.5, 0.5), (0.75, 0.75)]

        actual_points_pre = [transformer.transform(point) for point in test_points]
        transformer.set_scale(1.0)
        actual_points_post = [transformer.transform(point) for point in test_points]

        self.assertEquals(expected_points_pre, actual_points_pre)
        self.assertEquals(expected_points_post, actual_points_post)
    def test_given_a_basic_mapping_yields_expected_results_with_scale_change(
            self):
        height = 1.0
        lower_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        upper_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        scale = 0.5
        transformer = HomogenousTransformer(scale, height, lower_points,
                                            upper_points)
        test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0],
                       [0.5, 0.5, 0.0]]
        expected_points_pre = [(0.75, 0.75), (0.25, 0.25), (0.5, 0.5),
                               (0.625, 0.625)]
        expected_points_post = [(1.0, 1.0), (0.0, 0.0), (0.5, 0.5),
                                (0.75, 0.75)]

        actual_points_pre = [
            transformer.transform(point) for point in test_points
        ]
        transformer.set_scale(1.0)
        actual_points_post = [
            transformer.transform(point) for point in test_points
        ]

        self.assertEquals(expected_points_pre, actual_points_pre)
        self.assertEquals(expected_points_post, actual_points_post)
    def test_given_a_basic_mapping_yields_expected_results(self):
        height = 1.0
        lower_points = {
                (1.0, 1.0): (1.0, 1.0),
                (0.0, 1.0): (-1.0, 1.0),
                (1.0, 0.0): (1.0, -1.0),
                (0.0, 0.0): (-1.0, -1.0)
                }
        upper_points = {
                (1.0, 1.0): (1.0, 1.0),
                (0.0, 1.0): (-1.0, 1.0),
                (1.0, 0.0): (1.0, -1.0),
                (0.0, 0.0): (-1.0, -1.0)
                }
        scale = 1.0
        transformer = HomogenousTransformer(scale, height, lower_points, upper_points)

        test_points = [
            [1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0],
            [1.0, 1.0, 2.5], [-1.0, -1.0, 2.5], [0.0, 0.0, 2.5], [0.5, 0.5, 2.5],
            [1.0, 1.0, 5.0], [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0]]

        expected_points = [((x + 1.0) / 2.0, (y + 1.0) / 2.0) for (x, y, z) in test_points]
        actual_points = [transformer.transform(point) for point in test_points]

        self.assertEquals(expected_points, actual_points)
    def test_given_a_basic_mapping_yields_expected_results(self):
        height = 1.0
        lower_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        upper_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        scale = 1.0
        transformer = HomogenousTransformer(scale, height, lower_points,
                                            upper_points)

        test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0],
                       [0.5, 0.5, 0.0], [1.0, 1.0, 2.5], [-1.0, -1.0, 2.5],
                       [0.0, 0.0, 2.5], [0.5, 0.5, 2.5], [1.0, 1.0, 5.0],
                       [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0]]

        expected_points = [((x + 1.0) / 2.0, (y + 1.0) / 2.0)
                           for (x, y, z) in test_points]
        actual_points = [transformer.transform(point) for point in test_points]

        self.assertEquals(expected_points, actual_points)
    def test_given_a_basic_mapping_yields_expected_results_with_scale(self):
        height = 1.0
        lower_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        upper_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        scale = 0.5
        transformer = HomogenousTransformer(scale, height, lower_points,
                                            upper_points)
        test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0],
                       [0.5, 0.5, 0.0]]
        expected_points = [(0.75, 0.75), (0.25, 0.25), (0.5, 0.5),
                           (0.625, 0.625)]

        actual_points = [transformer.transform(point) for point in test_points]

        #self.assertEquals(expected_points, actual_points)
        for idx in range(0, len(expected_points)):
            self.assertAlmostEquals(expected_points[idx][0],
                                    actual_points[idx][0])
            self.assertAlmostEquals(expected_points[idx][1],
                                    actual_points[idx][1])
    def test_given_a_basic_mapping_yields_expected_results_2(self):
        height = 2.0
        lower_points = {
            (0.75, 0.75): (4.0, 4.0),
            (0.25, 0.75): (-4.0, 4.0),
            (0.75, 0.25): (4.0, -4.0),
            (0.25, 0.25): (-4.0, -4.0)
        }
        upper_points = {
            (1.0, 1.0): (4.0, 4.0),
            (0.0, 1.0): (-4.0, 4.0),
            (1.0, 0.0): (4.0, -4.0),
            (0.0, 0.0): (-4.0, -4.0)
        }
        scale = 1.0
        transformer = HomogenousTransformer(scale, height, lower_points,
                                            upper_points)

        test_points = [
            [4.0, 4.0, 0.0],
            [4.0, 4.0, 2.0],
            # [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0],
            # [1.0, 1.0, 2.5], [-1.0, -1.0,2.5], [0.0, 0.0,2.5], [0.5, 0.5,2.5],
            # [1.0, 1.0, 5.0], [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0]
        ]

        expected_points = [
            (0.75, 0.75),
            (1.0, 1.0),
            # (0.3750, 0.3750), (0.5000, 0.5000), (0.5625, 0.5625),
            # (0.6667, 0.6667), (0.3333, 0.3333), (0.5000, 0.5000), (0.5833, 0.5833),
            # (1.0000, 1.0000), (0.0000, 0.0000), (0.5000, 0.5000), (0.7500, 0.7500)
        ]

        actual_points = [transformer.transform(point) for point in test_points]

        for idx in range(0, len(test_points)):
            self.assertAlmostEquals(expected_points[idx][0],
                                    actual_points[idx][0])
            self.assertAlmostEquals(expected_points[idx][1],
                                    actual_points[idx][1])
    def test_points_outside_range_clip(self):
        height = 1.0
        lower_points = {
                (1.0, 1.0): (1.0, 1.0),
                (0.0, 1.0): (-1.0, 1.0),
                (1.0, 0.0): (1.0, -1.0),
                (0.0, 0.0): (-1.0, -1.0)
                }
        upper_points = {
                (1.0, 1.0): (1.0, 1.0),
                (0.0, 1.0): (-1.0, 1.0),
                (1.0, 0.0): (1.0, -1.0),
                (0.0, 0.0): (-1.0, -1.0)
                }
        scale = 1.0
        transformer = HomogenousTransformer(scale, height, lower_points, upper_points)

        test_points = [[-2.0, -2.0, 0.0], [2.0, 2.0, 0.0]]
        results = []
        for test_point in test_points:
                results.append(transformer.transform(test_point))
        self.assertEquals([(0.0, 0.0), (1.0, 1.0)], results)
    def test_points_outside_range_clip(self):
        height = 1.0
        lower_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        upper_points = {
            (1.0, 1.0): (1.0, 1.0),
            (0.0, 1.0): (-1.0, 1.0),
            (1.0, 0.0): (1.0, -1.0),
            (0.0, 0.0): (-1.0, -1.0)
        }
        scale = 1.0
        transformer = HomogenousTransformer(scale, height, lower_points,
                                            upper_points)

        test_points = [[-2.0, -2.0, 0.0], [2.0, 2.0, 0.0]]
        results = []
        for test_point in test_points:
            results.append(transformer.transform(test_point))
        self.assertEquals([(0.0, 0.0), (1.0, 1.0)], results)
    def test_given_a_basic_mapping_yields_expected_results_2(self):
        height = 2.0
        lower_points = {
                (0.75, 0.75): (4.0, 4.0),
                (0.25, 0.75): (-4.0, 4.0),
                (0.75, 0.25): (4.0, -4.0),
                (0.25, 0.25): (-4.0, -4.0)
                }
        upper_points = {
                (1.0, 1.0): (4.0, 4.0),
                (0.0, 1.0): (-4.0, 4.0),
                (1.0, 0.0): (4.0, -4.0),
                (0.0, 0.0): (-4.0, -4.0)
                }
        scale = 1.0
        transformer = HomogenousTransformer(scale, height, lower_points, upper_points)

        test_points = [
            [4.0, 4.0, 0.0], [4.0, 4.0, 2.0],
            # [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0],
            # [1.0, 1.0, 2.5], [-1.0, -1.0,2.5], [0.0, 0.0,2.5], [0.5, 0.5,2.5],
            # [1.0, 1.0, 5.0], [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0]
            ]

        expected_points = [
            (0.75, 0.75), (1.0, 1.0), 
            # (0.3750, 0.3750), (0.5000, 0.5000), (0.5625, 0.5625),
            # (0.6667, 0.6667), (0.3333, 0.3333), (0.5000, 0.5000), (0.5833, 0.5833),
            # (1.0000, 1.0000), (0.0000, 0.0000), (0.5000, 0.5000), (0.7500, 0.7500)
            ]

        actual_points = [transformer.transform(point) for point in test_points]

        for idx in range(0,len(test_points)):
            self.assertAlmostEquals(expected_points[idx][0], actual_points[idx][0])
            self.assertAlmostEquals(expected_points[idx][1], actual_points[idx][1])