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