notes/node_modules/color-diff/test/diff.js

451 lines
18 KiB
JavaScript

/**
* @author Markus Ekholm
* @copyright 2012-2015 (c) Markus Ekholm <markus at botten dot org >
* @license Copyright (c) 2012-2015, Markus Ekholm
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the <organization> nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL MARKUS EKHOLM BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* IMPORTS
*/
var assert = require('assert');
var color_diff = require('../lib/diff');
/**
* TESTS
*/
/**
* CIEDE2000 tests the diff.cie2000.
* Cases taken from the paper "The CIEDE2000 Color-Difference Formula:
* Implementation Notes, Supplementary Test Data, and Mathematical Observations"
* by Gaurav Sharma, Wencheng Wu and Edul N. Dalal.
*/
describe('diff', function(){
describe('#ciede2000()', function(){
it("should use the true chroma difference (#1)", function(){
assert_ciede2000_diff(2.0425,
{"L" : 50.0000,
"a" : 2.6772,
"b" : -79.7751
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : -82.7485
});
});
it("should use the true chroma difference (#2)", function(){
assert_ciede2000_diff(2.8615,
{"L" : 50.0000,
"a" : 3.1571,
"b" : -77.2803
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : -82.7485
});
});
it("should use the true chroma difference (#3)", function(){
assert_ciede2000_diff(3.4412,
{"L" : 50.0000,
"a" : 2.8361,
"b" : -74.0200
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : -82.7485
});
});
it("should use the true hue difference (#4)", function(){
assert_ciede2000_diff(1.0000,
{"L" : 50.0000,
"a" : -1.3802,
"b" : -84.2814
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : -82.7485
});
});
it("should use the true hue difference (#5)", function(){
assert_ciede2000_diff(1.0000,
{"L" : 50.0000,
"a" : -1.1848,
"b" : -84.8006
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : -82.7485
});
});
it("should use the true hue difference (#6)", function(){
assert_ciede2000_diff(1.0000,
{"L" : 50.0000,
"a" : -0.9009,
"b" : -85.5211
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : -82.7485
});
});
it("should use the correct arctangent computation (#7)", function(){
assert_ciede2000_diff(2.3669,
{"L" : 50.0000,
"a" : 0.0000,
"b" : 0.0000
},
{"L" : 50.0000,
"a" : -1.0000,
"b" : 2.0000
});
});
it("should use the correct arctangent computation (#8)", function(){
assert_ciede2000_diff(2.3669,
{"L" : 50.0000,
"a" : -1.0000,
"b" : 2.0000
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : 0.0000
});
});
it("should use the correct arctangent computation (#9)", function(){
assert_ciede2000_diff(7.1792,
{"L" : 50.0000,
"a" : 2.4900,
"b" : -0.0010
},
{"L" : 50.0000,
"a" : -2.4900,
"b" : 0.0009
});
});
it("should use the correct arctangent computation (#10)", function(){
assert_ciede2000_diff(7.1792,
{"L" : 50.0000,
"a" : 2.4900,
"b" : -0.0010
},
{"L" : 50.0000,
"a" : -2.4900,
"b" : 0.0010
});
});
it("should use the correct arctangent computation (#11)", function(){
assert_ciede2000_diff(7.2195,
{"L" : 50.0000,
"a" : 2.4900,
"b" : -0.0010
},
{"L" : 50.0000,
"a" : -2.4900,
"b" : 0.0011
});
});
it("should use the correct arctangent computation (#12)", function(){
assert_ciede2000_diff(7.2195,
{"L" : 50.0000,
"a" : 2.4900,
"b" : -0.0010
},
{"L" : 50.0000,
"a" : -2.4900,
"b" : 0.0012
});
});
it("should use the correct arctangent computation (#13)", function(){
assert_ciede2000_diff(4.8045,
{"L" : 50.0000,
"a" : -0.0010,
"b" : 2.4900
},
{"L" : 50.0000,
"a" : 0.0009,
"b" : -2.4900
});
});
it("should use the correct arctangent computation (#14)", function(){
assert_ciede2000_diff(4.8045,
{"L" : 50.0000,
"a" : -0.0010,
"b" : 2.4900
},
{"L" : 50.0000,
"a" : 0.0010,
"b" : -2.4900
});
});
it("should use the correct arctangent computation (#15)", function(){
assert_ciede2000_diff(4.7461,
{"L" : 50.0000,
"a" : -0.0010,
"b" : 2.4900
},
{"L" : 50.0000,
"a" : 0.0011,
"b" : -2.4900
});
});
it("should use the correct arctangent computation (#16)", function(){
assert_ciede2000_diff(4.3065,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 50.0000,
"a" : 0.0000,
"b" : -2.5000
});
});
it("should work for large color differences (#17)", function(){
assert_ciede2000_diff(27.1492,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 73.0000,
"a" : 25.0000,
"b" : -18.0000
});
});
it("should work for large color differences (#18)", function(){
assert_ciede2000_diff(22.8977,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 61.0000,
"a" : -5.0000,
"b" : 29.0000
});
});
it("should work for large color differences (#19)", function(){
assert_ciede2000_diff(31.9030,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 56.0000,
"a" : -27.0000,
"b" : -3.0000
});
});
it("should work for large color differences (#20)", function(){
assert_ciede2000_diff(19.4535,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 58.0000,
"a" : 24.0000,
"b" : 15.0000
});
});
it("should produce numbers found in the CIE technical report (#21)", function(){
assert_ciede2000_diff(1.0000,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 50.0000,
"a" : 3.1736,
"b" : 0.5854
});
});
it("should produce numbers found in the CIE technical report (#22)", function(){
assert_ciede2000_diff(1.0000,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 50.0000,
"a" : 3.2972,
"b" : 0.0000
});
});
it("should produce numbers found in the CIE technical report (#23)", function(){
assert_ciede2000_diff(1.0000,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 50.0000,
"a" : 1.8634,
"b" : 0.5757
});
});
it("should produce numbers found in the CIE technical report (#24)", function(){
assert_ciede2000_diff(1.0000,
{"L" : 50.0000,
"a" : 2.5000,
"b" : 0.0000
},
{"L" : 50.0000,
"a" : 3.2592,
"b" : 0.3350
});
});
it("should produce numbers found in the CIE technical report (#25)", function(){
assert_ciede2000_diff(1.2644,
{"L" : 60.2574,
"a" : -34.0099,
"b" : 36.2677
},
{"L" : 60.4626,
"a" : -34.1751,
"b" : 39.4387
});
});
it("should produce numbers found in the CIE technical report (#26)", function(){
assert_ciede2000_diff(1.2630,
{"L" : 63.0109,
"a" : -31.0961,
"b" : -5.8663
},
{"L" : 62.8187,
"a" : -29.7946,
"b" : -4.0864
});
});
it("should produce numbers found in the CIE technical report (#27)", function(){
assert_ciede2000_diff(1.8731,
{"L" : 61.2901,
"a" : 3.7196,
"b" : -5.3901
},
{"L" : 61.4292,
"a" : 2.2480,
"b" : -4.9620
});
});
it("should produce numbers found in the CIE technical report (#28)", function(){
assert_ciede2000_diff(1.8645,
{"L" : 35.0831,
"a" : -44.1164,
"b" : 3.7933
},
{"L" : 35.0232,
"a" : -40.0716,
"b" : 1.5901
});
});
it("should produce numbers found in the CIE technical report (#29)", function(){
assert_ciede2000_diff(2.0373,
{"L" : 22.7233,
"a" : 20.0904,
"b" : -46.6940
},
{"L" : 23.0331,
"a" : 14.9730,
"b" : -42.5619
});
});
it("should produce numbers found in the CIE technical report (#30)", function(){
assert_ciede2000_diff(1.4146,
{"L" : 36.4612,
"a" : 47.8580,
"b" : 18.3852
},
{"L" : 36.2715,
"a" : 50.5065,
"b" : 21.2231
});
});
it("should produce numbers found in the CIE technical report (#31)", function(){
assert_ciede2000_diff(1.4441,
{"L" : 90.8027,
"a" : -2.0831,
"b" : 1.4410
},
{"L" : 91.1528,
"a" : -1.6435,
"b" : 0.0447
});
});
it("should produce numbers found in the CIE technical report (#32)", function(){
assert_ciede2000_diff(1.5381,
{"L" : 90.9257,
"a" : -0.5406,
"b" : -0.9208
},
{"L" : 88.6381,
"a" : -0.8985,
"b" : -0.7239
});
});
it("should produce numbers found in the CIE technical report (#33)", function(){
assert_ciede2000_diff(0.6377,
{"L" : 6.7747,
"a" : -0.2908,
"b" : -2.4247
},
{"L" : 5.8714,
"a" : -0.0985,
"b" : -2.2286
});
});
it("should produce numbers found in the CIE technical report (#34)", function(){
assert_ciede2000_diff(0.9082,
{"L" : 2.0776,
"a" : 0.0795,
"b" : -1.1350
},
{"L" : 0.9033,
"a" : -0.0636,
"b" : -0.5514
});
});
it("should throw error", function(){
assert.throws(
function(){ color_diff.ciede2000({"L" : NaN,
"a" : NaN,
"b" : NaN},
{"L" : 0,
"a" : 0,
"b" : 0
})
},
Error)
});
})
});
/**
* INTERNAL FUNCTIONS
*/
function assert_ciede2000_diff(expected, c1, c2){
assert.equal(expected, round(color_diff.ciede2000(c1, c2)));
assert.equal(expected, round(color_diff.ciede2000(c2, c1)));
}
function round(n){ return Math.round(n*10000)/10000; }
// Local Variables:
// allout-layout: t
// js-indent-level: 2
// End: