Bug 1852740: add tests for the `fetchpriority` attribute in Link headers. r=necko...
[gecko.git] / js / src / jsapi-tests / testSliceBudget.cpp
bloba53d98628d533b55be79b5e85faade468bad3060
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:
3 */
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"
11 using namespace js;
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());
21 budget.step(1000000);
22 CHECK(!budget.isOverBudget());
24 return true;
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());
38 budget.step(5000);
39 CHECK(!budget.isOverBudget());
41 budget.step(5000);
42 CHECK(budget.isOverBudget());
44 return true;
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());
58 budget.step(5000);
59 budget.step(5000);
60 CHECK(!budget.isOverBudget());
62 // This doesn't test the deadline is correct as that would require waiting.
64 return true;
66 END_TEST(testSliceBudgetTime)
68 BEGIN_TEST(testSliceBudgetTimeZero) {
69 SliceBudget budget = SliceBudget(TimeBudget(0));
70 budget.step(1000);
71 CHECK(budget.isOverBudget());
73 return true;
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
81 // time.
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.
93 budget.step(500);
95 // Not enough work to check interrupt, and no interrupt anyway.
96 CHECK(!budget.isOverBudget());
98 // External signal: interrupt requested.
99 wantInterrupt = true;
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.
105 budget.step(1000);
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.
115 return true;
117 END_TEST(testSliceBudgetInterruptibleTime)