<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 ;)
<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: 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
<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