Sha256: 0f2558ce24505cad0e1a1c7a011f70a883cab221fd4fa7f67fa881157f653e86

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

require 'spec_helper'

describe MonteCarlo::Experiment do

  let(:times) { 1000 }
  let(:sample_value) { 1 }
  let(:computation) { -> (sample) {sample * 2} }
  let(:experiment) do
    experiment = MonteCarlo::Experiment.new
    experiment.times = 1000
    experiment.sample_method = -> { sample_value }
    experiment.computation = computation
    experiment
  end

  describe :run do
    it 'should raise a NoSampleMethodError if a sample method is not defined' do
      experiment.sample_method = nil
      expect {
        experiment.run
      }.to raise_error MonteCarlo::Errors::NoSampleMethodError
    end

    it 'should call the sample_method the correct number of times' do
      sample_double = double(call: sample_value)
      experiment.sample_method = sample_double
      expect(sample_double).to receive(:call).exactly(times).times
      experiment.run
    end

    it 'should return an array of result objects' do
      results = experiment.run
      expect(results).to all( be_a MonteCarlo::Result )
    end

    it 'should return results with correct sample values' do
      results = experiment.run
      expect(results.map(&:sample_value)).to all( eq sample_value)
    end

    it 'should return results with correct values' do
      results = experiment.run
      expect(results.map(&:value)).to all( eq computation.call(sample_value))
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
monte_carlo-0.0.1 spec/lib/monte_carlo/experiment_spec.rb