       else
         0
 
+  # Public: Returns a {Boolean} indicating whether this point has the same row
+  # and column as the given {Point} or point-compatible {Array}.
   isEqual: (other) ->
     return false unless other
     other = Point.fromObject(other)
     @row == other.row and @column == other.column
 
+  # Public: Returns a {Boolean} indicating whether this point precedes the given
+  # {Point} or point-compatible {Array}.
   isLessThan: (other) ->
     @compare(other) < 0
 
+  # Public: Returns a {Boolean} indicating whether this point precedes or is
+  # equal to the given {Point} or point-compatible {Array}.
   isLessThanOrEqual: (other) ->
     @compare(other) <= 0
 
+  # Public: Returns a {Boolean} indicating whether this point follows the given
+  # {Point} or point-compatible {Array}.
   isGreaterThan: (other) ->
     @compare(other) > 0
 
+  # Public: Returns a {Boolean} indicating whether this point follows or is
+  # equal to the given {Point} or point-compatible {Array}.
   isGreaterThanOrEqual: (other) ->
     @compare(other) >= 0
 
+  # Public: Returns an array of this point's row and column.
   toArray: ->
     [@row, @column]
 
+  # Public: Returns an array of this point's row and column.
   serialize: ->
     @toArray()
 
+  # Public:
   toString: ->
     "(#{@row}, #{@column})"

module.exports =
class Point
  @fromObject: (object, copy) ->
    if object instanceof Point
      if copy then object.copy() else object


  constructor: (@row=0, @column=0) ->

  # Public: Returns a new {Point} with the same row and column.
  copy: ->
    new Point(@row, @column)

  # Public: Makes this point immutable and returns itself.
  freeze: ->
    Object.freeze(this)

  # Public: Return a new {Point} based on shifting this point by the given delta,
  # which is represented by another {Point}.
  translate: (delta) ->
    {row, column} = Point.fromObject(delta)
    new Point(@row + row, @column + column)

  # Public:
  #
  # * other: A {Point} or point-compatible {Array}.
  #
  # Returns:
  #  * -1 if this point precedes the argument.
  #  * 0 if this point is equivalent to the argument.
  #  * 1 if this point follows the argument.
  compare: (other) ->
    if @row > other.row
      1
