def test_target_position_VI(self):
        """Yet another real-world problem case."""
        solver = TrajectorySolver(32, 1., 2.5, -5.0, -5.0, -2.5)
        try:
            spline = solver.target_position(Knot(0.0, 10.160758018493652, -5.0, 28.024999999999999),
                                            Knot(67.214868918397073, 0, 0, None))
##            self.plot_it(spline, solver, "test_target_position_VI")
##            self.validate_spline(spline, solver)
            self.assertAlmostEqual(spline.q[-1], 67.214868918397073, 5)
            self.assertAlmostEqual(spline.v[-1], 0, 5)
            self.assertAlmostEqual(spline.a[-1], 0, 5)
            self.assertTrue(spline.t[-1] - spline.t[0] < 60)
        except OptimizationError, err:
            import random
            while True:
                try:
                    new_durations = [random.random() for h in err.durations]
                    print "initial hs:", new_durations
                    solver.target_position_none(Knot(0.0, 10.160758018493652, -5.0, 28.024999999999999),
                                                Knot(67.214868918397073, 0, 0, None),
                                                new_durations)
                except OptimizationError as err:
                    print "Soln hs:", solver._soln_spline.h
                    self.plot_it(solver._soln_spline, solver, "test_remix...")
                else:
                    print "Soln hs:", solver._soln_spline.h
                    self.plot_it(solver._soln_spline, solver, "test_remix...")
                    break
    def test_target_position_none_III(self):
        """Travelling in reverse."""
        solver = TrajectorySolver(30, 5, 2.5, -30, -5, -2.5)
        spline = solver.target_position_none(Knot(0,0,0,0), Knot(-10,0,0,0))
##        self.plot_it(spline, solver, "test_target_position_none_III")
        self.validate_spline(spline, solver)
        self.assertAlmostEqual(spline.q[-1], -10, 5)
        self.assertAlmostEqual(spline.v[-1], 0, 5)
        self.assertAlmostEqual(spline.a[-1], 0, 5)
        self.assertTrue(spline.t[-1] < 6)
    def test_target_position_none_I(self):
        """Zero endpoints"""
        solver = TrajectorySolver(30, 5, 2.5)
        spline = solver.target_position_none(Knot(0,0,0,0), Knot(10,0,0,0))
#        self.plot_it(spline, solver)
        self.validate_spline(spline, solver)
        self.assertAlmostEqual(spline.q[-1], 10, 5)
        self.assertAlmostEqual(spline.v[-1], 0, 5)
        self.assertAlmostEqual(spline.a[-1], 0, 5)
        self.assertTrue(spline.t[-1] < 6)