dither 0.0.12 → 0.0.13

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9829bb305420c2e6fb9cbd6da97d6acdd2bed25f
4
+ data.tar.gz: 6a8d1840275f51bc12248eeab6b1fc1b7f567373
5
+ SHA512:
6
+ metadata.gz: 0953062cebd3d188febf90eec51f5007b64d37fb6ce37662dd0a9cde9cc41ba80457cbc9afbc3369ccfcb7ec251da6244390c2227da88bed64e7003cfed25bb3
7
+ data.tar.gz: edc6ad4837848718ee1ff1f3c030aa5dcfcf08f7aeca64d25d6eb6f7734afb779b49025c6a913185d5f8516ad9667adaf3ae8652fa6a1b616c080a8602233080
data/README.md CHANGED
@@ -48,8 +48,12 @@ Dither.ateg([[true, false],
48
48
  [:cat, :dog, :mouse],
49
49
  (0...5).to_a],
50
50
  :t => 3,
51
- :seed => 0 # set the seed on the random number generator
52
- )
51
+ :seed => 0, # set the seed on the random number generator
52
+ :constraints => [
53
+ { 1 => 0, 2 => 0 }, # exclude true and cat
54
+ { 1 => 0, 2 => 1, 3 => 4 }, # exclude true :dog 4 combinations
55
+ ],
56
+ :previously_tested => [[true, true, :cat, 0]])
53
57
  ```
54
58
 
55
59
  ## Graph Models (Experimental)
@@ -13,19 +13,7 @@ module Dither
13
13
  def in_test_case?(test_case)
14
14
  self.all? { |pair| pair.j == test_case[pair.i] }
15
15
  end
16
-
17
- alias_method :orig_method_missing, :method_missing
18
-
19
- def method_missing(method, *args, &block)
20
- if method == :cached_hash
21
- orig_hash = hash
22
- self.class.define_method(:cached_hash) do
23
- orig_hash
24
- end
25
- end
26
- orig_method_missing(method, *args, &block)
27
- end
28
- end
16
+ end # Pairs
29
17
 
30
18
  def initialize(params, opts = {})
31
19
 
@@ -39,16 +27,36 @@ module Dither
39
27
  @scratch = Array.new(@n)
40
28
  seed = opts[:seed] || Random.new.seed
41
29
  @random = Random.new(seed)
42
- @constraints = nil
30
+
43
31
  @pair_cache = Array.new(params.length)
44
32
  params.each_with_index do |param, i|
45
33
  pair_cache[i] = (0...param.length).map { |j| Pair.new(i, j).freeze }
46
34
  end
35
+ if opts[:previously_tested]
36
+ opts[:constraints] = [] unless opts[:constraints]
37
+ opts[:previously_tested].each do |a|
38
+ arr = []
39
+ a.each_with_index { |b,i| arr << [i, b] }
40
+ opts[:constraints] << Hash[arr]
41
+ end
42
+ end
43
+ @constraints = nil
44
+ if opts[:constraints]
45
+ @constraints = []
46
+ opts[:constraints].each do |a|
47
+ constraint = a.map { |k, v| pair_cache[k][v] }
48
+ constraint.extend(Pairs)
49
+ @constraints << constraint
50
+ end
51
+ end
47
52
  @comb = []
48
53
  @t = opts[:t]
49
54
  (0...params.length).to_a.combination(t).each do |a|
50
- car, *cdr = a.map { |b| pair_cache[b] }
51
- @comb.push(*car.product(*cdr).each { |b| b.extend(Pairs) })
55
+ car, *cdr = a.map { |b| pair_cache[b] }
56
+ tmp = car.product(*cdr)
57
+ tmp.each { |b| b.extend(Pairs) }
58
+ tmp.reject! { |b| constraints.any? { |c| c.all? { |d| b.include?(d)} } } if constraints
59
+ @comb.push(*tmp)
52
60
  end
53
61
  end
54
62
 
@@ -60,10 +68,14 @@ module Dither
60
68
 
61
69
  def filter
62
70
  return unless constraints
71
+ scratch.each_with_index do |e, i|
72
+ scratch[i] = nil if constraints.any? { |a| a.in_test_case?(e) }
73
+ end
63
74
  end
64
75
 
65
76
  def best_fit
66
- max, _ = scratch.map { |a| [a, comb.count { |b| b.in_test_case?(a) }] }
77
+ max, _ = scratch.compact
78
+ .map { |a| [a, comb.count { |b| b.in_test_case?(a) }] }
67
79
  .max { |a, b| a[1] <=> b[1] }
68
80
  comb.delete_if { |a| a.in_test_case?(max) }
69
81
  max
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Dither
3
- VERSION = '0.0.12'
3
+ VERSION = '0.0.13'
4
4
  end
@@ -173,6 +173,8 @@ describe Dither do
173
173
 
174
174
  it 'can run 4-way ateg with seed' do
175
175
  params = [(0...2).to_a, (0...2).to_a, (0...2).to_a, (0..3).to_a]
176
- expect(Dither.ateg(params, :t => 4, :seed => 0).length).to eq 32
176
+ expect(Dither.ateg(params, :t => 4, :seed => 0, :constraints => [
177
+ { 0 => 1, 1 => 1, 2 => 1, 3 => 1 },
178
+ ], :previously_tested => [[1,1,1,2]]).length).to eq 30
177
179
  end
178
180
  end
metadata CHANGED
@@ -1,62 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dither
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
5
- prerelease:
4
+ version: 0.0.13
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jason Gowan
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-09-18 00:00:00.000000000 Z
11
+ date: 2015-09-19 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.2'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.2'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: 0.9.2
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: 0.9.2
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: coveralls
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: Efficient test generation strategies
@@ -66,9 +59,9 @@ executables: []
66
59
  extensions: []
67
60
  extra_rdoc_files: []
68
61
  files:
69
- - .gitignore
70
- - .ruby-version
71
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".ruby-version"
64
+ - ".travis.yml"
72
65
  - Gemfile
73
66
  - Gemfile.lock
74
67
  - LICENSE
@@ -93,27 +86,26 @@ files:
93
86
  homepage: https://github.com/jesg/dither
94
87
  licenses:
95
88
  - MIT
89
+ metadata: {}
96
90
  post_install_message:
97
91
  rdoc_options: []
98
92
  require_paths:
99
93
  - lib
100
94
  required_ruby_version: !ruby/object:Gem::Requirement
101
- none: false
102
95
  requirements:
103
- - - ! '>='
96
+ - - ">="
104
97
  - !ruby/object:Gem::Version
105
98
  version: '0'
106
99
  required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
100
  requirements:
109
- - - ! '>='
101
+ - - ">="
110
102
  - !ruby/object:Gem::Version
111
103
  version: '0'
112
104
  requirements: []
113
105
  rubyforge_project: dither
114
- rubygems_version: 1.8.23.2
106
+ rubygems_version: 2.2.0
115
107
  signing_key:
116
- specification_version: 3
108
+ specification_version: 4
117
109
  summary: Collection of test generation strategies
118
110
  test_files:
119
111
  - spec/dither/chinese_postman_problem_spec.rb