ocg 1.1.0 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 407fbf8ade0a64e99df181ec0dde4cb4f5a56f351c00349de8f6988a7734c925
4
- data.tar.gz: ba84a5d347fea273ce75b7a5430d7af07419490e6fc0168e015c1f5cb28053d7
3
+ metadata.gz: 016ac48baa4e0b8c5662c14281ef75c5896b7bd2242f05fa6b933a18cd96e083
4
+ data.tar.gz: f6aadc294cc4f674ba3df1872abd2d9f3be2e8bb0748d802edbbb7850642ae51
5
5
  SHA512:
6
- metadata.gz: e5027cffb24ee8fb5ea204a589cdd1dcebb21f123381f1b42c1c883968f1486901e8ac14b4b183dc4dac11237dcbbd9eb442e0ee4d823ff9ad7b73cc6a8f1805
7
- data.tar.gz: 23aec63119a3b2e37bedb47478e4ae4db5efe179624725baee7505a76d3f1cf503b41252ecc258e6e4c1e2a1c69fd777c301e7e573ba0d81763beb3dc0325b5e
6
+ metadata.gz: b418ef99dddff5cdb1e8113f02c96f5146a900beac8e7cf67ee167f1dc1f5e1a781d11d7fa91a6830954b1e4dd253f03605c8397cbb43648cdd0fbb5f092f5ac
7
+ data.tar.gz: 7eb4d144b1ccc281927a57b7cf7fe27c91f7ac20553deb95ce2510c27358de6f4b1201e9b4f0c879d682e6856bb56f4df8766107e8a91374eba7798db6bd5d0b
data/README.md CHANGED
@@ -1,9 +1,8 @@
1
1
  # Option combination generator
2
2
 
