trace_visualization 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Gemfile +1 -1
 - data/bin/trace_visualization +21 -26
 - data/lib/trace_visualization.rb +2 -2
 - data/lib/trace_visualization/algorithm.rb +42 -0
 - data/lib/trace_visualization/data/irepetition.rb +5 -1
 - data/lib/trace_visualization/data/repetition.rb +14 -6
 - data/lib/trace_visualization/data/sorted_array.rb +44 -0
 - data/lib/trace_visualization/data/{lexeme.rb → token.rb} +7 -8
 - data/lib/trace_visualization/lexeme_overlap_filter.rb +18 -18
 - data/lib/trace_visualization/mapping.rb +72 -185
 - data/lib/trace_visualization/repetitions/concatenation.rb +136 -0
 - data/lib/trace_visualization/repetitions/context.rb +70 -0
 - data/lib/trace_visualization/repetitions/filter.rb +153 -0
 - data/lib/trace_visualization/repetitions/incrementation.rb +89 -0
 - data/lib/trace_visualization/repetitions_psy.rb +12 -5
 - data/lib/trace_visualization/utils.rb +5 -42
 - data/lib/trace_visualization/version.rb +1 -1
 - data/lib/trace_visualization/visualization/console_color_print.rb +20 -4
 - data/spec/algorithm_spec.rb +69 -0
 - data/spec/bwt_spec.rb +2 -5
 - data/spec/data/sorted_array_spec.rb +27 -0
 - data/spec/lexeme_overlap_filter_spec.rb +22 -22
 - data/spec/longest_common_prefix_spec.rb +3 -8
 - data/spec/mapping_spec.rb +72 -69
 - data/spec/repetitions/concatenation_spec.rb +65 -0
 - data/spec/repetitions/filter_spec.rb +180 -0
 - data/spec/repetitions/incrementation_spec.rb +29 -0
 - data/spec/repetitions_psy_spec.rb +7 -16
 - data/spec/suffix_array_spec.rb +11 -31
 - data/spec/utils_spec.rb +21 -9
 - data/spec/visualization/console_color_print_spec.rb +26 -0
 - data/trace_visualization.gemspec +2 -2
 - metadata +27 -13
 - data/lib/trace_visualization/repetitions_concatenation.rb +0 -134
 - data/lib/trace_visualization/repetitions_context.rb +0 -18
 - data/spec/repetitions_concatenation_spec.rb +0 -64
 
    
        data/trace_visualization.gemspec
    CHANGED
    
    | 
         @@ -25,8 +25,8 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       25 
25 
     | 
    
         
             
              spec.add_development_dependency 'bundler', '~> 1.3'
         
     | 
| 
       26 
26 
     | 
    
         
             
              spec.add_development_dependency 'rake'
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
              spec.add_development_dependency 'redcarpet' 
     | 
| 
       29 
     | 
    
         
            -
              spec.add_development_dependency 'yard',  
     | 
| 
      
 28 
     | 
    
         
            +
              spec.add_development_dependency 'redcarpet'
         
     | 
| 
      
 29 
     | 
    
         
            +
              spec.add_development_dependency 'yard', "~> 0.8.7.3"
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
              spec.add_development_dependency 'rspec-core', '~> 2.0'
         
     | 
| 
       32 
32 
     | 
    
         
             
              spec.add_development_dependency 'rspec-expectations', '~> 2.0'
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: trace_visualization
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sergey
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2013- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2013-12-28 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -42,30 +42,30 @@ dependencies: 
     | 
|
| 
       42 
42 
     | 
    
         
             
              name: redcarpet
         
     | 
| 
       43 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       44 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
     | 
    
         
            -
                - -  
     | 
| 
      
 45 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       46 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       48 
48 
     | 
    
         
             
              type: :development
         
     | 
| 
       49 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
     | 
    
         
            -
                - -  
     | 
| 
      
 52 
     | 
    
         
            +
                - - '>='
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       55 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
56 
     | 
    
         
             
              name: yard
         
     | 
| 
       57 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       58 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
59 
     | 
    
         
             
                - - ~>
         
     | 
| 
       60 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
     | 
    
         
            -
                    version: 0.7. 
     | 
| 
      
 61 
     | 
    
         
            +
                    version: 0.8.7.3
         
     | 
| 
       62 
62 
     | 
    
         
             
              type: :development
         
     | 
| 
       63 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
66 
     | 
    
         
             
                - - ~>
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
     | 
    
         
            -
                    version: 0.7. 
     | 
| 
      
 68 
     | 
    
         
            +
                    version: 0.8.7.3
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: rspec-core
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -137,12 +137,14 @@ files: 
     | 
|
| 
       137 
137 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       138 
138 
     | 
    
         
             
            - bin/trace_visualization
         
     | 
| 
       139 
139 
     | 
    
         
             
            - lib/trace_visualization.rb
         
     | 
| 
      
 140 
     | 
    
         
            +
            - lib/trace_visualization/algorithm.rb
         
     | 
| 
       140 
141 
     | 
    
         
             
            - lib/trace_visualization/assert.rb
         
     | 
| 
       141 
142 
     | 
    
         
             
            - lib/trace_visualization/bwt.rb
         
     | 
| 
       142 
143 
     | 
    
         
             
            - lib/trace_visualization/bwt.rbold
         
     | 
| 
       143 
144 
     | 
    
         
             
            - lib/trace_visualization/data/irepetition.rb
         
     | 
| 
       144 
     | 
    
         
            -
            - lib/trace_visualization/data/lexeme.rb
         
     | 
| 
       145 
145 
     | 
    
         
             
            - lib/trace_visualization/data/repetition.rb
         
     | 
| 
      
 146 
     | 
    
         
            +
            - lib/trace_visualization/data/sorted_array.rb
         
     | 
| 
      
 147 
     | 
    
         
            +
            - lib/trace_visualization/data/token.rb
         
     | 
| 
       146 
148 
     | 
    
         
             
            - lib/trace_visualization/generators.rb
         
     | 
| 
       147 
149 
     | 
    
         
             
            - lib/trace_visualization/lexeme_overlap_filter.rb
         
     | 
| 
       148 
150 
     | 
    
         
             
            - lib/trace_visualization/longest_common_prefix.rb
         
     | 
| 
         @@ -150,8 +152,10 @@ files: 
     | 
|
| 
       150 
152 
     | 
    
         
             
            - lib/trace_visualization/profile.rb
         
     | 
| 
       151 
153 
     | 
    
         
             
            - lib/trace_visualization/reorder.rb
         
     | 
| 
       152 
154 
     | 
    
         
             
            - lib/trace_visualization/repetitions.rb
         
     | 
| 
       153 
     | 
    
         
            -
            - lib/trace_visualization/ 
     | 
| 
       154 
     | 
    
         
            -
            - lib/trace_visualization/ 
     | 
| 
      
 155 
     | 
    
         
            +
            - lib/trace_visualization/repetitions/concatenation.rb
         
     | 
| 
      
 156 
     | 
    
         
            +
            - lib/trace_visualization/repetitions/context.rb
         
     | 
| 
      
 157 
     | 
    
         
            +
            - lib/trace_visualization/repetitions/filter.rb
         
     | 
| 
      
 158 
     | 
    
         
            +
            - lib/trace_visualization/repetitions/incrementation.rb
         
     | 
| 
       155 
159 
     | 
    
         
             
            - lib/trace_visualization/repetitions_incrementation.rb
         
     | 
| 
       156 
160 
     | 
    
         
             
            - lib/trace_visualization/repetitions_psy.rb
         
     | 
| 
       157 
161 
     | 
    
         
             
            - lib/trace_visualization/repetitions_score.rb
         
     | 
| 
         @@ -159,19 +163,24 @@ files: 
     | 
|
| 
       159 
163 
     | 
    
         
             
            - lib/trace_visualization/utils.rb
         
     | 
| 
       160 
164 
     | 
    
         
             
            - lib/trace_visualization/version.rb
         
     | 
| 
       161 
165 
     | 
    
         
             
            - lib/trace_visualization/visualization/console_color_print.rb
         
     | 
