Skip to content

Instantly share code, notes, and snippets.

@backus
Last active October 7, 2015 00:31
Show Gist options
  • Save backus/7eab1eadfa770ca76411 to your computer and use it in GitHub Desktop.
Save backus/7eab1eadfa770ca76411 to your computer and use it in GitHub Desktop.
$ CI=true be mutant -j1 -I . -r mutant-freezer --use rspec 'Foo*'Mutant configuration:
Matcher: #<Mutant::Matcher::Config match_expressions: [Foo*]>
Integration: Mutant::Integration::Rspec
Expect Coverage: 100.00%
Jobs: 1
Includes: ["."]
Requires: ["mutant-freezer"]
(00/08) 100% - killtime: 0.00s runtime: 0.00s overhead: 0.00s
(07/08) 87% - killtime: 0.18s runtime: 1.01s overhead: 0.83s
Foo#bar:/Users/johnbackus/Dropbox/coding/gists/mutant-freezer.rb:13
- rspec:0:./mutant-freezer.rb:22/Foo#bar should not freeze
neutral:Foo#bar:/Users/johnbackus/Dropbox/coding/gists/mutant-freezer.rb:13:7e6ca
--- Neutral failure ---
Original code was inserted unmutated. And the test did NOT PASS.
Your tests do not pass initially or you found a bug in mutant / unparser.
Subject AST:
(def :bar
(args)
(send
(const nil :DontFreeze) :new))
Unparsed Source:
def bar
DontFreeze.new
end
memoize(:bar)
Test Result:
- 1 @ runtime: 0.010801
- rspec:0:./mutant-freezer.rb:22/Foo#bar should not freeze
Test Output:
F
Failures:
1) Foo#bar should not freeze
Failure/Error: fail "I said don't freeze me!"
RuntimeError:
I said don't freeze me!
# ./mutant-freezer.rb:6:in `freeze'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/ice_nine-0.11.1/lib/ice_nine/freezer/object.rb:19:in `guarded_deep_freeze'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/ice_nine-0.11.1/lib/ice_nine/freezer.rb:100:in `block in guarded_deep_freeze'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/ice_nine-0.11.1/lib/ice_nine/support/recursion_guard.rb:51:in `guard'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/ice_nine-0.11.1/lib/ice_nine/freezer.rb:99:in `guarded_deep_freeze'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/ice_nine-0.11.1/lib/ice_nine/freezer.rb:54:in `deep_freeze!'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/ice_nine-0.11.1/lib/ice_nine.rb:59:in `deep_freeze!'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/adamantium-0.2.0/lib/adamantium/freezer.rb:83:in `freeze'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/adamantium-0.2.0/lib/adamantium/freezer.rb:50:in `freeze_value'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/adamantium-0.2.0/lib/adamantium/freezer.rb:34:in `call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/thread_safe-0.3.5/lib/thread_safe/cache.rb:58:in `fetch'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/thread_safe-0.3.5/lib/thread_safe/cache.rb:58:in `fetch'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
# ./mutant-freezer.rb:23:in `block (2 levels) in <top (required)>'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-rspec-0.8.2/lib/mutant/integration/rspec.rb:68:in `call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/env.rb:64:in `block in run_mutation_tests'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:48:in `call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:48:in `block (3 levels) in call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:45:in `open'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:45:in `block (2 levels) in call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:44:in `fork'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:44:in `block in call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:41:in `pipe'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/isolation.rb:41:in `call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/env.rb:62:in `run_mutation_tests'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/env.rb:39:in `kill'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/parallel/worker.rb:64:in `call'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/parallel/worker.rb:64:in `handle_job'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/parallel/worker.rb:47:in `handle'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/parallel/worker.rb:31:in `run'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/parallel/worker.rb:15:in `run'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/parallel/master.rb:49:in `block (2 levels) in run'
# /Users/johnbackus/.rvm/gems/ruby-2.2.3/gems/mutant-0.8.5/lib/mutant/actor/env.rb:16:in `block in spawn'
Finished in 0.00219 seconds (files took 0.28024 seconds to load)
1 example, 1 failure
Failed examples:
rspec # Foo#bar should not freeze
-----------------------
Mutant configuration:
Matcher: #<Mutant::Matcher::Config match_expressions: [Foo*]>
Integration: Mutant::Integration::Rspec
Expect Coverage: 100.00%
Jobs: 1
Includes: ["."]
Requires: ["mutant-freezer"]
Subjects: 1
Mutations: 8
Kills: 7
Alive: 1
Runtime: 1.01s
Killtime: 0.18s
Overhead: 455.89%
Coverage: 87.50%
Expected: 100.00%
require 'adamantium'
require 'rspec'
class DontFreeze
def freeze
fail "I said don't freeze me!"
end
end
class Foo
include Adamantium
def bar
DontFreeze.new
end
memoize :bar, freezer: :noop
end
RSpec.describe Foo, '#bar' do
let(:foo) { described_class.new }
it 'should not freeze' do
expect(foo.bar).to be_an_instance_of(DontFreeze)
end
end
$ rspec mutant-freezer.rb
.
Finished in 0.00082 seconds (files took 0.21123 seconds to load)
1 example, 0 failures
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment