describe Math do
  it "coef binomial basics" do
    Math.coef_binomial(1, 1).should eq 1
    Math.coef_binomial(12, 6).should eq 924
    Math.coef_binomial(5, 2).should eq 10
  end

  it "coef binomial tests a < b" do
    Math.coef_binomial(0, 1).should eq 0
    Math.coef_binomial(1, 2).should eq 0
    Math.coef_binomial(1, 2).should eq 0
    Math.coef_binomial(261, 262).should eq 0
    Math.coef_binomial(261, 263).should eq 0
    Math.coef_binomial(261, 26372).should eq 0
    20.times { |i| Math.coef_binomial(i + 1, i + rand(1..5) + 1).should eq 0 }
  end

  it "coef binomial tests a = b" do
    20.times { |i| Math.coef_binomial(i + 1, i + 1).should eq 1 }
  end

  it "coef_binomial with BigInt" do
    Math.coef_binomial(BigInt.new(5), BigInt.new(2)).should eq 10
    Math.coef_binomial(
      BigInt.new("fffffffffffffffffffffffffffffffe", 16),
      BigInt.new("ffffffffffffffffffffffffffffffff", 16)).should eq 0
  end
end
