main
 1namespace mars.rover.domain
 2{
 3    public class East : Heading
 4    {
 5        readonly Plateau plateau;
 6
 7        public East(Plateau plateau)
 8        {
 9            this.plateau = plateau;
10        }
11
12        public Heading turn_left()
13        {
14            return new North(plateau);
15        }
16
17        public Heading turn_right()
18        {
19            return new South(plateau);
20        }
21
22        public void move_forward_from(Coordinate x, Coordinate y)
23        {
24            if (plateau.within_x_axis(x.plus(1)))
25                x.increment();
26        }
27
28        public bool Equals(Heading other)
29        {
30            if (null == other) return false;
31            return other is East;
32        }
33
34        public override string ToString()
35        {
36            return "E";
37        }
38
39        public override bool Equals(object obj)
40        {
41            return Equals(obj as Heading);
42        }
43
44        public override int GetHashCode()
45        {
46            return ToString().GetHashCode();
47        }
48    }
49}