Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## result
- user system total real
- apeiros: 0.460000 0.010000 0.470000 ( 0.470928)
- nullie: 0.510000 0.000000 0.510000 ( 0.512677)
- Loaded suite compare_segments
- Started
- ..
- Finished in 0.003989 seconds.
- 2 tests, 30 assertions, 0 failures, 0 errors
- ## code
- require 'benchmark'
- require 'test/unit'
- $n = 1e3
- $tests = [
- ["/", "/", "/"],
- ["/", "/segment1", "/"],
- ["/segment1", "/", "/"],
- ["/segment1", "/segment1", "/segment1"],
- ["/segment1", "/segment2", "/"],
- ["/segment1/segment2", "/segment1/segment2", "/segment1/segment2"],
- ["/segment1/segment2", "/segment1/segment2/", "/segment1/segment2"],
- ["/segment1/segment2/", "/segment1/segment2", "/segment1/segment2"],
- ["/segment1/segment2/", "/segment1/segment2/", "/segment1/segment2"],
- ["/segment1/segment2", "/segmentX/segmentY/", "/"],
- ["/segment1/segment2/segment3/segment4", "/segment1/segment2/segmentX/segmentY", "/segment1/segment2"],
- ["/segment1/segment2/segment3/segment4", "/segment1/segment2/segment3x/segment4", "/segment1/segment2"],
- ["/segment1/segment2/segment3/segment4", "/segment1/segment2", "/segment1/segment2"],
- ["/segment1/segment2/segment3/segment4", "/segment1/segment2/", "/segment1/segment2"],
- [
- "/longsegment1/longsegment2/longsegment3/longsegment4/longsegment5/longsegment6/longsegment7/longsegment8/longsegment9",
- "/longsegment1/longsegment2/longsegment3/longsegment4/longsegment5/longsegment6/longsegment7/longsegment8/longsegment9",
- "/longsegment1/longsegment2/longsegment3/longsegment4/longsegment5/longsegment6/longsegment7/longsegment8/longsegment9",
- ]
- ]
- def cs_apeiros(s1,s2)
- s1 = s1[1,s1.length].split(/\//)
- s2 = s2[1,s2.length].split(/\//)
- same = []
- s1.length.times { |i| break unless s1[i] == s2[i]; same << s1[i] }
- "/"+same.join("/")
- end
- def cs_apeiros(s1,s2)
- result = ""
- offset = 0
- offset2 = nil
- s1 = s1.chomp("/")
- s1_length = s1.length
- s2_length = s2.length
- while offset < s1_length
- offset2 = s1.index("/", offset+1) || s1_length
- length = offset2-offset
- segment = s1[offset,length]
- break unless (s2[offset,length] == segment && (s2_length == offset2 || s2[offset2] == 47))
- result << segment
- offset = offset2
- end
- result == "" ? "/" : result
- end
- def cs_nullie(s1,s2)
- s1 = s1[1,s1.length].split(/\//)
- s2 = s2[1,s2.length].split(/\//)
- r = []
- s1.each {|x| break unless x == s2.shift; r << x}
- "/"+r.join("/")
- end
- Benchmark.bm(20) { |bm|
- bm.report("apeiros:") { $n.to_i.times { $tests.each { |(a,b,r)| cs_apeiros(a,b) } } }
- bm.report("nullie:") { $n.to_i.times { $tests.each { |(a,b,r)| cs_nullie(a,b) } } }
- }
- class TestImplementations < Test::Unit::TestCase
- def test_apeiros
- $tests.each { |(a,b,r)|
- assert_equal(r, cs_apeiros(a,b), "#{r} epected for #{a}, #{b}")
- }
- end
- def test_nullie
- $tests.each { |(a,b,r)|
- assert_equal(r, cs_nullie(a,b))
- }
- end
- end
Add Comment
Please, Sign In to add comment