spec/fixed_odds_spec.rb in rodders-3.0.0 vs spec/fixed_odds_spec.rb in rodders-3.0.1

- old
+ new

@@ -23,38 +23,18 @@ value = '4/1 on' FixedOdds.fractional_odds(value) value.end_with?('on').should == true end - it "treats '4/1 against' the same as '4/1'" do - FixedOdds.fractional_odds('4/1 against').should == FixedOdds.fractional_odds('4/1') - end + specify { FixedOdds.fractional_odds('4/1 against').should == FixedOdds.fractional_odds('4/1') } + specify { FixedOdds.fractional_odds('4/1 on').should == FixedOdds.fractional_odds('1/4') } + specify { FixedOdds.fractional_odds('evens').should == FixedOdds.fractional_odds('1/1') } + specify { FixedOdds.fractional_odds('even money').should == FixedOdds.fractional_odds('1/1') } + specify { FixedOdds.fractional_odds('4-to-1').should == FixedOdds.fractional_odds('4/1') } + specify { FixedOdds.fractional_odds('4-to-1 against').should == FixedOdds.fractional_odds('4/1') } + specify { FixedOdds.fractional_odds('4-to-1 on').should == FixedOdds.fractional_odds('1/4') } - it "treats '4/1 on' the same as '1/4'" do - FixedOdds.fractional_odds('4/1 on').should == FixedOdds.fractional_odds('1/4') - end - - it "treats 'evens' as '1/1'" do - FixedOdds.fractional_odds('evens').should == FixedOdds.fractional_odds('1/1') - end - - it "treats 'even money' as '1/1'" do - FixedOdds.fractional_odds('even money').should == FixedOdds.fractional_odds('1/1') - end - - it "treats '4-to-1' as '4/1'" do - FixedOdds.fractional_odds('4-to-1').should == FixedOdds.fractional_odds('4/1') - end - - it "treats '4-to-1 against' as '4/1'" do - FixedOdds.fractional_odds('4-to-1 against').should == FixedOdds.fractional_odds('4/1') - end - - it "treats '4-to-1 on' as '1/4'" do - FixedOdds.fractional_odds('4-to-1 on').should == FixedOdds.fractional_odds('1/4') - end - it "raises error if numerator has decimal point" do expect { FixedOdds.fractional_odds '1.1/4' }.to raise_error( RuntimeError, @@ -98,38 +78,16 @@ RuntimeError, /could not parse "-100.1" as moneyline odds/ ) end - describe "positive figures" do - it "treats '+400' as meaning winning £400 on a £100 bet" do - plus400 = FixedOdds.moneyline_odds('+400') - plus400.profit_on_stake(Money.parse '£100').should == Money.parse('£400') - end + specify { FixedOdds.moneyline_odds('+400').profit_on_stake(Money.parse '£100').should == Money.parse('£400') } + specify { FixedOdds.moneyline_odds('+100').profit_on_stake(Money.parse '£100').should == Money.parse('£100') } - it "treats +100 as meaning winning £100 on a £100 bet" do - plus100 = FixedOdds.moneyline_odds('+100') - plus100.profit_on_stake(Money.parse '£100').should == Money.parse('£100') - end - end - - describe "negative figures" do - it "treats '-400' as meaning you need to wager £400 to win £100" do - minus400 = FixedOdds.moneyline_odds('-400') - minus400.profit_on_stake(Money.parse '£400').should == Money.parse('£100') - end - - it "treats '-100' as meaning you need to wager £100 to win £100" do - minus100 = FixedOdds.moneyline_odds('-100') - minus100.profit_on_stake(Money.parse '£100').should == Money.parse('£100') - end - - it "treats '+100' as meaning you need to wager £100 to win £100" do - plus100 = FixedOdds.moneyline_odds('+100') - plus100.profit_on_stake(Money.parse '£100').should == Money.parse('£100') - end - end + specify { FixedOdds.moneyline_odds('-400').profit_on_stake(Money.parse '£400').should == Money.parse('£100') } + specify { FixedOdds.moneyline_odds('-100').profit_on_stake(Money.parse '£100').should == Money.parse('£100') } + specify { FixedOdds.moneyline_odds('+100').profit_on_stake(Money.parse '£100').should == Money.parse('£100') } end describe ".decimal_odds" do it "raises error if not decimal odds" do expect { @@ -138,24 +96,13 @@ RuntimeError, /could not parse "-400" as decimal odds/ ) end - it "treats '2' as meaning you have to wager £1 to win £1" do - d2 = FixedOdds.decimal_odds '2' - d2.profit_on_stake(Money.parse '£1').should == Money.parse('£1') - end - - it "treats '5' as meaning you have to wager £1 to win £4" do - d5 = FixedOdds.decimal_odds '5' - d5.profit_on_stake(Money.parse '£1').should == Money.parse('£4') - end - - it "treats '1.25' as meaning you have to wager £4 to win £1" do - d1_25 = FixedOdds.decimal_odds '1.25' - d1_25.profit_on_stake(Money.parse '£4').should == Money.parse('£1') - end + specify { FixedOdds.decimal_odds('2').profit_on_stake(Money.parse '£1').should == Money.parse('£1') } + specify { FixedOdds.decimal_odds('5').profit_on_stake(Money.parse '£1').should == Money.parse('£4') } + specify { FixedOdds.decimal_odds('1.25').profit_on_stake(Money.parse '£4').should == Money.parse('£1') } end describe ".from_s" do describe "bad input" do it "rejects garbage" do @@ -176,47 +123,32 @@ /could not parse ""/ ) end describe "fractional odds" do - it "parses '4/1'" do - FixedOdds.from_s('4/1').should == FixedOdds.fractional_odds('4/1') - end + specify { FixedOdds.from_s('4/1').should == FixedOdds.fractional_odds('4/1') } + specify { FixedOdds.from_s('evens').should == FixedOdds.fractional_odds('1/1') } + specify { FixedOdds.from_s('even money').should == FixedOdds.fractional_odds('1/1') } + specify { FixedOdds.from_s('4/1 against').should == FixedOdds.fractional_odds('4/1') } + specify { FixedOdds.from_s('4/1 on').should == FixedOdds.fractional_odds('1/4') } + specify { FixedOdds.from_s('4-to-1').should == FixedOdds.fractional_odds('4/1') } + specify { FixedOdds.from_s('4-to-1 against').should == FixedOdds.fractional_odds('4/1') } + specify { FixedOdds.from_s('4-to-1 on').should == FixedOdds.fractional_odds('1/4') } - it "parses 'evens'" do - FixedOdds.from_s('evens').should == FixedOdds.fractional_odds('1/1') + it "raises an error for a zero numerator" do + expect { + FixedOdds.from_s '0/4' + }.to raise_error( + ArgumentError + ) end - it "parses 'even money'" do - FixedOdds.from_s('even money').should == FixedOdds.fractional_odds('1/1') - end - - it "parses '4/1 against'" do - FixedOdds.from_s('4/1 against').should == FixedOdds.fractional_odds('4/1') - end - - it "parses '4/1 on'" do - FixedOdds.from_s('4/1 on').should == FixedOdds.fractional_odds('1/4') - end - - it "parses '4-to-1'" do - FixedOdds.from_s('4-to-1').should == FixedOdds.fractional_odds('4/1') - end - - it "parses '4-to-1 against'" do - FixedOdds.from_s('4-to-1 against').should == FixedOdds.fractional_odds('4/1') - end - - it "parses '4-to-1 on'" do - FixedOdds.from_s('4-to-1 on').should == FixedOdds.fractional_odds('1/4') - end - it "raises an error for a zero denominator" do expect { FixedOdds.from_s '4/0' }.to raise_error( - ZeroDivisionError + ArgumentError ) end end describe "moneyline odds" do @@ -246,156 +178,72 @@ describe "#==" do it "treats equivalent fractions equally" do FixedOdds.fractional_odds('100/30').should == FixedOdds.fractional_odds('10/3') end - it "recognises '1/1' and '2' are the same" do - FixedOdds.fractional_odds('1/1').should == FixedOdds.decimal_odds('2') - end - - it "recognises '4/1' and '5' are the same" do - FixedOdds.fractional_odds('4/1').should == FixedOdds.decimal_odds('5') - end - - it "recognises '1/4' and '1.25' are the same" do - FixedOdds.fractional_odds('1/4').should == FixedOdds.decimal_odds('1.25') - end - - it "recognises '4/1' and '+400' are the same" do - FixedOdds.fractional_odds('4/1').should == FixedOdds.moneyline_odds('+400') - end - - it "recognises '1/4' and '-400' are the same" do - FixedOdds.fractional_odds('1/4').should == FixedOdds.moneyline_odds('-400') - end - it "recognises '+100' and '-100' are the same" do FixedOdds.moneyline_odds('+100').should == FixedOdds.moneyline_odds('-100') end + + specify { FixedOdds.fractional_odds('1/1').should == FixedOdds.decimal_odds('2') } + specify { FixedOdds.fractional_odds('4/1').should == FixedOdds.decimal_odds('5') } + specify { FixedOdds.fractional_odds('1/4').should == FixedOdds.decimal_odds('1.25') } + specify { FixedOdds.fractional_odds('4/1').should == FixedOdds.moneyline_odds('+400') } + specify { FixedOdds.fractional_odds('1/4').should == FixedOdds.moneyline_odds('-400') } end describe "#to_s" do it "is in fractional odds format" do FixedOdds.from_s('+400').to_s.should == '4/1' end end describe "#to_s_fractional" do - it "displays '4/1' as '4/1'" do - FixedOdds.fractional_odds('4/1').to_s_fractional.should == '4/1' - end - - it "is in the lowest terms" do - FixedOdds.fractional_odds('100/30').to_s_fractional.should == '10/3' - end - - it "is '4/1' for '+400'" do - FixedOdds.moneyline_odds('+400').to_s_fractional.should == '4/1' - end - - it "is '4/1' for '5'" do - FixedOdds.decimal_odds('5').to_s_fractional.should == '4/1' - end - - it "is '1/1' for '+100'" do - FixedOdds.moneyline_odds('+100').to_s_fractional.should == '1/1' - end - - it "is '1/1' for '-100'" do - FixedOdds.moneyline_odds('-100').to_s_fractional.should == '1/1' - end + specify { FixedOdds.fractional_odds('4/1').to_s_fractional.should == '4/1' } + specify { FixedOdds.fractional_odds('100/30').to_s_fractional.should == '10/3' } + specify { FixedOdds.moneyline_odds('+400').to_s_fractional.should == '4/1' } + specify { FixedOdds.decimal_odds('5').to_s_fractional.should == '4/1' } + specify { FixedOdds.moneyline_odds('+100').to_s_fractional.should == '1/1' } + specify { FixedOdds.moneyline_odds('-100').to_s_fractional.should == '1/1' } end describe "#to_s_moneyline" do - it "is '+400' for '+400'" do - FixedOdds.moneyline_odds('+400').to_s_moneyline.should == ('+400') - end - - it "is '-100' for '+100' as '-100'" do - FixedOdds.moneyline_odds('+100').to_s_moneyline.should == ('-100') - end - - it "is '-100' as '-100'" do - FixedOdds.moneyline_odds('-100').to_s_moneyline.should == ('-100') - end - - it "is '+400' for '4/1'" do - FixedOdds.fractional_odds('4/1').to_s_moneyline.should == '+400' - end - - it "is '+400' for '5'" do - FixedOdds.decimal_odds('5').to_s_moneyline.should == '+400' - end - - it "is '-400' for '1.25'" do - FixedOdds.decimal_odds('1.25').to_s_moneyline.should == '-400' - end + specify { FixedOdds.moneyline_odds('+400').to_s_moneyline.should == ('+400') } + specify { FixedOdds.moneyline_odds('+100').to_s_moneyline.should == ('-100') } + specify { FixedOdds.moneyline_odds('-100').to_s_moneyline.should == ('-100') } + specify { FixedOdds.fractional_odds('4/1').to_s_moneyline.should == '+400' } + specify { FixedOdds.fractional_odds('22/7').to_s_moneyline.should == '+314' } + specify { FixedOdds.decimal_odds('5').to_s_moneyline.should == '+400' } + specify { FixedOdds.decimal_odds('1.25').to_s_moneyline.should == '-400' } end describe "#to_s_decimal" do - it "is '1.25' for '1.25'" do - FixedOdds.decimal_odds('1.25').to_s_decimal.should == '1.25' - end - - it "is '1.25' for '1/4'" do - FixedOdds.fractional_odds('1/4').to_s_decimal.should == '1.25' - end - - it "is '1.25' for '-400'" do - FixedOdds.moneyline_odds('-400').to_s_decimal.should == '1.25' - end - - it "is '2' for '+100'" do - FixedOdds.moneyline_odds('+100').to_s_decimal.should == '2' - end - - it "is '2' for '-100'" do - FixedOdds.moneyline_odds('-100').to_s_decimal.should == '2' - end + specify { FixedOdds.decimal_odds('1.25').to_s_decimal.should == '1.25' } + specify { FixedOdds.fractional_odds('1/4').to_s_decimal.should == '1.25' } + specify { FixedOdds.moneyline_odds('-400').to_s_decimal.should == '1.25' } + specify { FixedOdds.moneyline_odds('+100').to_s_decimal.should == '2' } + specify { FixedOdds.moneyline_odds('-100').to_s_decimal.should == '2' } end describe "#profit_on_stake" do - it "is £4 on a £1 stake on a 4/1 bet" do - fourToOne = FixedOdds.fractional_odds '4/1' - fourToOne.profit_on_stake(Money.parse '£1').should == Money.parse('£4') - end + specify { FixedOdds.fractional_odds('1/1').profit_on_stake(Money.parse '£1').should == Money.parse('£1') } + specify { FixedOdds.fractional_odds('2/1').profit_on_stake(Money.parse '£1').should == Money.parse('£2') } + specify { FixedOdds.fractional_odds('3/2').profit_on_stake(Money.parse '£2').should == Money.parse('£3') } + end - it "is £0.25 on a £1 stake with a 1/4 bet" do - oneToFour = FixedOdds.fractional_odds '1/4' - oneToFour.profit_on_stake(Money.parse '£1').should == Money.parse('£0.25') - end + describe "#stake_to_profit" do + specify { FixedOdds.fractional_odds('1/1').stake_to_profit(Money.parse '£1').should == Money.parse('£1') } + specify { FixedOdds.fractional_odds('2/1').stake_to_profit(Money.parse '£2').should == Money.parse('£1') } + specify { FixedOdds.fractional_odds('3/2').stake_to_profit(Money.parse '£3').should == Money.parse('£2') } end describe "#total_return_on_stake" do - it "is £5 on a winning 4/1 bet with a £1 stake" do - fourToOne = FixedOdds.fractional_odds '4/1' - fourToOne.total_return_on_stake(Money.parse '£1').should == Money.parse('£5') - end - - it "is £125 on a winning 1/4 bet with a £100 stake" do - oneToFour = FixedOdds.fractional_odds '1/4' - oneToFour.total_return_on_stake(Money.parse '£100').should == Money.parse('£125') - end + specify { FixedOdds.fractional_odds('1/1').total_return_on_stake(Money.parse '£1').should == Money.parse('£2') } + specify { FixedOdds.fractional_odds('2/1').total_return_on_stake(Money.parse '£1').should == Money.parse('£3') } + specify { FixedOdds.fractional_odds('3/2').total_return_on_stake(Money.parse '£2').should == Money.parse('£5') } end - describe "#stake_to_profit" do - it "is £1 on a 1/1 to win £1" do - oneToOne = FixedOdds.fractional_odds '1/1' - oneToOne.stake_to_profit(Money.parse '£1').should == Money.parse('£1') - end - - it "is £1 on 2/1 to win £2" do - fourToOne = FixedOdds.fractional_odds '2/1' - fourToOne.stake_to_profit(Money.parse '£2').should == Money.parse('£1') - end - end - describe "object comparison" do - it "'+200' is less likely than '-200'" do - FixedOdds.from_s('+200').should be < FixedOdds.from_s('-200') - end - - it "'-200' is more likely than '+200'" do - FixedOdds.from_s('-200').should be > FixedOdds.from_s('+200') - end + specify { FixedOdds.from_s('+200').should be < FixedOdds.from_s('-200') } + specify { FixedOdds.from_s('-200').should be > FixedOdds.from_s('+200') } end -end +end \ No newline at end of file