| 
      
 166 
     | 
    
         
            +
            - spec/algorithm_spec.rb
         
     | 
| 
       162 
167 
     | 
    
         
             
            - spec/bwt_spec.rb
         
     | 
| 
      
 168 
     | 
    
         
            +
            - spec/data/sorted_array_spec.rb
         
     | 
| 
       163 
169 
     | 
    
         
             
            - spec/generators_spec.rb
         
     | 
| 
       164 
170 
     | 
    
         
             
            - spec/lexeme_overlap_filter_spec.rb
         
     | 
| 
       165 
171 
     | 
    
         
             
            - spec/longest_common_prefix_spec.rb
         
     | 
| 
       166 
172 
     | 
    
         
             
            - spec/mapping_spec.rb
         
     | 
| 
       167 
173 
     | 
    
         
             
            - spec/reorder_spec.rb
         
     | 
| 
       168 
     | 
    
         
            -
            - spec/ 
     | 
| 
      
 174 
     | 
    
         
            +
            - spec/repetitions/concatenation_spec.rb
         
     | 
| 
      
 175 
     | 
    
         
            +
            - spec/repetitions/filter_spec.rb
         
     | 
| 
      
 176 
     | 
    
         
            +
            - spec/repetitions/incrementation_spec.rb
         
     | 
| 
       169 
177 
     | 
    
         
             
            - spec/repetitions_incrementation_spec.rb
         
     | 
| 
       170 
178 
     | 
    
         
             
            - spec/repetitions_psy_spec.rb
         
     | 
| 
       171 
179 
     | 
    
         
             
            - spec/repetitions_spec.rb
         
     | 
| 
       172 
180 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       173 
181 
     | 
    
         
             
            - spec/suffix_array_spec.rb
         
     | 
| 
       174 
182 
     | 
    
         
             
            - spec/utils_spec.rb
         
     | 
| 
      
 183 
     | 
    
         
            +
            - spec/visualization/console_color_print_spec.rb
         
     | 
| 
       175 
184 
     | 
    
         
             
            - trace_visualization.gemspec
         
     | 
| 
       176 
185 
     | 
    
         
             
            homepage: ''
         
     | 
| 
       177 
186 
     | 
    
         
             
            licenses:
         
     | 
| 
         @@ -198,17 +207,22 @@ signing_key: 
     | 
|
| 
       198 
207 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       199 
208 
     | 
    
         
             
            summary: Software for smart trace visualization
         
     | 
| 
       200 
209 
     | 
    
         
             
            test_files:
         
     | 
| 
      
 210 
     | 
    
         
            +
            - spec/algorithm_spec.rb
         
     | 
| 
       201 
211 
     | 
    
         
             
            - spec/bwt_spec.rb
         
     | 
| 
      
 212 
     | 
    
         
            +
            - spec/data/sorted_array_spec.rb
         
     | 
| 
       202 
213 
     | 
    
         
             
            - spec/generators_spec.rb
         
     | 
| 
       203 
214 
     | 
    
         
             
            - spec/lexeme_overlap_filter_spec.rb
         
     | 
| 
       204 
215 
     | 
    
         
             
            - spec/longest_common_prefix_spec.rb
         
     | 
| 
       205 
216 
     | 
    
         
             
            - spec/mapping_spec.rb
         
     | 
| 
       206 
217 
     | 
    
         
             
            - spec/reorder_spec.rb
         
     | 
| 
       207 
     | 
    
         
            -
            - spec/ 
     | 
| 
      
 218 
     | 
    
         
            +
            - spec/repetitions/concatenation_spec.rb
         
     | 
| 
      
 219 
     | 
    
         
            +
            - spec/repetitions/filter_spec.rb
         
     | 
| 
      
 220 
     | 
    
         
            +
            - spec/repetitions/incrementation_spec.rb
         
     | 
| 
       208 
221 
     | 
    
         
             
            - spec/repetitions_incrementation_spec.rb
         
     | 
| 
       209 
222 
     | 
    
         
             
            - spec/repetitions_psy_spec.rb
         
     | 
| 
       210 
223 
     | 
    
         
             
            - spec/repetitions_spec.rb
         
     | 
| 
       211 
224 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       212 
225 
     | 
    
         
             
            - spec/suffix_array_spec.rb
         
     | 
| 
       213 
226 
     | 
    
         
             
            - spec/utils_spec.rb
         
     | 
| 
      
 227 
     | 
    
         
            +
            - spec/visualization/console_color_print_spec.rb
         
     | 
| 
       214 
228 
     | 
    
         
             
            has_rdoc: 
         
     | 
| 
         @@ -1,134 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'trace_visualization'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module TraceVisualization
         
     | 
| 
       4 
     | 
    
         
            -
              module RepetitionsConcatenation
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                def self.process(rs, k, context, options = {})
         
     | 
| 
       7 
     | 
    
         
            -
                  opts = {
         
     | 
| 
       8 
     | 
    
         
            -
                    :positions_min_size => 3
         
     | 
| 
       9 
     | 
    
         
            -
                  }.merge options
         
     | 
| 
       10 
     | 
    
         
            -
              
         
     | 
| 
       11 
     | 
    
         
            -
                  result = []
         
     | 
| 
       12 
     | 
    
         
            -
              
         
     | 
| 
       13 
     | 
    
         
            -
                  useful_cnt = 0
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  pairs_cnt = {}
         
     | 
| 
       16 
     | 
    
         
            -
                  context.rs_by_line.each do |item|
         
     | 
| 
       17 
     | 
    
         
            -
                    for i in 0 ... item.size
         
     | 
| 
       18 
     | 
    
         
            -
                      for j in i + 1 ... item.size
         
     | 
| 
       19 
     | 
    
         
            -
                        left, right = item[i][0], item[j][0]
         
     | 
| 
       20 
     | 
    
         
            -
                        delta = k - left.k - right.k
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                        next if not concat_condition(left, right, delta, opts[:positions_min_size])
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                        key = (left.id << 32) + right.id
         
     | 
| 
       25 
     | 
    
         
            -
                        val = (pairs_cnt[key] || 0) + 1
         
     | 
| 
       26 
     | 
    
         
            -
                        pairs_cnt[key] = val
         
     | 
| 
       27 
     | 
    
         
            -
                        next if val != opts[:positions_min_size]
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                        lps, rps = process_common_positions(left, right, delta, context)
         
     | 
| 
       30 
     | 
    
         
            -
                  
         
     | 
| 
       31 
     | 
    
         
            -
                        if lps.size >= opts[:positions_min_size]
         
     | 
| 
       32 
     | 
    
         
            -
                          result << create_repetition(left, right, delta, lps, rps)
         
     | 
| 
       33 
     | 
    
         
            -
                        end
         
     | 
| 
       34 
     | 
    
         
            -
                  
         
     | 
| 
       35 
     | 
    
         
            -
                        useful_cnt += 1        
         
     | 
| 
       36 
     | 
    
         
            -
                      end
         
     | 
| 
       37 
     | 
    
         
            -
                    end
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
              
         
     | 
| 
       40 
     | 
    
         
            -
                  options[:counter] << [k, useful_cnt] if options[:counter]
         
     | 
| 
       41 
     | 
    
         
            -
              
         
     | 
| 
       42 
     | 
    
         
            -
                  puts "Total: #{rs.size ** 2} #{useful_cnt} #{result.size}"
         
     | 
| 
       43 
     | 
    
         
            -
              
         
     | 
| 
       44 
     | 
    
         
            -
                  process_new_repetitions(result)
         
     | 
| 
       45 
     | 
    
         
            -
              
         
     | 
| 
       46 
     | 
    
         
            -
                  rs.concat(result)
         
     | 
| 
       47 
     | 
    
         
            -
                end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                def self.process_new_repetitions(rs, context)
         
     | 
| 
       50 
     | 
    
         
            -
                  TraceVisualization::Utils.rs_by_line(rs, context.lines_pos, context.rs_by_line)
         
     | 
| 
       51 
     | 
    
         
            -
                end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                def self.process_full_search(rs, k, context, options = {})
         
     | 
