1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 * vim: set ts=8 sts=2 et sw=2 tw=80:
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8 #include "js/SliceBudget.h"
9 #include "jsapi-tests/tests.h"
13 BEGIN_TEST(testSliceBudgetUnlimited
) {
14 SliceBudget budget
= SliceBudget::unlimited();
15 CHECK(budget
.isUnlimited());
16 CHECK(!budget
.isTimeBudget());
17 CHECK(!budget
.isWorkBudget());
19 CHECK(!budget
.isOverBudget());
22 CHECK(!budget
.isOverBudget());
26 END_TEST(testSliceBudgetUnlimited
)
28 BEGIN_TEST(testSliceBudgetWork
) {
29 SliceBudget budget
= SliceBudget(WorkBudget(10000));
30 CHECK(!budget
.isUnlimited());
31 CHECK(budget
.isWorkBudget());
32 CHECK(!budget
.isTimeBudget());
34 CHECK(budget
.workBudget() == 10000);
36 CHECK(!budget
.isOverBudget());
39 CHECK(!budget
.isOverBudget());
42 CHECK(budget
.isOverBudget());
46 END_TEST(testSliceBudgetWork
)
48 BEGIN_TEST(testSliceBudgetTime
) {
49 SliceBudget budget
= SliceBudget(TimeBudget(10000));
50 CHECK(!budget
.isUnlimited());
51 CHECK(!budget
.isWorkBudget());
52 CHECK(budget
.isTimeBudget());
54 CHECK(budget
.timeBudget() == 10000);
56 CHECK(!budget
.isOverBudget());
60 CHECK(!budget
.isOverBudget());
62 // This doesn't test the deadline is correct as that would require waiting.
66 END_TEST(testSliceBudgetTime
)
68 BEGIN_TEST(testSliceBudgetTimeZero
) {
69 SliceBudget budget
= SliceBudget(TimeBudget(0));
71 CHECK(budget
.isOverBudget());
75 END_TEST(testSliceBudgetTimeZero
)
77 BEGIN_TEST(testSliceBudgetInterruptibleTime
) {
78 SliceBudget::InterruptRequestFlag
wantInterrupt(false);
80 // Interruptible 100 second budget. This test will finish in well under that
82 static constexpr int64_t LONG_TIME
= 100000;
83 SliceBudget budget
= SliceBudget(TimeBudget(LONG_TIME
), &wantInterrupt
);
84 CHECK(!budget
.isUnlimited());
85 CHECK(!budget
.isWorkBudget());
86 CHECK(budget
.isTimeBudget());
88 CHECK(budget
.timeBudget() == LONG_TIME
);
90 CHECK(!budget
.isOverBudget());
92 // We do a little work, very small amount of time passes.
95 // Not enough work to check interrupt, and no interrupt anyway.
96 CHECK(!budget
.isOverBudget());
98 // External signal: interrupt requested.
101 // Interrupt requested, but not enough work has been done to check for it.
102 CHECK(!budget
.isOverBudget());
104 // Do enough work for an expensive check.
107 // Interrupt requested! This will reset the external flag, but internally
108 // remember that an interrupt was requested.
109 CHECK(budget
.isOverBudget());
110 CHECK(!wantInterrupt
);
111 CHECK(budget
.isOverBudget());
113 // This doesn't test the deadline is correct as that would require waiting.
117 END_TEST(testSliceBudgetInterruptibleTime
)