[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master e7d6c62: Add tests for color.el
From: |
Simen Heggest�yl |
Subject: |
[Emacs-diffs] master e7d6c62: Add tests for color.el |
Date: |
Wed, 13 Sep 2017 14:24:19 -0400 (EDT) |
branch: master
commit e7d6c622090dd2f4c77fbd04aba89c30a75514dd
Author: Simen Heggestøyl <address@hidden>
Commit: Simen Heggestøyl <address@hidden>
Add tests for color.el
* lisp/color.el (color-name-to-rgb, color-complement): Clarify in
docstrings that RGB triplets should use four digits per component.
(color-rgb-to-hsl): Break line to avoid "Hidden behind deeper element"
warning.
* test/lisp/color-tests.el: New file.
---
lisp/color.el | 8 +-
test/lisp/color-tests.el | 251 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 256 insertions(+), 3 deletions(-)
diff --git a/lisp/color.el b/lisp/color.el
index 22b6808..e22b3cf 100644
--- a/lisp/color.el
+++ b/lisp/color.el
@@ -42,7 +42,7 @@
(defun color-name-to-rgb (color &optional frame)
"Convert COLOR string to a list of normalized RGB components.
COLOR should be a color name (e.g. \"white\") or an RGB triplet
-string (e.g. \"#ff12ec\").
+string (e.g. \"#ffff1122eecc\").
Normally the return value is a list of three floating-point
numbers, (RED GREEN BLUE), each between 0.0 and 1.0 inclusive.
@@ -68,7 +68,8 @@ or 2; use the latter if you need a 24-bit specification of a
color."
(defun color-complement (color-name)
"Return the color that is the complement of COLOR-NAME.
COLOR-NAME should be a string naming a color (e.g. \"white\"), or
-a string specifying a color's RGB components (e.g. \"#ff12ec\")."
+a string specifying a color's RGB
+components (e.g. \"#ffff1212ecec\")."
(let ((color (color-name-to-rgb color-name)))
(list (- 1.0 (nth 0 color))
(- 1.0 (nth 1 color))
@@ -178,7 +179,8 @@ each element is between 0.0 and 1.0, inclusive."
((= r max) (- bc gc))
((= g max) (+ 2.0 rc (- bc)))
(t (+ 4.0 gc (- rc))))
- 6.0) 1.0)))
+ 6.0)
+ 1.0)))
(list h s l)))))
(defun color-srgb-to-xyz (red green blue)
diff --git a/test/lisp/color-tests.el b/test/lisp/color-tests.el
new file mode 100644
index 0000000..0ea7fdb
--- /dev/null
+++ b/test/lisp/color-tests.el
@@ -0,0 +1,251 @@
+;;; color-tests.el --- Tests for color.el -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2017 Free Software Foundation, Inc.
+
+;; Author: Simen Heggestøyl <address@hidden>
+;; Keywords:
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'color)
+(require 'ert)
+(require 'seq)
+
+(defun color-tests--approx-equal (color1 color2)
+ "Return t if COLOR1 and COLOR2 are approximately equal."
+ (seq-every-p
+ (lambda (x) (< (abs x) 0.00001))
+ (cl-mapcar #'- color1 color2)))
+
+(ert-deftest color-tests-name-to-rgb ()
+ (should (equal (color-name-to-rgb "black") '(0.0 0.0 0.0)))
+ (should (equal (color-name-to-rgb "white") '(1.0 1.0 1.0)))
+ (should (equal (color-name-to-rgb "red") '(1.0 0.0 0.0)))
+ (should (equal (color-name-to-rgb "green") '(0.0 1.0 0.0)))
+ (should (equal (color-name-to-rgb "blue") '(0.0 0.0 1.0)))
+ (should (equal (color-name-to-rgb "#000000000000") '(0.0 0.0 0.0)))
+ (should (equal (color-name-to-rgb "#ffffffffffff") '(1.0 1.0 1.0)))
+ (should (equal (color-name-to-rgb "#ffff00000000") '(1.0 0.0 0.0)))
+ (should (equal (color-name-to-rgb "#0000ffff0000") '(0.0 1.0 0.0)))
+ (should (equal (color-name-to-rgb "#00000000ffff") '(0.0 0.0 1.0))))
+
+(ert-deftest color-tests-rgb-to-hex ()
+ (should (equal (color-rgb-to-hex 0 0 0) "#000000000000"))
+ (should (equal (color-rgb-to-hex 0 0 0 2) "#000000"))
+ (should (equal (color-rgb-to-hex 1 0 0) "#ffff00000000"))
+ (should (equal (color-rgb-to-hex 1 0 0 2) "#ff0000"))
+ (should (equal (color-rgb-to-hex 0.1 0.2 0.3) "#199933334ccc"))
+ (should (equal (color-rgb-to-hex 0.1 0.2 0.3 2) "#19334c")))
+
+(ert-deftest color-tests-complement ()
+ (should (equal (color-complement "white") '(0.0 0.0 0.0)))
+ (should (equal (color-complement "#ffffffffffff") '(0.0 0.0 0.0)))
+ (should (equal (color-complement "red") '(0.0 1.0 1.0))))
+
+(ert-deftest color-tests-gradient ()
+ (should-not (color-gradient '(0 0 0) '(255 255 255) 0))
+ (should
+ (equal (color-gradient '(0 0 0) '(255 255 255) 1)
+ '((127.5 127.5 127.5))))
+ (should
+ (equal (color-gradient '(0 0 0) '(255 255 255) 2)
+ '((85.0 85.0 85.0) (170.0 170.0 170.0))))
+ (should
+ (equal
+ (color-gradient '(255 192 203) '(250 128 114) 3)
+ '((253.75 176.0 180.75) (252.5 160.0 158.5) (251.25 144.0 136.25)))))
+
+(ert-deftest color-tests-hsl-to-rgb ()
+ (should (equal (color-hsl-to-rgb 0 0 0) '(0 0 0)))
+ (should (equal (color-hsl-to-rgb 360 0.5 0.5) '(0.75 0.25 0.25)))
+ (should (equal (color-hsl-to-rgb 123 0.2 0.9) '(0.92 0.88 0.88))))
+
+(ert-deftest color-tests-complement-hex ()
+ (should
+ (equal (color-complement-hex "#000000000000") "#ffffffffffff"))
+ (should
+ (equal (color-complement-hex "#ffff00000000") "#0000ffffffff")))
+
+(ert-deftest color-tests-rgb-to-hsv ()
+ (should (equal (color-rgb-to-hsv 0 0 0) '(0.0 0.0 0.0)))
+ (should (equal (color-rgb-to-hsv 1 1 1) '(0.0 0.0 1.0)))
+ (should (equal (color-rgb-to-hsv 1 0 0) '(0.0 1.0 1.0)))
+ (should (equal (color-rgb-to-hsv 0.5 0.3 0.3) '(0.0 0.4 0.5))))
+
+(ert-deftest color-tests-rgb-to-hsl ()
+ (should (equal (color-rgb-to-hsl 0 0 0) '(0.0 0.0 0.0)))
+ (should (equal (color-rgb-to-hsl 1 1 1) '(0.0 0.0 1.0)))
+ (should (equal (color-rgb-to-hsl 1 0 0) '(0.0 1 0.5)))
+ (should (equal (color-rgb-to-hsl 0.5 0.3 0.3) '(0.0 0.25 0.4))))
+
+(ert-deftest color-tests-srgb-to-xyz ()
+ (should (equal (color-srgb-to-xyz 0 0 0) '(0.0 0.0 0.0)))
+ (should
+ (equal (color-srgb-to-xyz 0 0 1) '(0.1804375 0.072175 0.9503041)))
+ (should
+ (color-tests--approx-equal
+ (color-srgb-to-xyz 0.1 0.2 0.3) '(0.0291865 0.031092 0.073738))))
+
+(ert-deftest color-tests-xyz-to-srgb ()
+ (should (equal (color-xyz-to-srgb 0 0 0) '(0.0 0.0 0.0)))
+ (should
+ (color-tests--approx-equal
+ (color-xyz-to-srgb 0.1804375 0.072175 0.9503041) '(0 0 1)))
+ (should
+ (color-tests--approx-equal
+ (color-xyz-to-srgb 0.0291865 0.031092 0.073738) '(0.1 0.2 0.3))))
+
+(ert-deftest color-tests-xyz-to-lab ()
+ (should (equal (color-xyz-to-lab 0 0 0) '(0.0 0.0 0.0)))
+ (should
+ (color-tests--approx-equal
+ (color-xyz-to-lab 0.1804375 0.072175 0.9503041)
+ '(32.2970109 79.1890315 -107.8646674)))
+ (should
+ (color-tests--approx-equal
+ (color-xyz-to-lab 0.1804375 0.072175 0.9503041 '(1 1 1))
+ '(32.2970109 74.3625763 -113.3597823)))
+ (should
+ (color-tests--approx-equal
+ (color-xyz-to-lab 0.0291865 0.031092 0.073738)
+ '(20.4760281 -0.6500752 -18.6340169))))
+
+(ert-deftest color-tests-lab-to-xyz ()
+ (should (equal (color-lab-to-xyz 0 0 0) '(0.0 0.0 0.0)))
+ (should
+ (color-tests--approx-equal
+ (color-lab-to-xyz 32.2970109 79.1890315 -107.8646674)
+ '(0.1804375 0.072175 0.9503041)))
+ (should
+ (color-tests--approx-equal
+ (color-lab-to-xyz 32.2970109 74.3625763 -113.3597823 '(1 1 1))
+ '(0.1804375 0.072175 0.9503041)))
+ (should
+ (color-tests--approx-equal
+ (color-lab-to-xyz 20.4760281 -0.6500752 -18.6340169)
+ '(0.0291865 0.031092 0.073738))))
+
+(ert-deftest color-tests-srgb-to-lab ()
+ (should (equal (color-srgb-to-lab 0 0 0) '(0.0 0.0 0.0)))
+ (should
+ (color-tests--approx-equal
+ (color-srgb-to-lab 0 1 0) '(87.7347223 -86.1808176 83.1770651)))
+ (should
+ (color-tests--approx-equal
+ (color-srgb-to-lab 0.1 0.2 0.3)
+ '(20.4762218 -0.6508996 -18.6340085))))
+
+(ert-deftest color-tests-lab-to-srgb ()
+ (should (equal (color-lab-to-srgb 0 0 0) '(0.0 0.0 0.0)))
+ (should
+ (color-tests--approx-equal
+ (color-lab-to-srgb 87.7347223 -86.1808176 83.1770651) '(0 1 0)))
+ (should
+ (color-tests--approx-equal
+ (color-lab-to-srgb 20.4762218 -0.6508996 -18.6340085)
+ '(0.1 0.2 0.3))))
+
+(ert-deftest color-tests-cie-de2000 ()
+ (should (= (color-cie-de2000 '(0 0 0) '(0 0 0)) 0.0))
+ (should
+ (color-tests--approx-equal
+ (list
+ (color-cie-de2000
+ (color-srgb-to-lab 1 0 0) (color-srgb-to-lab 0 0 1)))
+ '(52.8803934)))
+ (should
+ (color-tests--approx-equal
+ (list
+ (color-cie-de2000
+ (color-srgb-to-lab 0.8 0 0) (color-srgb-to-lab 0.9 0 0)))
+ '(5.3844503))))
+
+(ert-deftest color-tests-clamp ()
+ (should (= (color-clamp 0) 0.0))
+ (should (= (color-clamp -1) 0.0))
+ (should (= (color-clamp 0.5) 0.5))
+ (should (= (color-clamp 1) 1.0))
+ (should (= (color-clamp 1.1) 1.0)))
+
+(ert-deftest color-tests-saturate-hsl ()
+ (should (equal (color-saturate-hsl 360 0.5 0.5 0) '(360 0.5 0.5)))
+ (should (equal (color-saturate-hsl 360 0.5 0.5 -10) '(360 0.4 0.5)))
+ (should
+ (equal (color-saturate-hsl 360 0.5 0.5 -500) '(360 0.0 0.5)))
+ (should (equal (color-saturate-hsl 120 0.5 0.8 5) '(120 0.55 0.8)))
+ (should
+ (equal (color-saturate-hsl 120 0.5 0.8 500) '(120 1.0 0.8))))
+
+(ert-deftest color-tests-saturate-name ()
+ (should (equal (color-saturate-name "black" 100) "#000000000000"))
+ (should (equal (color-saturate-name "white" 100) "#ffffffffffff"))
+ (should (equal (color-saturate-name "red" 0) "#ffff00000000"))
+ (should (equal (color-saturate-name "red" 50) "#ffff00000000")))
+
+(ert-deftest color-tests-desaturate-hsl ()
+ (should (equal (color-desaturate-hsl 360 0.5 0.5 0) '(360 0.5 0.5)))
+ (should
+ (equal (color-desaturate-hsl 360 0.5 0.5 -10) '(360 0.6 0.5)))
+ (should
+ (equal (color-desaturate-hsl 360 0.5 0.5 -500) '(360 1.0 0.5)))
+ (should
+ (equal (color-desaturate-hsl 120 0.5 0.8 5) '(120 0.45 0.8)))
+ (should
+ (equal (color-desaturate-hsl 120 0.5 0.8 500) '(120 0.0 0.8))))
+
+(ert-deftest color-tests-desaturate-name ()
+ (should (equal (color-desaturate-name "black" 100) "#000000000000"))
+ (should (equal (color-desaturate-name "white" 100) "#ffffffffffff"))
+ (should (equal (color-desaturate-name "red" 0) "#ffff00000000")))
+
+(ert-deftest color-tests-lighten-hsl ()
+ (should (equal (color-lighten-hsl 360 0.5 0.5 0) '(360 0.5 0.5)))
+ (should (equal (color-lighten-hsl 360 0.5 0.5 -10) '(360 0.5 0.4)))
+ (should (equal (color-lighten-hsl 360 0.5 0.5 -500) '(360 0.5 0.0)))
+ (should
+ (color-tests--approx-equal
+ (color-lighten-hsl 120 0.5 0.8 5) '(120 0.5 0.85)))
+ (should
+ (equal (color-lighten-hsl 120 0.5 0.8 500) '(120 0.5 1.0))))
+
+(ert-deftest color-tests-lighten-name ()
+ (should (equal (color-lighten-name "black" 100) "#ffffffffffff"))
+ (should (equal (color-lighten-name "white" 100) "#ffffffffffff"))
+ (should (equal (color-lighten-name "red" 0) "#ffff00000000"))
+ (should (equal (color-lighten-name "red" 10) "#ffff33323332")))
+
+(ert-deftest color-tests-darken-hsl ()
+ (should (equal (color-darken-hsl 360 0.5 0.5 0) '(360 0.5 0.5)))
+ (should (equal (color-darken-hsl 360 0.5 0.5 -10) '(360 0.5 0.6)))
+ (should (equal (color-darken-hsl 360 0.5 0.5 -500) '(360 0.5 1.0)))
+ (should (equal (color-darken-hsl 120 0.5 0.8 5) '(120 0.5 0.75)))
+ (should (equal (color-darken-hsl 120 0.5 0.8 500) '(120 0.5 0.0))))
+
+(ert-deftest color-tests-darken-name ()
+ (should (equal (color-darken-name "black" 100) "#000000000000"))
+ (should (equal (color-darken-name "white" 100) "#000000000000"))
+ (should (equal (color-darken-name "red" 0) "#ffff00000000"))
+ (should (equal (color-darken-name "red" 10) "#cccc00000000")))
+
+(provide 'color-tests)
+;;; color-tests.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master e7d6c62: Add tests for color.el,
Simen Heggest�yl <=