DISTRHO Plugin Framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

222 lines
11KB

  1. /*
  2. * DISTRHO Plugin Framework (DPF)
  3. * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any purpose with
  6. * or without fee is hereby granted, provided that the above copyright notice and this
  7. * permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
  10. * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
  11. * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  13. * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #include "tests.hpp"
  17. #define DPF_TEST_COLOR_CPP
  18. #include "dgl/src/Application.cpp"
  19. #include "dgl/src/ApplicationPrivateData.cpp"
  20. #include "dgl/src/Color.cpp"
  21. // --------------------------------------------------------------------------------------------------------------------
  22. int main()
  23. {
  24. using DGL_NAMESPACE::Color;
  25. // constructor with no arguments, must give solid black
  26. {
  27. Color c;
  28. DISTRHO_ASSERT_EQUAL(c.red, 0.0f, "red value is 0");
  29. DISTRHO_ASSERT_EQUAL(c.green, 0.0f, "green value is 0");
  30. DISTRHO_ASSERT_EQUAL(c.blue, 0.0f, "blue value is 0");
  31. DISTRHO_ASSERT_EQUAL(c.alpha, 1.0f, "alpha value is 1");
  32. }
  33. // constructor gives correct floating-point values (arguments are r, g, b, a; in order)
  34. {
  35. Color c(0.1f, 0.2f, 0.3f, 0.4f);
  36. DISTRHO_ASSERT_EQUAL(c.red, 0.1f, "red value is 0.1");
  37. DISTRHO_ASSERT_EQUAL(c.green, 0.2f, "green value is 0.2");
  38. DISTRHO_ASSERT_EQUAL(c.blue, 0.3f, "blue value is 0.3");
  39. DISTRHO_ASSERT_EQUAL(c.alpha, 0.4f, "alpha value is 0.4");
  40. }
  41. // constructor gives correct integer values normalized to float (arguments are r, g, b, a; in order)
  42. {
  43. Color c(51, 102, 153);
  44. DISTRHO_ASSERT_SAFE_EQUAL(c.red, 0.2f, "red value is 0.2 (integer 51)");
  45. DISTRHO_ASSERT_SAFE_EQUAL(c.green, 0.4f, "green value is 0.4 (integer 102)");
  46. DISTRHO_ASSERT_SAFE_EQUAL(c.blue, 0.6f, "blue value is 0.6 (integer 153)");
  47. DISTRHO_ASSERT_SAFE_EQUAL(c.alpha, 1.0f, "alpha value is 1");
  48. Color white(255, 255, 255);
  49. DISTRHO_ASSERT_EQUAL(white.red, 1.0f, "white's red value is 1");
  50. DISTRHO_ASSERT_EQUAL(white.green, 1.0f, "white's green value is 1");
  51. DISTRHO_ASSERT_EQUAL(white.blue, 1.0f, "white's blue value is 1");
  52. DISTRHO_ASSERT_EQUAL(white.alpha, 1.0f, "white alpha value is 1");
  53. }
  54. // copy colors around
  55. {
  56. Color black;
  57. Color halfTransparentWhite(1.0f, 1.0f, 1.0f, 0.5f);
  58. // constructor copy
  59. Color test(halfTransparentWhite);
  60. DISTRHO_ASSERT_EQUAL(test.red, 1.0f, "copied white's red value is 1.0");
  61. DISTRHO_ASSERT_EQUAL(test.green, 1.0f, "copied white's green value is 1");
  62. DISTRHO_ASSERT_EQUAL(test.blue, 1.0f, "copied white's blue value is 1");
  63. DISTRHO_ASSERT_EQUAL(test.alpha, 0.5f, "copied white's alpha value is 0.5");
  64. // assign operator
  65. test = black;
  66. DISTRHO_ASSERT_EQUAL(test.red, 0.0f, "assigned black's red value is 0");
  67. DISTRHO_ASSERT_EQUAL(test.green, 0.0f, "assigned black's green value is 0");
  68. DISTRHO_ASSERT_EQUAL(test.blue, 0.0f, "assigned black's blue value is 0");
  69. DISTRHO_ASSERT_EQUAL(test.alpha, 1.0f, "assigned black's alpha value is 1");
  70. }
  71. // simple color comparisons
  72. {
  73. Color black1, black2;
  74. Color white(1.0f, 1.0f, 1.0f);
  75. Color halfTransparentWhite(1.0f, 1.0f, 1.0f, 0.5f);
  76. // logic operators
  77. DISTRHO_ASSERT_EQUAL(black1, black1, "color equals itself");
  78. DISTRHO_ASSERT_EQUAL(black1, black2, "black equals black");
  79. DISTRHO_ASSERT_NOT_EQUAL(black1, white, "black is not white");
  80. DISTRHO_ASSERT_NOT_EQUAL(black1, halfTransparentWhite, "black is not half-transparent white");
  81. DISTRHO_ASSERT_NOT_EQUAL(white, halfTransparentWhite, "white is not half-transparent white");
  82. // class functions (truthful)
  83. DISTRHO_ASSERT_EQUAL(black1.isEqual(black1), true, "color equals itself");
  84. DISTRHO_ASSERT_EQUAL(black1.isEqual(black2), true, "black equals black");
  85. DISTRHO_ASSERT_EQUAL(black1.isNotEqual(white), true, "black is not white");
  86. DISTRHO_ASSERT_EQUAL(white.isNotEqual(halfTransparentWhite), true, "white is not half-transparent white");
  87. // class functions (inverted)
  88. DISTRHO_ASSERT_EQUAL(black1.isNotEqual(black1), false, "color equals itself");
  89. DISTRHO_ASSERT_EQUAL(black1.isNotEqual(black2), false, "black equals black");
  90. DISTRHO_ASSERT_EQUAL(black1.isEqual(white), false, "black is not white");
  91. DISTRHO_ASSERT_EQUAL(white.isEqual(halfTransparentWhite), false, "white is not half-transparent white");
  92. // class functions ignoring alpha
  93. DISTRHO_ASSERT_EQUAL(black1.isEqual(black1, false), true, "color equals itself");
  94. DISTRHO_ASSERT_EQUAL(black1.isEqual(black2, false), true, "black equals black");
  95. DISTRHO_ASSERT_EQUAL(black1.isNotEqual(white, false), true, "black is not white");
  96. DISTRHO_ASSERT_EQUAL(white.isEqual(halfTransparentWhite, false), true,
  97. "white is half-transparent white if we ignore alpha");
  98. }
  99. // TODO advanced color comparisons
  100. {
  101. }
  102. // TODO fromHSL
  103. {
  104. }
  105. // create colors from html strings
  106. {
  107. Color c000 = Color::fromHTML("#000");
  108. DISTRHO_ASSERT_EQUAL(c000.red, 0.0f, "#000 red value is 0");
  109. DISTRHO_ASSERT_EQUAL(c000.green, 0.0f, "#000 green value is 0");
  110. DISTRHO_ASSERT_EQUAL(c000.blue, 0.0f, "#000 blue value is 0");
  111. DISTRHO_ASSERT_EQUAL(c000.alpha, 1.0f, "#000 alpha value is 1");
  112. Color c000000 = Color::fromHTML("#000000");
  113. DISTRHO_ASSERT_EQUAL(c000000.red, 0.0f, "#000000 red value is 0");
  114. DISTRHO_ASSERT_EQUAL(c000000.green, 0.0f, "#000000 green value is 0");
  115. DISTRHO_ASSERT_EQUAL(c000000.blue, 0.0f, "#000000 blue value is 0");
  116. DISTRHO_ASSERT_EQUAL(c000000.alpha, 1.0f, "#000000 alpha value is 1");
  117. Color cfff = Color::fromHTML("#fff");
  118. DISTRHO_ASSERT_EQUAL(cfff.red, 1.0f, "#fff red value is 1");
  119. DISTRHO_ASSERT_EQUAL(cfff.green, 1.0f, "#fff green value is 1");
  120. DISTRHO_ASSERT_EQUAL(cfff.blue, 1.0f, "#fff blue value is 1");
  121. DISTRHO_ASSERT_EQUAL(cfff.alpha, 1.0f, "#fff alpha value is 1");
  122. Color cffffff = Color::fromHTML("#ffffff");
  123. DISTRHO_ASSERT_EQUAL(cffffff.red, 1.0f, "#ffffff red value is 1");
  124. DISTRHO_ASSERT_EQUAL(cffffff.green, 1.0f, "#ffffff green value is 1");
  125. DISTRHO_ASSERT_EQUAL(cffffff.blue, 1.0f, "#ffffff blue value is 1");
  126. DISTRHO_ASSERT_EQUAL(cffffff.alpha, 1.0f, "#ffffff alpha value is 1");
  127. Color cf00 = Color::fromHTML("#f00");
  128. DISTRHO_ASSERT_EQUAL(cf00.red, 1.0f, "#f00 red value is 1");
  129. DISTRHO_ASSERT_EQUAL(cf00.green, 0.0f, "#f00 green value is 0");
  130. DISTRHO_ASSERT_EQUAL(cf00.blue, 0.0f, "#f00 blue value is 0");
  131. Color cff0000 = Color::fromHTML("#ff0000");
  132. DISTRHO_ASSERT_EQUAL(cff0000.red, 1.0f, "#ff0000 red value is 1");
  133. DISTRHO_ASSERT_EQUAL(cff0000.green, 0.0f, "#ff0000 green value is 0");
  134. DISTRHO_ASSERT_EQUAL(cff0000.blue, 0.0f, "#ff0000 blue value is 0");
  135. Color c0f0 = Color::fromHTML("#0f0");
  136. DISTRHO_ASSERT_EQUAL(c0f0.red, 0.0f, "#0f0 red value is 0");
  137. DISTRHO_ASSERT_EQUAL(c0f0.green, 1.0f, "#0f0 green value is 1");
  138. DISTRHO_ASSERT_EQUAL(c0f0.blue, 0.0f, "#0f0 blue value is 0");
  139. Color c00ff00 = Color::fromHTML("#00ff00");
  140. DISTRHO_ASSERT_EQUAL(c00ff00.red, 0.0f, "#00ff00 red value is 0");
  141. DISTRHO_ASSERT_EQUAL(c00ff00.green, 1.0f, "#00ff00 green value is 1");
  142. DISTRHO_ASSERT_EQUAL(c00ff00.blue, 0.0f, "#00ff00 blue value is 0");
  143. Color c00f = Color::fromHTML("#00f");
  144. DISTRHO_ASSERT_EQUAL(c00f.red, 0.0f, "#00f red value is 0");
  145. DISTRHO_ASSERT_EQUAL(c00f.green, 0.0f, "#00f green value is 0");
  146. DISTRHO_ASSERT_EQUAL(c00f.blue, 1.0f, "#00f blue value is 1");
  147. Color c0000ff = Color::fromHTML("#0000ff");
  148. DISTRHO_ASSERT_EQUAL(c0000ff.red, 0.0f, "#0000ff red value is 0");
  149. DISTRHO_ASSERT_EQUAL(c0000ff.green, 0.0f, "#0000ff green value is 0");
  150. DISTRHO_ASSERT_EQUAL(c0000ff.blue, 1.0f, "#0000ff blue value is 1");
  151. // half point, round to 1 decimal point due to precision loss
  152. Color grey = Color::fromHTML("#7b7b7b");
  153. DISTRHO_ASSERT_SAFE_EQUAL(std::round(grey.red*10)/10, 0.5f, "grey's rounded red value is 0.5");
  154. DISTRHO_ASSERT_SAFE_EQUAL(std::round(grey.green*10)/10, 0.5f, "grey's rounded green value is 0.5");
  155. DISTRHO_ASSERT_SAFE_EQUAL(std::round(grey.blue*10)/10, 0.5f, "grey's rounded blue value is 0.5");
  156. }
  157. // check bounds
  158. {
  159. Color negativeInteger(-1, -1, -1, -1.0f);
  160. DISTRHO_ASSERT_EQUAL(negativeInteger.red, 0.0f, "red value is 0");
  161. DISTRHO_ASSERT_EQUAL(negativeInteger.green, 0.0f, "green value is 0");
  162. DISTRHO_ASSERT_EQUAL(negativeInteger.blue, 0.0f, "blue value is 0");
  163. DISTRHO_ASSERT_EQUAL(negativeInteger.alpha, 0.0f, "alpha value is 0");
  164. Color negativeFloat(-1.0f, -1.0f, -1.0f, -1.0f);
  165. DISTRHO_ASSERT_EQUAL(negativeFloat.red, 0.0f, "red value is 0");
  166. DISTRHO_ASSERT_EQUAL(negativeFloat.green, 0.0f, "green value is 0");
  167. DISTRHO_ASSERT_EQUAL(negativeFloat.blue, 0.0f, "blue value is 0");
  168. DISTRHO_ASSERT_EQUAL(negativeFloat.alpha, 0.0f, "alpha value is 0");
  169. Color overflowInteger(0xfff, 0xfff, 0xfff, 0xfff);
  170. DISTRHO_ASSERT_EQUAL(overflowInteger.red, 1.0f, "red value is 1");
  171. DISTRHO_ASSERT_EQUAL(overflowInteger.green, 1.0f, "green value is 1");
  172. DISTRHO_ASSERT_EQUAL(overflowInteger.blue, 1.0f, "blue value is 1");
  173. DISTRHO_ASSERT_EQUAL(overflowInteger.alpha, 1.0f, "alpha value is 1");
  174. Color overflowFloat(2.0f, 2.0f, 2.0f, 2.0f);
  175. DISTRHO_ASSERT_EQUAL(overflowFloat.red, 1.0f, "red value is 1");
  176. DISTRHO_ASSERT_EQUAL(overflowFloat.green, 1.0f, "green value is 1");
  177. DISTRHO_ASSERT_EQUAL(overflowFloat.blue, 1.0f, "blue value is 1");
  178. DISTRHO_ASSERT_EQUAL(overflowFloat.alpha, 1.0f, "alpha value is 1");
  179. }
  180. // TODO interpolation
  181. {
  182. }
  183. return 0;
  184. }
  185. // --------------------------------------------------------------------------------------------------------------------