| 
       54 
     | 
    
         
            -
                  opts = {
         
     | 
| 
       55 
     | 
    
         
            -
                    :positions_min_size => 3
         
     | 
| 
       56 
     | 
    
         
            -
                  }.merge options
         
     | 
| 
       57 
     | 
    
         
            -
              
         
     | 
| 
       58 
     | 
    
         
            -
                  result = []
         
     | 
| 
       59 
     | 
    
         
            -
              
         
     | 
| 
       60 
     | 
    
         
            -
                  useful_cnt = 0
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                  for left in rs
         
     | 
| 
       63 
     | 
    
         
            -
                    for right in rs
         
     | 
| 
       64 
     | 
    
         
            -
                      delta = k - left.k - right.k
         
     | 
| 
       65 
     | 
    
         
            -
                      next if not concat_condition(left, right, delta, opts[:positions_min_size])
         
     | 
| 
       66 
     | 
    
         
            -
                  
         
     | 
| 
       67 
     | 
    
         
            -
                      # @@processed_path.add(key(left, right, delta))  
         
     | 
| 
       68 
     | 
    
         
            -
                  
         
     | 
| 
       69 
     | 
    
         
            -
                      lps, rps = process_common_positions(left, right, delta, context)
         
     | 
| 
       70 
     | 
    
         
            -
                  
         
     | 
| 
       71 
     | 
    
         
            -
                      if lps.size >= opts[:positions_min_size]
         
     | 
| 
       72 
     | 
    
         
            -
                        result << create_repetition(left, right, delta, lps, rps)
         
     | 
| 
       73 
     | 
    
         
            -
                      end
         
     | 
| 
       74 
     | 
    
         
            -
                  
         
     | 
| 
       75 
     | 
    
         
            -
                      useful_cnt += 1
         
     | 
| 
       76 
     | 
    
         
            -
                    end
         
     | 
| 
       77 
     | 
    
         
            -
                  end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                  puts "Total: #{rs.size ** 2} #{useful_cnt} #{result.size}"
         
     | 
| 
       80 
     | 
    
         
            -
              
         
     | 
| 
       81 
     | 
    
         
            -
                  rs.concat(result)
         
     | 
| 
       82 
     | 
    
         
            -
                end
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                def self.delete_repetition(r, context)
         
     | 
| 
       85 
     | 
    
         
            -
                  r.lines.each do |line|
         
     | 
| 
       86 
     | 
    
         
            -
                    context.rs_by_line[line].delete_if { |item| item[0] == r }
         
     | 
| 
       87 
     | 
    
         
            -
                  end
         
     | 
| 
       88 
     | 
    
         
            -
                end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                def self.concat_condition(left, right, delta, positions_min_size)
         
     | 
| 
       91 
     | 
    
         
            -
                  delta >= 0 && left.id != right.id && 
         
     | 
| 
       92 
     | 
    
         
            -
                    left.positions_size  >= positions_min_size && 
         
     | 
| 
       93 
     | 
    
         
            -
                    right.positions_size >= positions_min_size
         
     | 
| 
       94 
     | 
    
         
            -
                end
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
                # *Attention* Position arrays are modified in place which can lead to side 
         
     | 
| 
       97 
     | 
    
         
            -
                # effects. Don't send left == right!
         
     | 
| 
       98 
     | 
    
         
            -
                def self.process_common_positions(left, right, delta, context)
         
     | 
| 
       99 
     | 
    
         
            -
                  lr_pos = left.left_positions
         
     | 
| 
       100 
     | 
    
         
            -
                  lr_pos.collect! { |pos| pos + left.length + delta }
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                  rr_pos = right.left_positions
         
     | 
| 
       103 
     | 
    
         
            -
              
         
     | 
| 
       104 
     | 
    
         
            -
                  cpr = lr_pos & rr_pos
         
     | 
| 
       105 
     | 
    
         
            -
                  cpl = cpr.collect { |pos| pos - left.length - delta }
         
     | 
| 
       106 
     | 
    
         
            -
              
         
     | 
| 
       107 
     | 
    
         
            -
                  idx = 0
         
     | 
