From 3d2d57cd30aae8d2811f679fcb30fd0e8f2ab2e9 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 28 Nov 2016 13:00:53 -0800 Subject: [core] Assert valid range for color components --- include/mbgl/util/color.hpp | 16 ++++++++++++++++ test/api/annotations.test.cpp | 32 ++++++++++++++++---------------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/include/mbgl/util/color.hpp b/include/mbgl/util/color.hpp index 7693ce636d..178d0dc758 100644 --- a/include/mbgl/util/color.hpp +++ b/include/mbgl/util/color.hpp @@ -2,6 +2,7 @@ #include +#include #include namespace mbgl { @@ -9,6 +10,19 @@ namespace mbgl { // Stores a premultiplied color, with all four channels ranging from 0..1 class Color { public: + constexpr Color() = default; + constexpr Color(float r_, float g_, float b_, float a_) + : r(r_), g(g_), b(b_), a(a_) { + assert(r_ >= 0.0f); + assert(r_ <= 1.0f); + assert(g_ >= 0.0f); + assert(g_ <= 1.0f); + assert(b_ >= 0.0f); + assert(b_ <= 1.0f); + assert(a_ >= 0.0f); + assert(a_ <= 1.0f); + } + float r = 0.0f; float g = 0.0f; float b = 0.0f; @@ -33,6 +47,8 @@ constexpr bool operator!=(const Color& colorA, const Color& colorB) { } constexpr Color operator*(const Color& color, float alpha) { + assert(alpha >= 0.0f); + assert(alpha <= 1.0f); return { color.r * alpha, color.g * alpha, diff --git a/test/api/annotations.test.cpp b/test/api/annotations.test.cpp index 31277718da..72a2d62bde 100644 --- a/test/api/annotations.test.cpp +++ b/test/api/annotations.test.cpp @@ -59,7 +59,7 @@ TEST(Annotations, LineAnnotation) { LineString line = {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }}; LineAnnotation annotation { line }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); annotation.width = { 5 }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); @@ -75,7 +75,7 @@ TEST(Annotations, FillAnnotation) { Polygon polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation annotation { polygon }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotation(annotation); @@ -94,13 +94,13 @@ TEST(Annotations, AntimeridianAnnotationSmall) { LineString line = {{ { antimeridian, 20 }, { antimeridian, -20 } }}; LineAnnotation lineAnnotation { line }; - lineAnnotation.color = { { 255, 0, 0, 1 } }; + lineAnnotation.color = Color::red(); lineAnnotation.width = { 2 }; test.map.addAnnotation(lineAnnotation); Polygon polygon = {{ {{ { antimeridian+10, 0 }, { antimeridian - 10, 10 }, { antimeridian-10, -10 } }} }}; FillAnnotation polygonAnnotation { polygon }; - polygonAnnotation.color = { { 0, 0, 255, 1 } }; + polygonAnnotation.color = Color::blue(); test.map.addAnnotation(polygonAnnotation); test.checkRendering("antimeridian_annotation_small"); @@ -115,13 +115,13 @@ TEST(Annotations, AntimeridianAnnotationLarge) { LineString line = {{ { antimeridian, 20 }, { antimeridian, -20 } }}; LineAnnotation lineAnnotation { line }; - lineAnnotation.color = { { 255, 0, 0, 1 } }; + lineAnnotation.color = Color::red(); lineAnnotation.width = { 2 }; test.map.addAnnotation(lineAnnotation); Polygon polygon = {{ {{ { antimeridian-10, 0 }, { -antimeridian+10, 10 }, { -antimeridian+10, -10 } }} }}; FillAnnotation polygonAnnotation { polygon }; - polygonAnnotation.color = { { 0, 0, 255, 1 } }; + polygonAnnotation.color = Color::blue(); test.map.addAnnotation(polygonAnnotation); test.checkRendering("antimeridian_annotation_large"); @@ -132,9 +132,9 @@ TEST(Annotations, OverlappingFillAnnotation) { Polygon polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation underlaidAnnotation { polygon }; - underlaidAnnotation.color = { { 0, 255, 0, 1 } }; + underlaidAnnotation.color = Color::green(); FillAnnotation overlaidAnnotation { polygon }; - overlaidAnnotation.color = { { 255, 0, 0, 1 } }; + overlaidAnnotation.color = Color::red(); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotation(underlaidAnnotation); @@ -173,7 +173,7 @@ TEST(Annotations, NonImmediateAdd) { Polygon polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation annotation { polygon }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); test.map.addAnnotation(annotation); test.checkRendering("non_immediate_add"); @@ -211,7 +211,7 @@ TEST(Annotations, UpdateLineAnnotationGeometry) { AnnotationTest test; LineAnnotation annotation { LineString {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }} }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); annotation.width = { 5 }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); @@ -228,7 +228,7 @@ TEST(Annotations, UpdateLineAnnotationStyle) { AnnotationTest test; LineAnnotation annotation { LineString {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }} }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); annotation.width = { 5 }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); @@ -236,7 +236,7 @@ TEST(Annotations, UpdateLineAnnotationStyle) { test::render(test.map, test.view); - annotation.color = { { 0, 255, 0, 1 } }; + annotation.color = Color::green(); annotation.width = { 2 }; test.map.updateAnnotation(line, annotation); test.checkRendering("update_line_style"); @@ -246,7 +246,7 @@ TEST(Annotations, UpdateFillAnnotationGeometry) { AnnotationTest test; FillAnnotation annotation { Polygon {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }} }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID fill = test.map.addAnnotation(annotation); @@ -263,14 +263,14 @@ TEST(Annotations, UpdateFillAnnotationStyle) { Polygon polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation annotation { polygon }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID fill = test.map.addAnnotation(annotation); test::render(test.map, test.view); - annotation.color = { { 0, 255, 0, 1 } }; + annotation.color = Color::green(); test.map.updateAnnotation(fill, annotation); test.checkRendering("update_fill_style"); } @@ -293,7 +293,7 @@ TEST(Annotations, RemoveShape) { LineString line = {{ { 0, 0 }, { 45, 45 } }}; LineAnnotation annotation { line }; - annotation.color = { { 255, 0, 0, 1 } }; + annotation.color = Color::red(); annotation.width = { 5 }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); -- cgit v1.2.1