hsv2rgb
Version:
convert from hsv/hsb to rgb
41 lines (35 loc) • 1.44 kB
JavaScript
var test = require('tape');
var hsv = require('./hsv2rgb');
var tests = [
['Black (#000000)' , [ 0, 0, 0], '0,0,0'],
['White (#FFFFFF)' , [ 0, 0, 1.0], '255,255,255'],
['Red (#FF0000)' , [ 0, 1, 1.0], '255,0,0'],
['Lime (#00FF00)' , [120, 1, 1.0], '0,255,0'],
['Blue (#0000FF)' , [240, 1, 1.0], '0,0,255'],
['Yellow (#FFFF00)' , [ 60, 1, 1.0], '255,255,0'],
['Cyan (#00FFFF)' , [180, 1, 1.0], '0,255,255'],
['Magenta (#FF00FF)', [300, 1, 1.0], '255,0,255'],
['Silver (#C0C0C0)' , [ 0, 0, .75], '192,192,192'],
['Gray (#808080)' , [ 0, 0, .50], '128,128,128'],
['Maroon (#800000)' , [ 0, 1, .50], '128,0,0'],
['Olive (#808000)' , [ 60, 1, .50], '128,128,0'],
['Green (#008000)' , [120, 1, .50], '0,128,0'],
['Purple (#800080)' , [300, 1, .50], '128,0,128'],
['Teal (#008080)' , [180, 1, .50], '0,128,128'],
['Navy (#000080)' , [240, 1, .50], '0,0,128'],
['pinkish (#FF0048)', [343, 1, 1.0], '255,0,72'],
];
test('a bunch of common colors', function(t) {
tests.forEach(function(a) {
var rgb = hsv(a[1][0], a[1][1], a[1][2]);
t.equal(rgb.join(','), a[2], a[0]);
});
t.end();
});
test('wrapping on h and clamping on s, v', function(t) {
t.deepEqual(hsv(360 + 359, 1.0, 1.0), [255, 0, 4]);
t.deepEqual(hsv(360 + 359, 1.0, 2.0), [255, 0, 4]);
t.deepEqual(hsv(360 + 359, 2.0, 1.0), [255, 0, 4]);
t.deepEqual(hsv(360 + 359, 2.0, 2.0), [255, 0, 4]);
t.end();
});