solnic changed the topic of #rom-rb to: Ruby Object Mapper | Mailing List: https://groups.google.com/forum/?fromgroups#!forum/rom-rb | Logs: http://irclog.whitequark.org/rom-rb
postmodern has joined #rom-rb
<postmodern> heyo
<postmodern> how is the state of ROM?
<xybre> postmodern: it seems to be doing pretty well, the major developers appear to be AFK at the moment.
dkubb has quit [Quit: Linkinus - http://linkinus.com]
snusnu has joined #rom-rb
travis-ci has joined #rom-rb
<travis-ci> [travis-ci] dkubb/axiom#198 (master - a6f3c8e : Dan Kubb): The build was broken.
<travis-ci> [travis-ci] Build details : http://travis-ci.org/dkubb/axiom/builds/9821551
travis-ci has left #rom-rb [#rom-rb]
snusnu has quit [Quit: Leaving.]
solnic has joined #rom-rb
<solnic> postmodern: hey, we're releasing 0.0.1 in 12 days but it's "just" going to be an alpha version, kind of a...technology preview, it *will* be usable in certain usecases though!
solnic has quit [Read error: Connection reset by peer]
solnic has joined #rom-rb
solnic has quit [Client Quit]
mbj has joined #rom-rb
<postmodern> !memo solnic good to hear, i've been brain storming uses for a mapper
mbj has quit [Ping timeout: 240 seconds]
mbj has joined #rom-rb
mbj has quit [Client Quit]
mbj has joined #rom-rb
solnic has joined #rom-rb
solnic has quit [Quit: Leaving...]
solnic has joined #rom-rb
solnic_ has joined #rom-rb
solnic has quit [Read error: Connection reset by peer]
solnic has joined #rom-rb
solnic_ has quit [Read error: Connection reset by peer]
solnic has quit [Read error: Connection reset by peer]
solnic has joined #rom-rb
snusnu has joined #rom-rb
mbj has quit [Ping timeout: 264 seconds]
<solnic> snusnu: yo
<snusnu> solnic: yo
<solnic> snusnu: just wanted to say I’m arriving in Berlin on 14th
<solnic> with Kinga and our son :)
<snusnu> awesome! we're arriving 14th as well!
<solnic> oh that’s so cool!
<snusnu> we'll be staying at an airbnb appartment in kreuzberg/neukölln
<solnic> ok, we have a room at the conf venue
<solnic> you haven’t changed your phone number right>
<solnic> you haven’t changed your phone number right?
<snusnu> nope, still the same, as is yours i guess?
<solnic> snusnu: yup
<solnic> snusnu: so who’s gonna be with you? Andy?
<snusnu> heh, a bunch of people actually. i suppose of those, you only know Andy
<snusnu> but yeah, we're sharding the appartment among myself, andrea, rainer, and andy
<snusnu> lol, sharing
<solnic> buhaha
<solnic> awesome typo
<snusnu> !
<snusnu> our apt is next to the flat of a buddy of mine, both andy and i know him for a long time, i already went to school with him, and andy got to know him at uni
<snusnu> and 1 other couple will be going with us, we're actually going there by car
<solnic> that’s nice :)
<snusnu> and i take the train back then, cause the others leave earlier
<solnic> yeah we’re driving there too
<solnic> it’s so close
mbj has joined #rom-rb
<solnic> snusnu: btw we’re leaving on 18th
<snusnu> yeah, same from here, ~750km
<snusnu> solnic: ok, tell me what day that is heh
<snusnu> sunday?
<solnic> yes
<snusnu> i'm leaving wednesday
<snusnu> so i'll be there for 1 week straight
<solnic> snusnu: it’s 600 km from Krakow :)
<snusnu> oh really it's even shorter, i hadn't thought so
<snusnu> cause from where i live to krakow, it's like 600km but in the "opposite" direction it seems ;)
<snusnu> mbj: sorry if i sounded rude, but i really was surprised by your comment on https://github.com/mbj/mutant/issues/95 ;)
<mbj> snusnu: I simply did not got your problem.
<mbj> snusnu: So you dont have a BUG, only a missing mutation :D
<mbj> snusnu: I did not read your comments, just scanned the report for a crash or sth
<mbj> Because you labeled it bug :D
<solnic> blah rom-relation fails on travis under rbx because mutant task takes more than 50 minute to complete
<solnic> that’s a bit crazy slow
<solnic> it finishes in few minutes under mri 1.9
<dbussink> solnic: waiting on this still: https://github.com/tenderlove/racc/pull/26
<solnic> mbj: mri 2.0.0 is much slower with mutant
<solnic> than 1.9
<dbussink> solnic: without that patch racc is like at least 10x slower on rbx
<snusnu> mbj: ehm, i actually *labelled* it "mutation", but yeah, i see how the word bug confused you :)
<solnic> dbussink: good to know
<solnic> dbussink: I’ll add it to allowed failures for now :)
<snusnu> mbj: in any case, reading isse comments may help :p
<snusnu> mbj: that said, i know that from myself, if i think i got the point from the one line summary, i don't bother to read all of the text .. sometimes that *is* helpful tho ;)
<snusnu> mbj: fwiw, do you agree that this is a missing mutation?
<solnic> mbj: cannot wait to see strategies gone in mutant ;)
<solnic> this will be a superior improvement
<solnic> my tests kill most of the mutations in dm2 strategy, so I suspect a significant perf boost
<solnic> for example it’s around 75% in rom-relation
<mbj> snusnu: I was in a hurry
<mbj> snusnu: pls excuse :D
<mbj> solnic: I'm just woring on it, but get distracted all 10sec by family.
<snusnu> mbj: i know how it goes dude, i'm just kidding cause i found it funny :)
<solnic> ok we’re going back to Krakow…ttyl guys
marcosdsanchez has joined #rom-rb
<snusnu> mbj: i just nuked Substation::Action in favor of allowing every processor to register observers
<snusnu> mbj: and i've pushed a branch that demonstrates my problem with Adamantium::Flat trying to deep freeze stuff: https://github.com/snusnu/substation/tree/adamantium-problem/lib/substation
<snusnu> mbj: it'd be cool if you could look at that maybe?
<mbj> snusnu: later this evening
<snusnu> mbj: thx!
<mbj> snusnu: very sure to push 4x faster mutation killer :D (rspec)
<snusnu> mbj: nice!!!
<snusnu> mbj: wait, that'd mean 70sec for substation on my machine, awesome :)
<mbj> rspec internals suck hard.
<snusnu> mbj: please push
<snusnu> heh
<mbj> Problem is correctnes, need to verify it works :D
<snusnu> aww
<snusnu> hehe
<mbj> snusnu: If you wanna read some pre-rom-style code, dig into rspec
<snusnu> mbj: lemme know once you have the flexible-rspec branch in a state where i could run it against substation
<mbj> it is horrible, mutation all over the place
<mbj> lots of objects mutating other objects
<mbj> lots of "global" state
<snusnu> nice
<mbj> state that is accessible from singletons (classes / module singleton methods) ....
<mbj> snusnu: WTF, RSpec::Core::Reporter steers the execution....
<mbj> snusnu: at least I cannot inject an interface compatible thing that noops all calls.
<mbj> *without changing result :(
<snusnu> :(
<mbj> snusnu: And reporter is that thing that slows down rspec significantly, especially the backtrace cleaner....
<mbj> snusnu: mhh
<mbj> snusnu: somehow that speedup does not occur
<mbj> snusnu: I can verify mutant is doing "less" work inside the killfork now
<mbj> snusnu: But axiom-types gets executed 4 seconds "longer" :(
<snusnu> mbj: hmm .. any idea what might be the reason?
<mbj> snusnu: no
<mbj> snusnu: so when calling rspec via cli (not shelling out) it is 2 sec faster on a specific subset of axim types
<mbj> snusnu: I have my reasons about the satement "I could do a unit spec framework, just like rspec, but much better for mutant" :D
<snusnu> mbj: i never doubted those :)
<snusnu> mbj: but if you say that conceptually, mutant is doing much less work now, maybe it's just some "simple" oversight?
mbj_ has joined #rom-rb
mbj has quit [Ping timeout: 240 seconds]
mbj_ has quit [Ping timeout: 240 seconds]
franckverrot has joined #rom-rb
mbj has joined #rom-rb
<mbj> snusnu: hi
<snusnu> mbj: yo
<mbj> snusnu: Can you check out the flexible rspec branch?
<mbj> snusnu: I see a 3x speedup.
<snusnu> mbj: lemme check
<snusnu> mbj: i need to change options, says: invalid strategy --rspec-dm2
<snusnu> mbj: should i just drop the strategy?
<mbj> snusnu: use --rspec
<snusnu> ok
<snusnu> running ...
<snusnu> hah, new mutants … hmm
<mbj> did not expect new mutants
<mbj> BUT, I maybe fixed some signalling bus.
<snusnu> "but" i'm seeing them in v
<mbj> s/bus/bugs/
<snusnu> wait
<mbj> But master has some new mutants
<snusnu> Substation::Processor#initialize
<snusnu> which is a spec i added to kill stuff i couldn't otherwise kill
<mbj> yeah
<mbj> snusnu: The point is, --rspec works difference
<mbj> it does a "longest prefix match" on the rspec description
<mbj> given a subject like Substation::Processor#initialize
<snusnu> mbj: takes 3 secs longer than before, did you forget to push?
<mbj> snusnu: yeah
<snusnu> lol
<mbj> snusnu: pls pull :D
<snusnu> mom
<snusnu> stuck at Fetching source index from http://rubygems.org/ ……… i know that shit
<snusnu> ok, going
<snusnu> mbj: ok, so what it does it with Substation::Processor#initialize ?
<mbj> it checks if there is an example group with description Substation::Processor#initialize
<mbj> if not it selects all examples with prefix Substation::Processor
<mbj> and runs these
<mbj> if there is no example group with this prefix
<mbj> it coes to Substation, etc
<mbj> so basically this is --rspec-dm2, --rspec-per-class, and --rspec-unit at ONCE :D
<mbj> But with most narrow spec first, widening if no spec is found
<mbj> If you have a specific spec that does NOT kill mutations it is reported as unkilled.
<mbj> file layout does NOT matter anymore.
<mbj> snusnu: got it?
<mbj> snusnu: And how is runtime? I see a drop from 22sec => 9sec in my test case.
<snusnu> mbj: dropped from 278 to 248 secs for substation
<mbj> snusnu: okay
<mbj> not as good :D
<snusnu> but still nice!
<mbj> We can improve later.
<mbj> I plan an rom-rspec-subset compatible rspec clone.
<mbj> Will be very very fast.
<snusnu> sounds awesome
<mbj> I'll merge that to master.
<solnic> mbj: does it expand to integration tests?
<solnic> cause I think it shouldn't
<snusnu> mbj: nice! deleting the spec that now had mutations, solved the problem :p
<solnic> also, hello again
<snusnu> mbj: nope, doesn't look like it does for substation
<snusnu> solnic: ^^
<snusnu> ;)
<mbj> solnic: Depends on description
<snusnu> hello again
<solnic> wait what? is it already available?
<solnic> mbj: ^^
<snusnu> solnic: yes!
<mbj> solnic: Lulz, same reaction as when I talked to you about mutant the first time. (The day I showed you the output)
<snusnu> mbj: please merge to master :)
<mbj> You where so happy :D
<solnic> snusnu, mbj: [ot] I have a eurucamp ticket to sell…please let your peeps know ;)
<solnic> mbj: true :)
<mbj> I also have an additional eurucamp ticket :D
<snusnu> solnic: i probably won't find anyone to buy it, but let's see
<snusnu> what is it with you guys?
<snusnu> :p
<mbj> We should sell them, or give them away for free. I dislike to see empty chairs :D
<mbj> solnic: you are not coming?
<mbj> *fix english
<solnic> mbj: I got one for free because of the workshop so I have mine to sell
<solnic> I bought my ticket in May already when I didn’t know I’ll be running the workshop
<solnic> anyhow, lemme test mutant :)
<mbj> yeah, got it
<solnic> HOW DO I DO THAT?
<mbj> solnic: flexible-rspec branch
<solnic> ok
<solnic> gimme a sec
<solnic> or two
<snusnu> mbj: please merge to master so that i can nuke the weird spec ;)
<mbj> snusnu: In exchange you cleanup the mutant READMe
<mbj> :D
<snusnu> mbj: hah, no deal, now
<solnic> +1
<snusnu> mbj: i'll just use the flexible-rspec branch
<snusnu> hah
<snusnu> also, the mutant readme is not bad?
<mbj> snusnu: Lets say it this way, compared to the substation readme it lacks :D
<solnic> don’t you know, snusnu, you are responsible for all the readme files now?
<snusnu> mbj: see, the substation readme suffers from exactly the same problem i've mentioned in my comment to solnic's commit that disabled yardstick .. it's horribly out of date, and thus helps no one
<mbj> snusnu: hehe
<mbj> I'm the one making mutations, snusnu you are the readme person, solnic dkubb do the code :D
<solnic> mbj: damn, mutant is finding unkilled mutations
<mbj> solnic: mhh, the new test selection is *new*. Lets dig a littlebit.
<snusnu> solnic: in my case, nuking the specs with the new mutations did the trick ;)
<solnic> yeah no worries
<solnic> just reporting
<solnic> snusnu: wdym?
<solnic> mbj: 7 mutations were not killed
<solnic> vs 100% with —rspec-unit
<solnic> in rom-relation
<snusnu> solnic: for me it found new mutations in Substation::Processor#initialize … nuking the spec made mutant happy .. so, it discovered a superfluous spec
<snusnu> solnic: lemme clarify, i had a spec file processor/initialize_spec.rb
<solnic> I don’t have specs for constructors
<snusnu> solnic: i used it at some point to kill mutations i couldn't otherwise kill
<snusnu> solnic: and decided to name the subject Processor#initialize
<snusnu> solnic: i wasn't actually testing #initialize in there, only the otherwise unkillable mutants
<snusnu> solnic: now, without that spec, they're dead tho
<solnic> ok ok ;)
<solnic> it’s not the case in rom-relation
<mbj> solnic: There is new logic
<snusnu> ok
<solnic> lemme see, maybe there are some new mutations in edve
<solnic> s/edve/edge/
<mbj> solnic: *if* you have a spec killing mutations in "Foo::Bar#initialize", it MUST kill *ALL* mutations in Foo::Bar#initialize
<solnic> *I do not have it* :)
<solnic> meh, it’s 100% covered with master and —rspec-unit
<solnic> mbj ^^
<solnic> mbj: you can check it out, for instance in rom-relation run mutant ‘ROM::Repository.build’ —rspec
<solnic> with flexible-rspec it finds 2 un-killed mutations
<mbj> solnic: Guess, 99% change of beeing correct. You have a spec for a private method that was executed additionaly before, now its the only one.
<solnic> mbj: what? no, I don’t write specs for private methods man :)
<mbj> solnic: Must likely you did that in the past :D
<solnic> mbj: not really
<solnic> mbj: how can I see what’s going on?
<solnic> like compare which specs are being run now vs with —rspec-unit
<mbj> solnic: I'll push debug output in a few secs
<mbj> solnic: pushed
<solnic> pulling
<solnic> mbj: how to enable them?
<mbj> solnic: hardcoded :D
<solnic> nevermind
<solnic> mbj: ok buddy it doesn’t expand
<mbj> ?
<solnic> only runs specs for that specific method
<mbj> because there is an rspec example group labeled like the method
<mbj> this one *must* kill the mutation
<mbj> if you have a dedicted example it must kill the mutation
<mbj> it will only expand if there is no dedicated example
<solnic> shit…that’s weird
<mbj> lemme repro
<solnic> I mean, I would expect it to expand
<mbj> ?
<solnic> doesn’t matter if I have a dedicated spec or not
<solnic> I have specs for all the methods in separate files
<solnic> so that doesn’t help me much :/
<mbj> ?
<mbj> solnic: I think you dont get me.
<mbj> mom
<mbj> lemme repro
<solnic> hmm ok?
<solnic> is only the group name important?
<mbj> the description of the example group
<solnic> ok got it
<solnic> I renamed it
<solnic> and it killed all now
<mbj> heh
<solnic> gaaah I need to rename all the groups now!!1111111
<solnic> ;)
<mbj> the file name does not matter anymore
<solnic> ok cool
<mbj> you can place 100specs in the same file if you like
<mbj> you can describe all example groups with "describe Foo"
<solnic> I mean…hmm…can we make it work while keeping the example names? <puppy-eyes/>
<mbj> even you class has Foo::Bar
<mbj> lemme see the example names
<snusnu> lol
<solnic> it’s “describe Repository, ‘.build’"
<mbj> no
<mbj> sorry
<solnic> I changed it to…describe Repository describe ‘.build'
<mbj> mom
<solnic> which results in the same description in the output ( I think?)
<mbj> just stopp <puppy-eyes> so I can see into code :D
<snusnu> lol
<solnic> but Markus I really need this…pweety please ;)
<mbj> lulz
<mbj> I'm reproducing your fix and I cannot fix it with rename
<solnic> mbj: I replaced it with nested blocks
<solnic> describe Repository do describe ‘.build'
<solnic> and it’s 100% again
<solnic> btw you can remove debugging ;)
<mbj> solnic: that should ot be
<mbj> solnic: it should work with describe ROM::Relation, '.build'
<solnic> mbj: I was talking about ROM::Repository
<solnic> not relation
<solnic> mbj: lemme see
<mbj> I was talking about ROM::Repository.build
<mbj> the first uncovered mutation I found
<mbj> I was talking aobut ROM::Relation, the first uncovered mutation I found
<solnic> I see
<solnic> mbj: I hit another weird output from unparser
<solnic> this thing seems to be random
<solnic> cause it’s the same spec that worked 5 minutes ago
<solnic> I only changed the description
<solnic> oh wait, changing description makes it unparse the thing
<solnic> weird
<solnic> mbj: ^^
<solnic> mbj: ^^ this only happens when I have description like ‘ROM::Repository.build’
<mbj> solnic: jo wired
<mbj> *weird
<mbj> changing chars...
<solnic> mbj: hmm?
<mbj> *weird => wired :D
<solnic> mbj: it happens when the description has ‘ROM::Repository'
<solnic> in it
<solnic> can be just that
<solnic> I can add ‘.foobar’ or ‘.build’ at the end but it doesn’t matter
<solnic> if it includes this part then I get this unparser output
<solnic> mbj: ^
<solnic> mbj: same happens with ‘ROM::Relation'
<solnic> mbj: funny, I can’t get the remaining mutation killed in ROM::Relation.build even with the different example group name
<mbj> solnic: digging into it.
<mbj> solnic: okay, fixed some minor issues on the branch
<mbj> solnic: how to repro the noop fail?
<solnic> mbj: rename the group to “ROM::Relation"
<solnic> and you’ll get that unparsed thing
<solnic> happens only when there’s “ROM::Something"
<solnic> in the desc
<mbj> merged the branch to master
<solnic> awesome
<mbj> solnic: I'm to stupid to repro, can you give me the favor to push a branch wihth the problem?
<solnic> mbj: open spec/unit/rom/repository/class_methods/build_spec.rb
<solnic> and change name to
<solnic> ‘ROM::Repository.build'
<solnic> and you’ll get the error
<mbj> solnic: "change name" => describe ROM::Repository, '.build' do ?
<solnic> geez no
<solnic> describe ‘ROM::Repository.build’ do
<mbj> solnic: that should NOT be needed.
<solnic> mbj: ^
<solnic> mbj: what?
<mbj> solnic: It should work with describe ROM::Repository, '.build' do ....
<mbj> this still results in a description of "ROM::Repository.build"
<mbj> *example_group description
<solnic> but it doesn’t kill all mutations
<mbj> okay, lemme repro that noop fail
<mbj> than I'll look into it
<solnic> mbj: also it seems like the name of example group doesn’t matter
<solnic> if I nest the describe blocks it will work for Repository
<solnic> but not for Relation :( so it’s not consistent
<solnic> why are those names relevant? it could expand to all unit specs if dedicated example group didn’t kill everything
<solnic> why the assumption if there’s a dedicated example group then it must kill all mutations?
<solnic> (I’m probably annoying right now lol)
<solnic> mbj: ^
<mbj> solnic: this works like longest prefix match in IP routing
<solnic> I don’t remember/know how that works
<mbj> okay
<solnic> I’m only surprised example group names are important
<mbj> lemme explain
<mbj> subject: Foo::Bar#baz
<mbj> mutant will select specs in the following order ["Foo::Bar#baz*", "Foo::Bar*", "Foo*"]
<solnic> welllll
<solnic> I don’t think it’s working then
<solnic> oh wait
<solnic> ok got it now
<solnic> that’s why nesting fixes
<mbj> Soooo, *IF* you have an example group with tne name "Foo::Bar#baz", it must KILL all mutations for the subject Foo::Bar#baz
<solnic> yeah because I don’t have “Foo::Bar"
<solnic> yeah makes sense now
<solnic> but why doesn’t it work for ROM::Relation.build?
<solnic> oh wait
<solnic> I got it
<mbj> IMHO it is brilliant, it allows --rspec-dm2, --rspec-per-class (we never implemented) and --rspec-unit at *ONCE*
<solnic> yeah but spec organization is pretty significant now
<solnic> I need to nest everything to make it pass
<solnic> it’s not a big deal for me btw
<solnic> just mentioning it
<mbj> solnic: mhh
<mbj> solnic: cannot reproduce it :(
<mbj> the noop mutation
<solnic> mbj: ok I will push a branch with repro
<mbj> solnic: thx!
<mbj> solnic: can you post exact cli?
<solnic> mbj: checkout branch mutant-flexible-rspec
<solnic> mbj: so, when you write “describe Foo, ‘#bar’"
<solnic> it sets up a single example group called ‘Foo#bar'
<solnic> right?
<mbj> solnic: it does not set up example group
<solnic> what does it do then?
<mbj> it *searches* for example groups where prefix is 'Foo#bar'
<mbj> if it does not find example groups
<mbj> it searches for example groups with prefix 'Foo'
<solnic> yeah that’s why I had to nest them
<solnic> so "describe Foo, ‘#bar’” is what? if it’s not an example group?
<mbj> it is
<mbj> it is an example group with "Foo#bar" as name.
<solnic> you just wrote it doesn’t set up an example group
<mbj> OMG, misunderstanding
<mbj> I was thinking about mutant
<solnic> gaah
<mbj> mutant does not setup example groups
<solnic> I was asking about rspec :)
<mbj> surry
<solnic> I’m just curious why nesting fixes stuff
<mbj> good questions
<solnic> and inline describe does not
<mbj> *question
<solnic> there must be some kind of a difference
<mbj> can you post CLI to crash mutant?
<mbj> I'll debug it soonish
<solnic> mutant 'ROM::Relation.build' --rspec
<mbj> solnic: does only show uncovered mutations
<mbj> not the noop fails?
<solnic> this is what it shows me
<solnic> mbj: I need to go get some sleep :) good night
<mbj> solnic: cu
<mbj> solnic: I could easily kill this mutation via adding a spec
travis-ci has joined #rom-rb
travis-ci has left #rom-rb [#rom-rb]
<travis-ci> [travis-ci] Build details : http://travis-ci.org/rom-rb/rom-relation/builds/9841794
<travis-ci> [travis-ci] rom-rb/rom-relation#152 (master - 8c564a5 : Markus Schirp): The build was broken.
travis-ci has joined #rom-rb
travis-ci has left #rom-rb [#rom-rb]
<travis-ci> [travis-ci] rom-rb/rom-relation#152 (master - 8c564a5 : Markus Schirp): The build was broken.
<travis-ci> [travis-ci] Build details : http://travis-ci.org/rom-rb/rom-relation/builds/9841794
<mbj> snusnu: so whats the official number 20% speedup?
<snusnu> mbj: lemme run it again
<mbj> snusnu: BTW that failures in rom-relation are IMHO *just* uncovered mutations
<mbj> I could fix one of them very easily.
<snusnu> mbj: btw, do you have anything in mind for mutant that will account for dynamically defined methods?
<snusnu> mbj: it's probably because of "incidental" coverage from —rspec-unit
<mbj> snusnu: yeah, scenarios where there is a fain grained spec that does not cover all cases
<mbj> s/fain/fine/
<mbj> snusnu: the problem with define_method and friends is the following case:
<mbj> define_method(:foo) { :bar }
<mbj> define_method(:foo) { :baz }
<mbj> both dont have #source_location
<mbj> so I cannot know wich one to mutate, wich one is the "active" one.
<mbj> So instead of mutating these methods directly, I think we could start to mutate the class body
<mbj> if you do
<mbj> %w(foo bar).each { |name| define_method(name) { bla; } }
<mbj> this could be mutated
<mbj> but, the crux: If we do statement deletion and mutate that define_method away, we cannot measure a difference
<mbj> because the library was already loaded and the methods are defined.
<mbj> See my point?
<snusnu> not entirely i guess, what if we *don't* mutate the define_method away?
<snusnu> as in, blacklist it for statement deletion?
<mbj> mutant would have to become a ruby interpreter with a magic component solving the halting problem.
<snusnu> it sounds like no good idea anyway, it's basically like deleting a regular method def
<mbj> mutantions must have an observable side effect
<snusnu> omg
<snusnu> don't mess with the halting problem ...
<snusnu> :p
<mbj> but if you mutate a class body after it was loaded it is "VERY" hard to measure side effects.
<mbj> Mostly because the code in the class body already executed and mutated the classes state
<mbj> so if you do a mutation on the code and "rerun" it you could do mutations that result in the same state
<snusnu> and we cannot have 2 independent versions?
<mbj> versions of what?
<mbj> the ruby interpreter?
<snusnu> the class bodies
<mbj> if we have a lib.rb with:
<mbj> class Foo; %w(foo bar) { |name| define_method(name) { } }; end
<mbj> we'd have to load this before mutation
<mbj> so the methods are already defined
<mbj> so we'd get a bunch of mutations to the body that would not be observable
<mbj> such as %w(foo bar) => %w()
<mbj> And this would behave like a statement deletion of define_method, not observable eighter.
<mbj> get my comment about the halting_problem ?
<mbj> if we dont load the lib/file/whatever prior to mutation we'd have a chance.
<mbj> but for this we'd have to hook Kernel.require
<mbj> And how to prove mutant is loaded before the lib?
<mbj> this is a tricky problem
<mbj> I expect we can add constant mutation later
<snusnu> yeah i imagine so, tbh, i can't follow entirely at this point, but i believe you when you say it's hard or next to impossible :)
<mbj> change a constant run all specs and see if we get a blow u
<mbj> p
<snusnu> yeah that'd be neat
<mbj> but as 95% of our code are within def or defs nodes, lets still focus here.
<snusnu> agreed
<mbj> I still have lots of ideas
<mbj> the next is to parallelize mutation killers per subject.
<snusnu> initially i only thought about it because i always notice the "mismatch" between specs for regular attr_readers and the ones defined by Concord::Public
<mbj> you have to spec attr_readers?
<mbj> going to sleep now, cu tomorrow
mbj has quit [Quit: leaving]