dither 0.0.11-java → 0.0.12-java
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/README.md +20 -0
- data/lib/dither/ateg.rb +15 -0
- data/lib/dither/ateg_pairwise.rb +77 -0
- data/lib/dither/version.rb +1 -1
- data/lib/dither.rb +7 -0
- data/spec/dither/dither_spec.rb +10 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebd1c192f8d6b59c19a05e69fca456794c19dd7f
|
4
|
+
data.tar.gz: 2d31494b532b2050bd1fa8662f7882080a8f5202
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: beca214f99e4581f1aa285dff9bbf037078d6ef83035a15f254af6f69ef9a3971c9ad00cc6aab65dd973d075b1e78f100ddf98012860358224ccc6a204752cdd
|
7
|
+
data.tar.gz: b37a58fe3bb90490f3d15e5823640f6454156eff35e543f2f3863ef75a6cc979521df14c53b46157205e2c9b8f0ed7c3d82362d025ce0d5078cd9ea8df4e5bd8
|
data/README.md
CHANGED
@@ -4,6 +4,7 @@ Collection of combinatorial test generation strategies.
|
|
4
4
|
# Usage
|
5
5
|
|
6
6
|
## Pairwise Testing
|
7
|
+
IPOG (In-Parameter-Order-General) is an efficient deterministic alogrithm.
|
7
8
|
```ruby
|
8
9
|
require 'dither'
|
9
10
|
|
@@ -32,6 +33,25 @@ Dither.ipog([[true, false],
|
|
32
33
|
|
33
34
|
```
|
34
35
|
|
36
|
+
ATEG non-deterministic alogrithm for pairwise testing.
|
37
|
+
```ruby
|
38
|
+
require 'dither'
|
39
|
+
|
40
|
+
# 2-way
|
41
|
+
Dither.ateg([[true, false],
|
42
|
+
[:cat, :dog, :mouse],
|
43
|
+
(0...3).to_a])
|
44
|
+
|
45
|
+
# 3-way
|
46
|
+
Dither.ateg([[true, false],
|
47
|
+
[true, false],
|
48
|
+
[:cat, :dog, :mouse],
|
49
|
+
(0...5).to_a],
|
50
|
+
:t => 3,
|
51
|
+
:seed => 0 # set the seed on the random number generator
|
52
|
+
)
|
53
|
+
```
|
54
|
+
|
35
55
|
## Graph Models (Experimental)
|
36
56
|
```ruby
|
37
57
|
raw_graph = {
|
data/lib/dither/ateg.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
|
2
|
+
module Dither
|
3
|
+
module Ateg
|
4
|
+
class Pairwise
|
5
|
+
include Ateg
|
6
|
+
|
7
|
+
attr_reader :scratch, :n, :random, :t, :params, :constraints, :pair_cache, :comb
|
8
|
+
|
9
|
+
Pair = Struct.new(:i, :j)
|
10
|
+
|
11
|
+
module Pairs
|
12
|
+
|
13
|
+
def in_test_case?(test_case)
|
14
|
+
self.all? { |pair| pair.j == test_case[pair.i] }
|
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
|
29
|
+
|
30
|
+
def initialize(params, opts = {})
|
31
|
+
|
32
|
+
raise Dither::Error, 't must be >= 2' if opts[:t] < 2
|
33
|
+
raise Dither::Error, 't must be <= params.length' if opts[:t] > params.length
|
34
|
+
params.each do |param|
|
35
|
+
raise Dither::Error, 'param length must be > 1' if param.length < 2
|
36
|
+
end
|
37
|
+
@params = params
|
38
|
+
@n = 50
|
39
|
+
@scratch = Array.new(@n)
|
40
|
+
seed = opts[:seed] || Random.new.seed
|
41
|
+
@random = Random.new(seed)
|
42
|
+
@constraints = nil
|
43
|
+
@pair_cache = Array.new(params.length)
|
44
|
+
params.each_with_index do |param, i|
|
45
|
+
pair_cache[i] = (0...param.length).map { |j| Pair.new(i, j).freeze }
|
46
|
+
end
|
47
|
+
@comb = []
|
48
|
+
@t = opts[:t]
|
49
|
+
(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) })
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate
|
56
|
+
(0...n).each do |i|
|
57
|
+
scratch[i] = params.map { |a| random.rand(a.length) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def filter
|
62
|
+
return unless constraints
|
63
|
+
end
|
64
|
+
|
65
|
+
def best_fit
|
66
|
+
max, _ = scratch.map { |a| [a, comb.count { |b| b.in_test_case?(a) }] }
|
67
|
+
.max { |a, b| a[1] <=> b[1] }
|
68
|
+
comb.delete_if { |a| a.in_test_case?(max) }
|
69
|
+
max
|
70
|
+
end
|
71
|
+
|
72
|
+
def stop?
|
73
|
+
comb.empty?
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/dither/version.rb
CHANGED
data/lib/dither.rb
CHANGED
@@ -25,6 +25,11 @@ module Dither
|
|
25
25
|
opts[:t] = t
|
26
26
|
MIPOG.new(params, opts).run
|
27
27
|
end
|
28
|
+
|
29
|
+
def self.ateg(params, opts = {})
|
30
|
+
opts = DEFUALT_OPTS.dup.merge(opts)
|
31
|
+
Ateg::Pairwise.new(params, opts).run
|
32
|
+
end
|
28
33
|
end # Dither
|
29
34
|
|
30
35
|
require 'dither/param'
|
@@ -34,6 +39,8 @@ require 'dither/ipog_helper'
|
|
34
39
|
require 'dither/ipog'
|
35
40
|
require 'dither/mipog'
|
36
41
|
require 'dither/chinese_postman_problem'
|
42
|
+
require 'dither/ateg'
|
43
|
+
require 'dither/ateg_pairwise'
|
37
44
|
|
38
45
|
if RUBY_PLATFORM =~ /java/
|
39
46
|
require 'java'
|
data/spec/dither/dither_spec.rb
CHANGED
@@ -165,4 +165,14 @@ describe Dither do
|
|
165
165
|
[0, 0, 0, 1],
|
166
166
|
[0, 1, 1, 1]].to_set)
|
167
167
|
end
|
168
|
+
|
169
|
+
it 'can run 2-way ateg' do
|
170
|
+
params = [(0...2).to_a, (0...2).to_a, (0...2).to_a, (0..3).to_a]
|
171
|
+
Dither.ateg(params)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'can run 4-way ateg with seed' do
|
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
|
177
|
+
end
|
168
178
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dither
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Jason Gowan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -70,6 +70,8 @@ files:
|
|
70
70
|
- dither.gemspec
|
71
71
|
- lib/dither.jar
|
72
72
|
- lib/dither.rb
|
73
|
+
- lib/dither/ateg.rb
|
74
|
+
- lib/dither/ateg_pairwise.rb
|
73
75
|
- lib/dither/chinese_postman_problem.rb
|
74
76
|
- lib/dither/ipog.rb
|
75
77
|
- lib/dither/ipog_helper.rb
|