red-colors 0.1.0

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.
data/test/test-rgba.rb ADDED
@@ -0,0 +1,332 @@
1
+ class ColorsRGBATest < Test::Unit::TestCase
2
+ include TestHelper
3
+
4
+ sub_test_case(".new") do
5
+ test("with integer values") do
6
+ c = Colors::RGBA.new(1, 128, 0, 255)
7
+ assert_equal(1/255r, c.red)
8
+ assert_equal(128/255r, c.green)
9
+ assert_equal(0/255r, c.blue)
10
+ assert_equal(255/255r, c.alpha)
11
+
12
+ assert_raise(ArgumentError) do
13
+ Colors::RGBA.new(0, 0, 0x100, 0x100)
14
+ end
15
+
16
+ assert_raise(ArgumentError) do
17
+ Colors::RGBA.new(0, 0, -1, -1)
18
+ end
19
+ end
20
+
21
+ test("with float values") do
22
+ c = Colors::RGBA.new(0.0.next_float, 0.55, 1, 0.9)
23
+ assert_equal(0.0.next_float.to_r, c.red)
24
+ assert_equal(0.55.to_r, c.green)
25
+ assert_equal(1.0.to_r, c.blue)
26
+ assert_equal(0.9.to_r, c.alpha)
27
+
28
+ assert_raise(ArgumentError) do
29
+ Colors::RGBA.new(0.0, 0.0, 9.9, 1.0.next_float)
30
+ end
31
+
32
+ assert_raise(ArgumentError) do
33
+ Colors::RGBA.new(0, 0, 0, -1.0)
34
+ end
35
+ end
36
+
37
+ test("with rational values") do
38
+ c = Colors::RGBA.new(1/1000r, 500/1000r, 1, 999/1000r)
39
+ assert_equal(1/1000r, c.red)
40
+ assert_equal(500/1000r, c.green)
41
+ assert_equal(1r, c.blue)
42
+ assert_equal(999/1000r, c.alpha)
43
+
44
+ assert_raise(ArgumentError) do
45
+ Colors::RGBA.new(0, 0, 0, 1001/1000r)
46
+ end
47
+
48
+ assert_raise(ArgumentError) do
49
+ Colors::RGBA.new(0, 0, 0, -1/1000r)
50
+ end
51
+ end
52
+ end
53
+
54
+ test("#red=") do
55
+ c = Colors::RGBA.new(0, 0, 0, 0)
56
+ c.red = 1r
57
+ assert_equal(1r, c.red)
58
+ c.red = 1.0r
59
+ assert_equal(1r, c.red)
60
+ c.red = 1
61
+ assert_equal(1/255r, c.red)
62
+ assert_raise(ArgumentError) do
63
+ c.red = 1001/1000r
64
+ end
65
+ assert_raise(ArgumentError) do
66
+ c.red = -1/1000r
67
+ end
68
+ assert_raise(ArgumentError) do
69
+ c.red = -0.1
70
+ end
71
+ assert_raise(ArgumentError) do
72
+ c.red = 1.0.next_float
73
+ end
74
+ assert_raise(ArgumentError) do
75
+ c.red = 256
76
+ end
77
+ assert_raise(ArgumentError) do
78
+ c.red = -1
79
+ end
80
+ end
81
+
82
+ test("#green=") do
83
+ c = Colors::RGBA.new(0, 0, 0, 0)
84
+ c.green = 1r
85
+ assert_equal(1r, c.green)
86
+ c.green = 1.0r
87
+ assert_equal(1r, c.green)
88
+ c.green = 1
89
+ assert_equal(1/255r, c.green)
90
+ assert_raise(ArgumentError) do
91
+ c.green = 1001/1000r
92
+ end
93
+ assert_raise(ArgumentError) do
94
+ c.green = -1/1000r
95
+ end
96
+ assert_raise(ArgumentError) do
97
+ c.green = -0.1
98
+ end
99
+ assert_raise(ArgumentError) do
100
+ c.green = 1.0.next_float
101
+ end
102
+ assert_raise(ArgumentError) do
103
+ c.green = 256
104
+ end
105
+ assert_raise(ArgumentError) do
106
+ c.green = -1
107
+ end
108
+ end
109
+
110
+ test("#blue=") do
111
+ c = Colors::RGBA.new(0, 0, 0, 0)
112
+ c.blue = 1r
113
+ assert_equal(1r, c.blue)
114
+ c.blue = 1.0r
115
+ assert_equal(1r, c.blue)
116
+ c.blue = 1
117
+ assert_equal(1/255r, c.blue)
118
+ assert_raise(ArgumentError) do
119
+ c.blue = 1001/1000r
120
+ end
121
+ assert_raise(ArgumentError) do
122
+ c.blue = -1/1000r
123
+ end
124
+ assert_raise(ArgumentError) do
125
+ c.blue = -0.1
126
+ end
127
+ assert_raise(ArgumentError) do
128
+ c.blue = 1.0.next_float
129
+ end
130
+ assert_raise(ArgumentError) do
131
+ c.blue = 256
132
+ end
133
+ assert_raise(ArgumentError) do
134
+ c.blue = -1
135
+ end
136
+ end
137
+
138
+ test("#alpha=") do
139
+ c = Colors::RGBA.new(0, 0, 0, 0)
140
+ c.alpha = 1r
141
+ assert_equal(1r, c.alpha)
142
+ c.alpha = 1.0r
143
+ assert_equal(1r, c.alpha)
144
+ c.alpha = 1
145
+ assert_equal(1/255r, c.alpha)
146
+ assert_raise(ArgumentError) do
147
+ c.alpha = 1001/1000r
148
+ end
149
+ assert_raise(ArgumentError) do
150
+ c.alpha = -1/1000r
151
+ end
152
+ assert_raise(ArgumentError) do
153
+ c.alpha = -0.1
154
+ end
155
+ assert_raise(ArgumentError) do
156
+ c.alpha = 1.0.next_float
157
+ end
158
+ assert_raise(ArgumentError) do
159
+ c.alpha = 256
160
+ end
161
+ assert_raise(ArgumentError) do
162
+ c.alpha = -1
163
+ end
164
+ end
165
+
166
+ test("#==") do
167
+ assert { Colors::RGBA.new(0, 0, 0, 0) == Colors::RGBA.new(0, 0, 0, 0) }
168
+ assert { Colors::RGBA.new(0, 0, 0, 1r) == Colors::RGB.new(0, 0, 0) }
169
+ end
170
+
171
+ test("!=") do
172
+ assert { Colors::RGBA.new(0, 0, 0, 0) != Colors::RGBA.new(1, 0, 0, 0) }
173
+ assert { Colors::RGBA.new(0, 0, 0, 0) != Colors::RGBA.new(0, 1, 0, 0) }
174
+ assert { Colors::RGBA.new(0, 0, 0, 0) != Colors::RGBA.new(0, 0, 1, 0) }
175
+ assert { Colors::RGBA.new(0, 0, 0, 0) != Colors::RGBA.new(0, 0, 0, 1) }
176
+ assert { Colors::RGBA.new(0, 0, 0, 0) != Colors::RGB.new(0, 0, 0) }
177
+ end
178
+
179
+ test("#desaturate") do
180
+ c = Colors::RGBA.new(1r, 1r, 1r, 0.7r).desaturate(0.8)
181
+ assert_instance_of(Colors::RGBA, c)
182
+ assert_near(Colors::HSLA.new(0r, 0.8r, 1r, 0.7r).to_rgba, c)
183
+ end
184
+
185
+ sub_test_case(".parse") do
186
+ test("for #rgba") do
187
+ assert_equal(Colors::RGBA.new(0, 0, 0, 0),
188
+ Colors::RGBA.parse("#0000"))
189
+ assert_equal(Colors::RGBA.new(0x33, 0x66, 0x99, 0xcc),
190
+ Colors::RGBA.parse("#369c"))
191
+ assert_equal(Colors::RGBA.new(255, 255, 255, 255),
192
+ Colors::RGBA.parse("#ffff"))
193
+ end
194
+
195
+ test("for #rrggbbaa") do
196
+ assert_equal(Colors::RGBA.new(0, 0, 0, 0),
197
+ Colors::RGBA.parse("#00000000"))
198
+ assert_equal(Colors::RGBA.new(1, 0, 0, 0),
199
+ Colors::RGBA.parse("#01000000"))
200
+ assert_equal(Colors::RGBA.new(0, 1, 0, 0),
201
+ Colors::RGBA.parse("#00010000"))
202
+ assert_equal(Colors::RGBA.new(0, 0, 1, 0),
203
+ Colors::RGBA.parse("#00000100"))
204
+ assert_equal(Colors::RGBA.new(0, 0, 0, 1),
205
+ Colors::RGBA.parse("#00000001"))
206
+ end
207
+
208
+ test("for #rgb") do
209
+ assert_equal(Colors::RGBA.new(0x33, 0x66, 0x99, 0xff),
210
+ Colors::RGBA.parse("#369"))
211
+ end
212
+
213
+ test("for #rrggbb") do
214
+ assert_equal(Colors::RGBA.new(0x33, 0x66, 0x99, 0xff),
215
+ Colors::RGBA.parse("#336699"))
216
+ end
217
+
218
+ test("error cases") do
219
+ assert_raise(ArgumentError) do
220
+ Colors::RGBA.parse(nil)
221
+ end
222
+
223
+ assert_raise(ArgumentError) do
224
+ Colors::RGBA.parse(1)
225
+ end
226
+
227
+ assert_raise(ArgumentError) do
228
+ Colors::RGBA.parse("")
229
+ end
230
+
231
+ assert_raise(ArgumentError) do
232
+ Colors::RGBA.parse("333")
233
+ end
234
+
235
+ assert_raise(ArgumentError) do
236
+ Colors::RGBA.parse("#xxx")
237
+ end
238
+ end
239
+ end
240
+
241
+ test("#to_hex_string") do
242
+ assert_equal("#00000000",
243
+ Colors::RGBA.new(0, 0, 0, 0).to_hex_string)
244
+ assert_equal("#ff000000",
245
+ Colors::RGBA.new(1r, 0, 0, 0).to_hex_string)
246
+ assert_equal("#00ff0000",
247
+ Colors::RGBA.new(0, 1r, 0, 0).to_hex_string)
248
+ assert_equal("#0000ff00",
249
+ Colors::RGBA.new(0, 0, 1r, 0).to_hex_string)
250
+ assert_equal("#000000ff",
251
+ Colors::RGBA.new(0, 0, 0, 1r).to_hex_string)
252
+ assert_equal("#ffffffff",
253
+ Colors::RGBA.new(1r, 1r, 1r, 1r).to_hex_string)
254
+ assert_equal("#80808080",
255
+ Colors::RGBA.new(0.5, 0.5, 0.5, 0.5).to_hex_string)
256
+ assert_equal("#33333333",
257
+ Colors::RGBA.new(0x33, 0x33, 0x33, 0x33).to_hex_string)
258
+ end
259
+
260
+ test("to_rgb") do
261
+ black = Colors::RGBA.new(0, 0, 0, 1.0)
262
+ assert_equal(Colors::RGB.new(0, 0, 0),
263
+ black.to_rgb)
264
+
265
+ assert_raise(NotImplementedError) do
266
+ Colors::RGBA.new(0, 0, 0, 0).to_rgb
267
+ end
268
+ end
269
+
270
+ test("to_rgba") do
271
+ black = Colors::RGBA.new(0, 0, 0, 1.0)
272
+ assert_same(black, black.to_rgba)
273
+ end
274
+
275
+ test("#to_hsl") do
276
+ # black
277
+ assert_equal(Colors::HSL.new(0r, 0r, 0r),
278
+ Colors::RGB.new(0r, 0r, 0r).to_hsl)
279
+ # red
280
+ assert_equal(Colors::HSL.new(0r, 1r, 0.5r),
281
+ Colors::RGB.new(1r, 0r, 0r).to_hsl)
282
+ # yellow
283
+ assert_equal(Colors::HSL.new(60r, 1r, 0.5r),
284
+ Colors::RGB.new(1r, 1r, 0r).to_hsl)
285
+ # green
286
+ assert_equal(Colors::HSL.new(120r, 1r, 0.5r),
287
+ Colors::RGB.new(0r, 1r, 0r).to_hsl)
288
+ # cyan
289
+ assert_equal(Colors::HSL.new(180r, 1r, 0.5r),
290
+ Colors::RGB.new(0r, 1r, 1r).to_hsl)
291
+ # blue
292
+ assert_equal(Colors::HSL.new(240r, 1r, 0.5r),
293
+ Colors::RGB.new(0r, 0r, 1r).to_hsl)
294
+ # magenta
295
+ assert_equal(Colors::HSL.new(300r, 1r, 0.5r),
296
+ Colors::RGB.new(1r, 0r, 1r).to_hsl)
297
+ # white
298
+ assert_equal(Colors::HSL.new(0r, 0r, 1r),
299
+ Colors::RGB.new(1r, 1r, 1r).to_hsl)
300
+
301
+ assert_raise(NotImplementedError) do
302
+ Colors::RGBA.new(0, 0, 0, 0).to_hsl
303
+ end
304
+ end
305
+
306
+ test("#to_hsla") do
307
+ # black
308
+ assert_equal(Colors::HSLA.new(0r, 0r, 0r, 0.8r),
309
+ Colors::RGBA.new(0r, 0r, 0r, 0.8r).to_hsla)
310
+ # red
311
+ assert_equal(Colors::HSLA.new(0r, 1r, 0.5r, 0.8r),
312
+ Colors::RGBA.new(1r, 0r, 0r, 0.8r).to_hsla)
313
+ # yellow
314
+ assert_equal(Colors::HSLA.new(60r, 1r, 0.5r, 0.8r),
315
+ Colors::RGBA.new(1r, 1r, 0r, 0.8r).to_hsla)
316
+ # green
317
+ assert_equal(Colors::HSLA.new(120r, 1r, 0.5r, 0.8r),
318
+ Colors::RGBA.new(0r, 1r, 0r, 0.8r).to_hsla)
319
+ # cyan
320
+ assert_equal(Colors::HSLA.new(180r, 1r, 0.5r, 0.8r),
321
+ Colors::RGBA.new(0r, 1r, 1r, 0.8r).to_hsla)
322
+ # blue
323
+ assert_equal(Colors::HSLA.new(240r, 1r, 0.5r, 0.8r),
324
+ Colors::RGBA.new(0r, 0r, 1r, 0.8r).to_hsla)
325
+ # magenta
326
+ assert_equal(Colors::HSLA.new(300r, 1r, 0.5r, 0.8r),
327
+ Colors::RGBA.new(1r, 0r, 1r, 0.8r).to_hsla)
328
+ # white
329
+ assert_equal(Colors::HSLA.new(0r, 0r, 1r, 0.8r),
330
+ Colors::RGBA.new(1r, 1r, 1r, 0.8r).to_hsla)
331
+ end
332
+ end
data/test/test-xyz.rb ADDED
@@ -0,0 +1,10 @@
1
+ class ColorsXYZTest < Test::Unit::TestCase
2
+ sub_test_case("#luv_components") do
3
+ test("on ITU-R BT.709 D65 white point") do
4
+ l, u, v = Colors::XYZ.from_rgb(0r, 0r, 0r).luv_components(Colors::WHITE_POINT_D65)
5
+ assert_in_delta(0, l)
6
+ assert_in_delta(0, u)
7
+ assert_in_delta(0, v)
8
+ end
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: red-colors
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kenta Murata
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
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'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: kramdown
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: numo-narray
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: ''
98
+ email:
99
+ - mrkn@mrkn.jp
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".yardopts"
105
+ - Gemfile
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - lib/colors.rb
110
+ - lib/colors/abstract_color.rb
111
+ - lib/colors/alpha_component.rb
112
+ - lib/colors/color_data.rb
113
+ - lib/colors/helper.rb
114
+ - lib/colors/hsl.rb
115
+ - lib/colors/hsla.rb
116
+ - lib/colors/husl.rb
117
+ - lib/colors/named_colors.rb
118
+ - lib/colors/rgb.rb
119
+ - lib/colors/rgba.rb
120
+ - lib/colors/version.rb
121
+ - lib/colors/xyz.rb
122
+ - red-colors.gemspec
123
+ - test/helper.rb
124
+ - test/run.rb
125
+ - test/test-hsl.rb
126
+ - test/test-hsla.rb
127
+ - test/test-husl.rb
128
+ - test/test-named-color.rb
129
+ - test/test-rgb.rb
130
+ - test/test-rgba.rb
131
+ - test/test-xyz.rb
132
+ homepage: https://github.com/red-data-tools/red-colors
133
+ licenses:
134
+ - MIT
135
+ metadata: {}
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubygems_version: 3.0.6
152
+ signing_key:
153
+ specification_version: 4
154
+ summary: Red Colors provides a wide array of features for dealing with colors. This
155
+ includes conversion between colorspaces, desaturation, and parsing colors.
156
+ test_files:
157
+ - test/test-named-color.rb
158
+ - test/test-hsl.rb
159
+ - test/test-husl.rb
160
+ - test/test-xyz.rb
161
+ - test/test-hsla.rb
162
+ - test/helper.rb
163
+ - test/test-rgb.rb
164
+ - test/test-rgba.rb
165
+ - test/run.rb