diff -r e5d963cb6afc Lib/test/test_turtle_textonly.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/test/test_turtle_textonly.py Thu Jun 19 18:52:17 2014 -0700 @@ -0,0 +1,241 @@ +import unittest +from turtle import Vec2D, TNavigator, TPen +from test import support + +turtle = support.import_module('turtle') + +class TestVec2D(unittest.TestCase): + def assertVecAlmostEqual(self, value1, value2): + if len(value1) != len(value2): + self.fail("Tuples are not of equal size") + for i, j in zip(value1, value2): + self.assertAlmostEqual(i, j) + + def test_vector_addition(self): + vec1 = Vec2D(0,0) + vec2 = Vec2D(1,1) + answer = vec1 + vec2 + expected = (1.0,1.0) + self.assertVecAlmostEqual(answer, expected) + + vec1 = Vec2D(-1, 0) + vec2 = Vec2D(2, 2) + answer = vec1 + vec2 + expected = (1, 2) + self.assertVecAlmostEqual(answer, expected) + + vec1 = Vec2D(1.5, 0) + vec2 = Vec2D(1, 1) + answer = vec1 + vec2 + expected = (2.5, 1) + self.assertVecAlmostEqual(answer, expected) + + def test_vector_subtraction(self): + vec1 = Vec2D(0, 0) + vec2 = Vec2D(1, 1) + answer = vec1 - vec2 + expected = Vec2D(-1, -1) + self.assertVecAlmostEqual(answer, expected) + + vec1 = Vec2D(10.6, 0.1) + vec2 = Vec2D(10, 0) + answer = vec1 - vec2 + expected = Vec2D(0.6, 0.1) + self.assertVecAlmostEqual(answer, expected) + + def test_vector_multiply(self): + vec1 = Vec2D(10, 10) + vec2 = Vec2D(0.5, 3) + answer = vec1 * vec2 + expected = 35 + self.assertAlmostEqual(answer, expected) + + vec = Vec2D(0.5, 3) + answer = vec * 10 + expected = Vec2D(5, 30) + self.assertVecAlmostEqual(answer, expected) + + def test_vector_negative(self): + vec = Vec2D(10, -10) + expected = (-10, 10) + self.assertVecAlmostEqual(-vec, expected) + + def test_distance(self): + vec = Vec2D(6, 8) + expected = 10 + self.assertEqual(abs(vec), expected) + + vec = Vec2D(0, 0) + expected = 0 + self.assertEqual(abs(vec), expected) + + vec = Vec2D(2.5, 6) + expected = 6.5 + self.assertEqual(abs(vec), expected) + + def test_rotate(self): + vec = Vec2D(0, 1) + rotated_vec = vec.rotate(90) + expected = Vec2D(-1, 0) + self.assertVecAlmostEqual(rotated_vec, expected) + + rotated_vec = vec.rotate(-90) + expected = Vec2D(1, 0) + self.assertVecAlmostEqual(rotated_vec, expected) + + rotated_vec = vec.rotate(180) + expected = Vec2D(0, -1) + self.assertVecAlmostEqual(rotated_vec, expected) + + rotated_vec = vec.rotate(45) + expected = Vec2D(-(1/(2**0.5)), 1/(2**0.5)) + self.assertVecAlmostEqual(rotated_vec, expected) + + rotated_vec = vec.rotate(360) + self.assertAlmostEqual(rotated_vec, vec) + +class TestTNavigator(unittest.TestCase): + def assertVecAlmostEqual(self, value1, value2): + if len(value1) != len(value2): + self.fail("Tuples are not of equal size") + for i, j in zip(value1, value2): + self.assertAlmostEqual(i, j) + + def setUp(self): + self.nav = TNavigator() + + def test_goto(self): + self.nav.goto(100, -100) + self.assertAlmostEqual(self.nav.xcor(), 100) + self.assertAlmostEqual(self.nav.ycor(), -100) + + def test_reset(self): + self.nav.goto(100, -100) + self.assertAlmostEqual(self.nav.xcor(), 100) + self.assertAlmostEqual(self.nav.ycor(), -100) + self.nav.reset() + self.assertAlmostEqual(self.nav.xcor(), 0) + self.assertAlmostEqual(self.nav.ycor(), 0) + + def test_forward(self): + self.nav.forward(150) + expected = Vec2D(150, 0) + self.assertVecAlmostEqual(self.nav.position(), expected) + + self.nav.reset() + self.nav.left(90) + self.nav.forward(150) + expected = Vec2D(0, 150) + self.assertVecAlmostEqual(self.nav.position(), expected) + + self.assertRaises(TypeError, self.nav.forward, 'skldjfldsk') + + def test_backwards(self): + self.nav.back(200) + expected = Vec2D(-200, 0) + self.assertVecAlmostEqual(self.nav.position(), expected) + + self.nav.reset() + self.nav.right(90) + self.nav.back(200) + expected = Vec2D(0, 200) + self.assertVecAlmostEqual(self.nav.position(), expected) + + def test_distance(self): + self.nav.forward(100) + expected = 100 + self.assertAlmostEqual(self.nav.distance(Vec2D(0,0)), expected) + + def test_radians_and_degrees(self): + self.nav.left(90) + self.assertAlmostEqual(self.nav.heading(), 90) + self.nav.radians() + self.assertAlmostEqual(self.nav.heading(), 1.57079633) + self.nav.degrees() + self.assertAlmostEqual(self.nav.heading(), 90) + + def test_towards(self): + self.nav.goto(0,100) + self.assertAlmostEqual(self.nav.towards(100, 200), 45) + vec = turtle.Vec2D(100, 200) + self.assertAlmostEqual(self.nav.towards(vec), 45) + self.assertAlmostEqual(self.nav.towards((100, 200)), 45) + self.nav.reset() + self.nav.goto(-10,-10) + self.assertAlmostEqual(self.nav.towards(-10, 0), 90) + self.assertAlmostEqual(self.nav.towards(-20, -10), 180) + self.assertAlmostEqual(self.nav.towards(0, -10), 0) + self.assertAlmostEqual(self.nav.towards(-10, -20), 270) + another_turtle = TNavigator() + another_turtle.goto(-20, -10) + self.assertAlmostEqual(self.nav.towards(another_turtle), 180) + + def test_heading_and_direction(self): + self.nav.left(90) + self.assertAlmostEqual(self.nav.heading(), 90) + self.nav.left(45) + self.assertAlmostEqual(self.nav.heading(), 135) + self.nav.right(1.6) + self.assertAlmostEqual(self.nav.heading(), 133.4) + self.assertRaises(TypeError, self.nav.right, 'sdkfjdsf') + self.nav.reset() + rotations = [10,20,170,300] + result = sum(rotations) % 360 + for num in rotations: + self.nav.left(num) + self.assertEqual(self.nav.heading(), result) + self.nav.reset() + result = (360-sum(rotations)) % 360 + for num in rotations: + self.nav.right(num) + self.assertEqual(self.nav.heading(), result) + self.nav.reset() + rotations = [10,20,-170,300,-210,34.3,-50.2,-10,-29.98,500] + sum_so_far = 0 + for num in rotations: + if num < 0: + self.nav.right(abs(num)) + sum_so_far = 360 + num + sum_so_far + else: + self.nav.left(num) + sum_so_far += num + self.assertAlmostEqual(self.nav.heading(), sum_so_far % 360) + + def test_heading_and_setheading(self): + self.nav.setheading(102.32) + self.assertAlmostEqual(self.nav.heading(), 102.32) + self.nav.setheading(-123.23) + self.assertAlmostEqual(self.nav.heading(), 360-123.23) + self.nav.setheading(-1000.34) + self.assertAlmostEqual(self.nav.heading(), (360-1000.34)%360) + self.nav.setheading(300000) + self.assertAlmostEqual(self.nav.heading(), 300000%360) + + def test_positions(self): + self.nav.forward(100) + self.nav.left(90) + self.nav.forward(-200) + self.assertVecAlmostEqual(self.nav.pos(), (100.0, -200.0)) + self.assertAlmostEqual(self.nav.xcor(), 100.0) + self.assertAlmostEqual(self.nav.ycor(), -200) + self.nav.setx(-1023.2334) + self.nav.sety(193323.234) + self.assertVecAlmostEqual(self.nav.pos(), (-1023.2334, 193323.234)) + self.assertAlmostEqual(self.nav.xcor(), -1023.2334) + self.assertAlmostEqual(self.nav.ycor(), 193323.234) + + def test_home(self): + self.nav.left(30) + self.nav.forward(-100000) + self.nav.home() + self.assertVecAlmostEqual(self.nav.pos(), (0,0)) + self.assertAlmostEqual(self.nav.heading(), 0) + + def test_distance_method(self): + self.assertAlmostEqual(self.nav.distance(30, 40), 50) + vec = Vec2D(0.22, .001) + self.assertAlmostEqual(self.nav.distance(vec), 0.22000227271553355) + another_turtle = TNavigator() + another_turtle.left(90) + another_turtle.forward(10000) + self.assertAlmostEqual(self.nav.distance(another_turtle), 10000) \ No newline at end of file