red-colors 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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