3
- [![Travis test status](https://travis-ci.org/andrew-aladev/ocg.svg?branch=master)](https://travis-ci.org/andrew-aladev/ocg)
4
- [![AppVeyor test status](https://ci.appveyor.com/api/projects/status/github/andrew-aladev/ocg?branch=master&svg=true)](https://ci.appveyor.com/project/andrew-aladev/ocg/branch/master)
5
- [![Cirrus test status](https://api.cirrus-ci.com/github/andrew-aladev/ocg.svg?branch=master)](https://cirrus-ci.com/github/andrew-aladev/ocg)
6
- [![Circle test status](https://circleci.com/gh/andrew-aladev/ocg/tree/master.svg?style=shield)](https://circleci.com/gh/andrew-aladev/ocg/tree/master)
3
+ | Travis | AppVeyor | Circle | Codecov |
4
+ | :---: | :---: | :---: | :---: |
5
+ | [![Travis test status](https://travis-ci.com/andrew-aladev/ocg.svg?branch=master)](https://travis-ci.com/andrew-aladev/ocg) | [![AppVeyor test status](https://ci.appveyor.com/api/projects/status/github/andrew-aladev/ocg?branch=master&svg=true)](https://ci.appveyor.com/project/andrew-aladev/ocg/branch/master) | [![Circle test status](https://circleci.com/gh/andrew-aladev/ocg/tree/master.svg?style=shield)](https://circleci.com/gh/andrew-aladev/ocg/tree/master) | [![Codecov](https://codecov.io/gh/andrew-aladev/ocg/branch/master/graph/badge.svg)](https://codecov.io/gh/andrew-aladev/ocg) |
7
6
 
8
7
  ## Installation
9
8
 
@@ -18,6 +17,8 @@ rake gem
18
17
  gem install pkg/ocg-*.gem
19
18
  ```
20
19
 
20
+ You can also use [overlay](https://github.com/andrew-aladev/overlay) for gentoo.
21
+
21
22
  ## Usage
22
23
 
23
24
  ```ruby
@@ -40,15 +41,31 @@ generator = OCG.new(
40
41
  :h => 7..8
41
42
  )
42
43
 
43
- until generator.finished?
44
- puts generator.next
45
- end
44
+ puts generator.next until generator.finished?
46
45
  ```
47
46
 
48
47
  It will populate all option combinations.
49
48
 
50
49
  ## Docs
51
50
 
51
+ `OCG.new options` will prepare a generator.
52
+ It will provide all possible option combinations.
53
+
54
+ | Method | Description |
55
+ |-------------|-------------|
56
+ | `and` | provides all combinations between generators |
57
+ | `mix` | merges combinations without combining, guarantees that both left and right generator combinations will be provided at least once |
58
+ | `or` | concats generator combinations without merging |
59
+ | `reset` | allows to receive combinations once again |
60
+ | `next` | returns next combination |
61
+ | `last` | returns last combination |
62
+ | `started?` | returns true when at least one combination was generated |
63
+ | `finished?` | returns true when all combination were generated |
64
+ | `length` | returns combinations length |
65
+ | `to_a` | returns combinations array |
66
+
67
+ You can combine generators using `and`, `mix` and `or`.
68
+
52
69
  Options should be prepared in the following form:
53
70
 
54
71
  ```ruby
@@ -63,34 +80,12 @@ Options hash should not be empty.
63
80
  `option_values` should be convertable to array using `to_a`.
64
81
  `option_values` should not be empty.
65
82
 
66
- `OCG.new options` will prepare a generator.
67
- It will provide all possible option combinations.
68
-
69
- You can combine generators using `and`, `mix` and `or`.
70
-
71
- `and` method will provide all combinations between generators.
72
- `mix` method will merge combinations without combining. `mix` guarantees that both left and right generator combinations will be provided at least once.
73
- `or` method will concat generator combinations without merging.
74
-
75
- `reset` method allows to receive combinations once again.
76
-
77
- `next` method returns next combination.
78
-
79
- `last` method returns last combination.
80
-
81
- `started?` method returns true when at least one combination was generated.
82
-
83
- `finished?` method returns true when all combination were generated.
84
-
85
- `length` returns combinations length.
86
-
87
- `to_a` returns combinations array.
88
-
89
83
  ## Why?
90
84
 
91
85
  Many software uses multiple options and have complex relations between them.
92
86
  We want to test this software.
93
87
  We need to provide optimal option combination to maximize test coverage.
88
+ The amount of combinations can be more than billion, it is not possible to store them (fuzzing testing).
94
89
 
95
90
  Let's look at [zstd compressor options](http://facebook.github.io/zstd/zstd_manual.html#Chapter5).
96
91
 
@@ -104,7 +99,7 @@ general_generator = OCG.new(
104
99
  )
105
100
  .or(
106
101
  :windowLog => 0..10,
107
- :hashLog => 0..10,
102
+ :hashLog => 0..10,
108
103
  ...
109
104
  )
110
105
  ```
@@ -118,8 +113,8 @@ ldm_generator = OCG.new(
118
113
  )
119
114
  .or(
120
115
  :enableLongDistanceMatching => [true],
121
- :ldmHashLog => 0..10,
122
- :ldmMinMatch => 0..10,
116
+ :ldmHashLog => 0..10,
117
+ :ldmMinMatch => 0..10,
123
118
  ...
124
119
  )
125
120
  ```
@@ -132,37 +127,38 @@ main_generator = general_generator.and ldm_generator
132
127
  ```
133
128
 
134
129
  `contentSizeFlag`, `checksumFlag`, `dictIDFlag` options are additional options.
135
- These options don't correlate between each other or with main options.
136
- We want just to mix their values with main options.
130
+ These options may correlate between each other but don't correlate with main options.
137
131
 
138
132
  ```ruby
139
133
  almost_complete_generator = main_generator.mix(
140
- :contentSizeFlag => [true, false]
141
- )
142
- .mix(
143
- :checksumFlag => [true, false]
144
- )
145
- .mix(
146
- :dictIDFlag => [true, false]
134
+ :contentSizeFlag => [true, false],
135
+ :checksumFlag => [true, false],
136
+ :dictIDFlag => [true, false]
147
137
  )
148
138
  ```
149
139
 
150
140
  `nbWorkers`, `jobSize` and `overlapLog` options are thread related options.
141
+ When `nbWorkers` equals `0`, `jobSize` and `overlapLog` should not be used.
151
142
  These options correlate between each other but don't correlate with main options.
152
143
 
153
144
  ```ruby
154
145
  complete_generator = almost_complete_generator.mix(
155
- :nbWorkers => 0..2,
156
- :jobSize => 1..10,
157
- :overlapLog => 0..9
146
+ OCG.new(
147
+ :nbWorkers => [0]
148
+ )
149
+ .or(
150
+ :nbWorkers => 1..2,
151
+ :jobSize => 1..10,
152
+ :overlapLog => 0..9
153
+ )
158
154
  )
159
155
  ```
160
156
 
161
157
  ## CI
162
158
 
163
- Travis and Appveyor CI uses [scripts/toolchains.sh](scripts/toolchains.sh) directly.
164
- Cirrus and Circle CI uses prebuilt [scripts/test-images](scripts/test-images).
165
- Cirrus CI uses amd64 image, Circle CI - i686.
159
+ See universal test script [scripts/ci_test.sh](scripts/ci_test.sh) for CI.
160
+ Please visit [scripts/test-images](scripts/test-images).
161
+ You can run this test script using many native and cross images.
166
162
 
167
163
  ## License
168
164
 
@@ -6,7 +6,7 @@ require_relative "../error"
6
6
  class OCG
7
7
  module Operator
8
8
  class Abstract < OCG
9
- def initialize(left_generator_or_options, right_generator_or_options)
9
+ def initialize(left_generator_or_options, right_generator_or_options) # rubocop:disable Lint/MissingSuper
10
10
  @left_generator = OCG.prepare_generator left_generator_or_options
11
11
  @right_generator = OCG.prepare_generator right_generator_or_options
12
12
 
@@ -20,6 +20,7 @@ class OCG
20
20
  nil
21
21
  end
22
22
 
23
+ # :nocov:
23
24
  def next
24
25
  raise NotImplementedError, "\"next\" is not implemented"
25
26
  end
@@ -39,6 +40,7 @@ class OCG
39
40
  def length
40
41
  raise NotImplementedError, "\"length\" is not implemented"
41
42
  end
43
+ # :nocov:
42
44
  end
43
45
  end
44
46
  end
@@ -9,7 +9,7 @@ class OCG
9
9
  def initialize(*args)
10
10
  super
11
11
 
12
- @main_generator = \
12
+ @main_generator =
13
13
  if @right_generator.length > @left_generator.length
14
14
  @right_generator
15
15
  else
@@ -7,7 +7,7 @@ class OCG
7
7
  class Options
8
8
  def initialize(options)
9
9
  Validation.validate_options options
10
- @options = Hash[options.map { |name, values| [name, values.to_a] }]
10
+ @options = options.transform_values(&:to_a)
11
11
 
12
12
  # End to start is more traditional way of making combinations.
13
13
  @keys = @options.keys.reverse
@@ -20,7 +20,7 @@ class OCG
20
20
  end
21
21
 
22
22
  protected def reset_value_indexes
23
- @value_indexes = Hash[@options.map { |name, _values| [name, 0] }]
23
+ @value_indexes = @options.transform_values { |_values| 0 }
24
24
  end
25
25
 
26
26
  def reset
@@ -2,5 +2,5 @@
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  class OCG
5
- VERSION = "1.1.0".freeze
5
+ VERSION = "1.1.5".freeze
6
6
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Aladjev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-27 00:00:00.000000000 Z
11
+ date: 2020-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: codecov
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: minitest
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,20 @@ dependencies:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '5.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rubocop
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -53,19 +81,19 @@ dependencies:
53
81
  - !ruby/object:Gem::Version
54
82
  version: '1.5'
55
83
  - !ruby/object:Gem::Dependency
56
- name: rubocop-rails
84
+ name: simplecov
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - "~>"
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
- version: '2.3'
89
+ version: '0'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - "~>"
94
+ - - ">="
67
95
  - !ruby/object:Gem::Version
68
- version: '2.3'
96
+ version: '0'
69
97
  description:
70
98
  email: aladjev.andrew@gmail.com
71
99
  executables: []
@@ -97,14 +125,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
125
  requirements:
98
126
  - - ">="
99
127
  - !ruby/object:Gem::Version
100
- version: '0'
128
+ version: '2.5'
101
129
  required_rubygems_version: !ruby/object:Gem::Requirement
102
130
  requirements:
103
131
  - - ">="
104
132
  - !ruby/object:Gem::Version
105
133
  version: '0'
106
134
  requirements: []
107
- rubygems_version: 3.0.6
135
+ rubygems_version: 3.1.4
108
136
  signing_key:
109
137
  specification_version: 4
110
138
  summary: Option combination generator.