summaryrefslogtreecommitdiffstats
path: root/js/src/jsapi-tests/testSABAccounting.cpp
blob: 1c3c9e870f5c37281b95c86c18762c60fdd7fa09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "jsapi.h"
#include "jsfriendapi.h"

#include "builtin/TestingFunctions.h"
#include "js/SharedArrayBuffer.h"
#include "jsapi-tests/tests.h"

BEGIN_TEST(testSABAccounting) {
  // Purge what we can
  JS::PrepareForFullGC(cx);
  NonIncrementalGC(cx, GC_SHRINK, JS::GCReason::API);

  // Self-hosting and chrome code should not use SABs, or the point of this
  // predicate is completely lost.
  CHECK(!JS::ContainsSharedArrayBuffer(cx));

  JS::RootedObject obj(cx), obj2(cx);
  CHECK(obj = JS::NewSharedArrayBuffer(cx, 4096));
  CHECK(JS::ContainsSharedArrayBuffer(cx));
  CHECK(obj2 = JS::NewSharedArrayBuffer(cx, 4096));
  CHECK(JS::ContainsSharedArrayBuffer(cx));

  // Discard those objects again.
  obj = nullptr;
  obj2 = nullptr;
  JS::PrepareForFullGC(cx);
  NonIncrementalGC(cx, GC_SHRINK, JS::GCReason::API);

  // Should be back to base state.
  CHECK(!JS::ContainsSharedArrayBuffer(cx));

  return true;
}
END_TEST(testSABAccounting)