1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2011 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#include "include/core/SkRect.h"
9cb93a386Sopenharmony_ci#include "include/private/SkFloatingPoint.h"
10cb93a386Sopenharmony_ci#include "include/utils/SkRandom.h"
11cb93a386Sopenharmony_ci#include "tests/Test.h"
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_cistatic void check_invalid(skiatest::Reporter* reporter,
14cb93a386Sopenharmony_ci                          SkScalar l, SkScalar t, SkScalar r, SkScalar b) {
15cb93a386Sopenharmony_ci    SkRect rect;
16cb93a386Sopenharmony_ci    rect.setLTRB(l, t, r, b);
17cb93a386Sopenharmony_ci    REPORTER_ASSERT(reporter, !rect.isFinite());
18cb93a386Sopenharmony_ci}
19cb93a386Sopenharmony_ci
20cb93a386Sopenharmony_ci// Tests that isFinite() will reject any rect with +/-inf values
21cb93a386Sopenharmony_ci// as one of its coordinates.
22cb93a386Sopenharmony_ciDEF_TEST(InfRect, reporter) {
23cb93a386Sopenharmony_ci    float inf = SK_FloatInfinity;
24cb93a386Sopenharmony_ci    float nan = SK_FloatNaN;
25cb93a386Sopenharmony_ci    SkASSERT(!(nan == nan));
26cb93a386Sopenharmony_ci    SkScalar small = SkIntToScalar(10);
27cb93a386Sopenharmony_ci    SkScalar big = SkIntToScalar(100);
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_ci    REPORTER_ASSERT(reporter, SkRect::MakeEmpty().isFinite());
30cb93a386Sopenharmony_ci
31cb93a386Sopenharmony_ci    SkRect rect = SkRect::MakeXYWH(small, small, big, big);
32cb93a386Sopenharmony_ci    REPORTER_ASSERT(reporter, rect.isFinite());
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ci    const SkScalar invalid[] = { nan, inf, -inf };
35cb93a386Sopenharmony_ci    for (size_t i = 0; i < SK_ARRAY_COUNT(invalid); ++i) {
36cb93a386Sopenharmony_ci        check_invalid(reporter, small, small, big, invalid[i]);
37cb93a386Sopenharmony_ci        check_invalid(reporter, small, small, invalid[i], big);
38cb93a386Sopenharmony_ci        check_invalid(reporter, small, invalid[i], big, big);
39cb93a386Sopenharmony_ci        check_invalid(reporter, invalid[i], small, big, big);
40cb93a386Sopenharmony_ci    }
41cb93a386Sopenharmony_ci}
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci// need tests for SkStrSearch
44