| 
       108 
     | 
    
         
            -
                  while idx < cpr.size
         
     | 
| 
       109 
     | 
    
         
            -
                    if context.str[cpl[idx] + left.length ... cpr[idx]].scan(TraceVisualization::FORBIDDEN_CHARS).size != 0
         
     | 
| 
       110 
     | 
    
         
            -
                      cpr.delete_at(idx)
         
     | 
| 
       111 
     | 
    
         
            -
                      cpl.delete_at(idx)
         
     | 
| 
       112 
     | 
    
         
            -
                    else
         
     | 
| 
       113 
     | 
    
         
            -
                      idx += 1
         
     | 
| 
       114 
     | 
    
         
            -
                    end
         
     | 
| 
       115 
     | 
    
         
            -
                  end
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
                  lr_pos.collect! { |lpos| lpos - left.length - delta }
         
     | 
| 
       118 
     | 
    
         
            -
                  
         
     | 
| 
       119 
     | 
    
         
            -
                  [cpl, cpr]
         
     | 
| 
       120 
     | 
    
         
            -
                end
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                def self.create_repetition(left, right, delta, lps, rps)
         
     | 
| 
       123 
     | 
    
         
            -
                  r = left.class.new(left.length + right.length + delta, lps, rps)
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
                  r.k          = left.k + right.k + delta
         
     | 
| 
       126 
     | 
    
         
            -
                  r.pcount     = left.pcount + right.pcount
         
     | 
| 
       127 
     | 
    
         
            -
                  r.left       = left
         
     | 
| 
       128 
     | 
    
         
            -
                  r.right      = right
         
     | 
| 
       129 
     | 
    
         
            -
                  r.strict_ids = left.strict_ids + right.strict_ids
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                  r
         
     | 
| 
       132 
     | 
    
         
            -
                end
         
     | 
| 
       133 
     | 
    
         
            -
              end
         
     | 
| 
       134 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'trace_visualization/utils'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module TraceVisualization
         
     | 
| 
       4 
     | 
    
         
            -
              module Repetitions
         
     | 
| 
       5 
     | 
    
         
            -
                class Context
         
     | 
| 
       6 
     | 
    
         
            -
                  attr_accessor :str, :lines_pos, :rs_by_line
         
     | 
| 
       7 
     | 
    
         
            -
                  
         
     | 
| 
       8 
     | 
    
         
            -
                  def initialize(str, rs)
         
     | 
| 
       9 
     | 
    
         
            -
                    @str        = str
         
     | 
| 
       10 
     | 
    
         
            -
                    @lines_pos  = TraceVisualization::Utils.lines_pos(str)
         
     | 
| 
       11 
     | 
    
         
            -
                    @rs_by_line = Array.new(@lines_pos.size) { [] }
         
     | 
| 
       12 
     | 
    
         
            -
                
         
     | 
| 
       13 
     | 
    
         
            -
                    TraceVisualization::Utils.rs_by_line(rs, @lines_pos, @rs_by_line)
         
     | 
| 
       14 
     | 
    
         
            -
                  end
         
     | 
| 
       15 
     | 
    
         
            -
                  
         
     | 
| 
       16 
     | 
    
         
            -
                end
         
     | 
| 
       17 
     | 
    
         
            -
              end
         
     | 
| 
       18 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,64 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'trace_visualization/repetitions_concatenation'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'trace_visualization/repetitions_context'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'trace_visualization/data/repetition'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            describe TraceVisualization::RepetitionsConcatenation do
         
     | 
| 
       6 
     | 
    
         
            -
              it "process common positions" do
         
     | 
| 
       7 
     | 
    
         
            -
                str = "aaaxbbbyaaazbbbvaaawbbb"
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                mapping = TraceVisualization::Mapping.init do
         
     | 
| 
       10 
     | 
    
         
            -
                  default_tokens
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                mapping.process { from_string(str) }
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                context = TraceVisualization::Repetitions::Context.new(mapping, [])
         
     | 
| 
       16 
     | 
    
         
            -
                
         
     | 
| 
       17 
     | 
    
         
            -
                lpos = [0, 8, 16]
         
     | 
