1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#include "Test.h"
9#include "SkRect.h"
10
11#ifdef SK_SCALAR_IS_FLOAT
12static float make_zero() {
13    return sk_float_sin(0);
14}
15#endif
16
17static void check_invalid(skiatest::Reporter* reporter,
18                          SkScalar l, SkScalar t, SkScalar r, SkScalar b) {
19    SkRect rect;
20    rect.set(l, t, r, b);
21    REPORTER_ASSERT(reporter, !rect.isFinite());
22}
23
24// Tests that isFinite() will reject any rect with +/-inf values
25// as one of its coordinates.
26static void TestInfRect(skiatest::Reporter* reporter) {
27#ifdef SK_SCALAR_IS_FLOAT
28    float invalid = 1 / make_zero();    // infinity
29#else
30    SkFixed invalid = SK_FixedNaN;
31#endif
32    SkScalar small = SkIntToScalar(10);
33    SkScalar big = SkIntToScalar(100);
34
35    SkRect rect = SkRect::MakeXYWH(small, small, big, big);
36    REPORTER_ASSERT(reporter, rect.isFinite());
37
38    check_invalid(reporter, small, small, big, invalid);
39    check_invalid(reporter, small, small, invalid, big);
40    check_invalid(reporter, small, invalid, big, big);
41    check_invalid(reporter, invalid, small, big, big);
42    check_invalid(reporter, small, small, big, -invalid);
43    check_invalid(reporter, small, small, -invalid, big);
44    check_invalid(reporter, small, -invalid, big, big);
45    check_invalid(reporter, -invalid, small, big, big);
46}
47
48// need tests for SkStrSearch
49
50#include "TestClassDef.h"
51DEFINE_TESTCLASS("InfRect", InfRectTestClass, TestInfRect)
52