michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: #include "cairo.h" michael@0: michael@0: #include "gtest/gtest.h" michael@0: michael@0: namespace mozilla { michael@0: namespace layers { michael@0: michael@0: void TryCircle(double centerX, double centerY, double radius) { michael@0: printf("TestCairo:TryArcs centerY %f, radius %f\n",centerY,radius); michael@0: michael@0: cairo_surface_t *surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,8,21); michael@0: ASSERT_TRUE(surf != nullptr); michael@0: michael@0: cairo_t *cairo = cairo_create(surf); michael@0: ASSERT_TRUE(cairo != nullptr); michael@0: michael@0: cairo_set_antialias(cairo, CAIRO_ANTIALIAS_NONE); michael@0: cairo_arc(cairo, 0.0, centerY, radius, 0.0, 6.2831853071795862); michael@0: cairo_fill_preserve(cairo); michael@0: michael@0: cairo_surface_destroy(surf); michael@0: cairo_destroy(cairo); michael@0: } michael@0: michael@0: TEST(Cairo, Simple) { michael@0: TryCircle(0.0, 0.0, 14.0); michael@0: TryCircle(0.0, 1.0, 22.4); michael@0: TryCircle(1.0, 0.0, 1422.4); michael@0: TryCircle(1.0, 1.0, 3422.4); michael@0: TryCircle(-10.0, 1.0, -2); michael@0: } michael@0: michael@0: TEST(Cairo, Bug825721) { michael@0: // OK: michael@0: TryCircle(0.0, 0.0, 8761126469220696064.0); michael@0: TryCircle(0.0, 1.0, 8761126469220696064.0); michael@0: michael@0: // OK: michael@0: TryCircle(1.0, 0.0, 5761126469220696064.0); michael@0: michael@0: // This was the crash in 825721. Note that centerY has to be non-zero, michael@0: // and radius has to be not only large, but in particular range. michael@0: // 825721 has a band-aid fix, where the crash is inevitable, but does michael@0: // not fix the cause. The same code crashes in cairo standalone. michael@0: TryCircle(0.0, 1.0, 5761126469220696064.0); michael@0: } michael@0: michael@0: } michael@0: }