| 
       18 
     | 
    
         
            -
                rpos = [4, 12, 20]
         
     | 
| 
       19 
     | 
    
         
            -
                ppos = [[0, 4], [8, 12], [16, 20]]
         
     | 
| 
       20 
     | 
    
         
            -
                
         
     | 
| 
       21 
     | 
    
         
            -
                left  = TraceVisualization::Data::Repetition.new(3, lpos)
         
     | 
| 
       22 
     | 
    
         
            -
                right = TraceVisualization::Data::Repetition.new(3, rpos)
         
     | 
| 
       23 
     | 
    
         
            -
                
         
     | 
| 
       24 
     | 
    
         
            -
                cpl, cpr = TraceVisualization::RepetitionsConcatenation.process_common_positions(left, right, 1, context)
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                left.left_positions.should  eq cpl
         
     | 
| 
       27 
     | 
    
         
            -
                right.left_positions.should eq cpr
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                lpos.should eq left.left_positions
         
     | 
| 
       30 
     | 
    
         
            -
                rpos.should eq right.left_positions
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
              
         
     | 
| 
       33 
     | 
    
         
            -
              it "don't concatenate repetitions through forbidden chars" do
         
     | 
| 
       34 
     | 
    
         
            -
                str = <<EOF
         
     | 
| 
       35 
     | 
    
         
            -
            aaa
         
     | 
| 
       36 
     | 
    
         
            -
            bbb
         
     | 
| 
       37 
     | 
    
         
            -
            aaa
         
     | 
| 
       38 
     | 
    
         
            -
            bbb
         
     | 
| 
       39 
     | 
    
         
            -
            EOF
         
     | 
| 
       40 
     | 
    
         
            -
                context = TraceVisualization::Repetitions::Context.new(str, [])
         
     | 
| 
       41 
     | 
    
         
            -
                  
         
     | 
| 
       42 
     | 
    
         
            -
                lpos, rpos = [0, 8], [4, 12]
         
     | 
| 
       43 
     | 
    
         
            -
                left  = TraceVisualization::Data::Repetition.new(3, lpos)
         
     | 
| 
       44 
     | 
    
         
            -
                right = TraceVisualization::Data::Repetition.new(3, rpos)      
         
     | 
| 
       45 
     | 
    
         
            -
                
         
     | 
| 
       46 
     | 
    
         
            -
                cpl, cpr = TraceVisualization::RepetitionsConcatenation.process_common_positions(left, right, 1, context)
         
     | 
| 
       47 
     | 
    
         
            -
                  
         
     | 
| 
       48 
     | 
    
         
            -
                cpl.should eq []
         
     | 
| 
       49 
     | 
    
         
            -
                cpr.should eq []
         
     | 
| 
       50 
     | 
    
         
            -
                
         
     | 
| 
       51 
     | 
    
         
            -
                #
         
     | 
| 
       52 
     | 
    
         
            -
                str.gsub!(TraceVisualization::FORBIDDEN_CHARS, "x")
         
     | 
| 
       53 
     | 
    
         
            -
                context = TraceVisualization::Repetitions::Context.new(str, [])
         
     | 
| 
       54 
     | 
    
         
            -
                  
         
     | 
| 
       55 
     | 
    
         
            -
                lpos, rpos = [0, 8], [4, 12]
         
     | 
| 
       56 
     | 
    
         
            -
                left  = TraceVisualization::Data::Repetition.new(3, lpos)
         
     | 
| 
       57 
     | 
    
         
            -
                right = TraceVisualization::Data::Repetition.new(3, rpos)      
         
     | 
| 
       58 
     | 
    
         
            -
                
         
     | 
| 
       59 
     | 
    
         
            -
                cpl, cpr = TraceVisualization::RepetitionsConcatenation.process_common_positions(left, right, 1, context)
         
     | 
| 
       60 
     | 
    
         
            -
                
         
     | 
| 
       61 
     | 
    
         
            -
                cpl.should eq [0, 8]
         
     | 
| 
       62 
     | 
    
         
            -
                cpr.should eq [4, 12]    
         
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
            end
         
     |