= Failure Classes

  require 'assay'

== EqualityFailure

  assert Assay::EqualityFailure.pass?(1,1)
  refute Assay::EqualityFailure.pass?(1,2)

== TrueFailure

  assert Assay::TrueFailure.pass?(true)
  refute Assay::TrueFailure.pass?(false)

== FalseFailure

  assert Assay::FalseFailure.pass?(false)
  refute Assay::FalseFailure.pass?(true)

== NilFailure

  assert Assay::NilFailure.pass?(nil)
  refute Assay::NilFailure.pass?(true)
  refute Assay::NilFailure.pass?(false)

== DeltaFailure

  assert Assay::DeltaFailure.pass?(1, 1.5, 2)
  refute Assay::DeltaFailure.pass?(1, 2.5, 1)

== MatchFailure

  assert Assay::MatchFailure.pass?(/a/, "abc")
  refute Assay::MatchFailure.pass?(/x/, "abc")

== SameFailure

  assert Assay::SameFailure.pass?(1, 1)
  refute Assay::SameFailure.pass?(1, 1.0)

== IdentityFailure

  assert Assay::IdentityFailure.pass?(:a, :a)
  refute Assay::IdentityFailure.pass?("a", "a")

== InstanceFailure

  assert Assay::InstanceFailure.pass?(1, Fixnum)
  refute Assay::InstanceFailure.pass?(1, String)

== KindFailure

  assert Assay::KindFailure.pass?(1, Integer)
  refute Assay::KindFailure.pass?(1, String)

== RaiseFailure

  assert Assay::RaiseFailure.pass?(ArgumentError){ raise ArgumentError }
  refute Assay::RaiseFailure.pass?(ArgumentError){ raise TypeError }

== ResponseFailure

  assert Assay::ResponseFailure.pass?("string", :upcase)
  refute Assay::ResponseFailure.pass?("string", :not_a_method)

== ExecutionFailure

  assert Assay::ExecutionFailure.pass?(){ nil }
  refute Assay::ExecutionFailure.pass?(){ raise }

== ThrowFailure

  assert Assay::ThrowFailure.pass?(:foo){ throw :foo }
  refute Assay::ThrowFailure.pass?(:foo){ throw :bar }