   TODO: Test if a special case treatment of rects-to-polygons
   without promoting the rects has sufficiently better performance
   to justify it.
+
+  ## Examples
+  iex(14)> MixedShapes.collision?(
+  ...(14)>   Rect.make(-1.0, -1.0, 1.0, 1.0),
+  ...(14)>   Polygon.make([{0.9,0}, {2,1}, {2,-1}])
+  ...(14)> )
+  {:collision, "todo"}
+  iex(15)> MixedShapes.collision?(
+  ...(15)>   Rect.make(-1.0, -1.0, 1.0, 1.0),
+  ...(15)>   Polygon.make([{1.1,0}, {2,1}, {2,-1}])
+  ...(15)> )
+  false
   """
   def collision?(shape1, shape2, method \\ :accurate)
   def collision?(rect = %Rect{}, poly = %Polygon{}, method ) do

  @doc """
  Detect collisions between Rects and Circles by promoting Rects
  to polygons.
  """
  def collision?(rect = %Rect{}, circle = %Circle{}, method ) do
    collision?(Polygon.make(rect), circle, method)


  Method :fast and :accurate are ignored for circle-to-polygon
  collisions because there is only one axis to test.

  ## Examples

  iex(5)> Collidex.Detection.MixedShapes.collision?(
  ...(5)>   Collidex.Geometry.Circle.make(0,0,1.0),
  ...(5)>   Collidex.Geometry.Polygon.make([{0.9,0}, {2,1}, {2,-1}])
  ...(5)> )
  {:collision, "todo_provide_vector"}

  iex(6)> Collidex.Detection.MixedShapes.collision?(
  ...(6)>   Collidex.Geometry.Circle.make(0,0,1.0),
  ...(6)>   Collidex.Geometry.Polygon.make([{1.1,0}, {2,1}, {2,-1}])
  ...(6)> )
  false

  """
  def collision?(poly = %Polygon{}, circle = %Circle{}, _method) do
    collision?(circle, poly)
