<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/shared-storage/resources/util.js"></script>
<script src="/private-aggregation/resources/util.js"></script>
<script src="/fenced-frame/resources/utils.js"></script>

<body>
<script>
'use strict';

// Note: This file should contain at most 6 shared storage subtests due to the
// budget on selectURL().

promise_test(async () => {
  const paa_data = {
    enableDebugMode: true,
    contributions: [{bucket: 1n, value: 2}]
  };

  await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
}, 'basic contributeToHistogram() test');

promise_test(async () => {
  const paa_data = {
    enableDebugMode: true,
    contributions: [{bucket: 0n, value: 2}]
  };

  await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
}, 'contributeToHistogram() with a zero bucket');

promise_test(async () => {
  const paa_data = {
    enableDebugMode: true,
    contributions: [{bucket: 1n, value: 0}]
  };

  await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
}, 'contributeToHistogram() with a zero value');

promise_test(async () => {
  const paa_data = {
    enableDebugMode: true,
    contributions: [{bucket: 18446744073709551616n, value: 5}]
  };

  await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
}, 'contributeToHistogram() with a large bucket');

promise_test(async () => {
  const paa_data = {
    enableDebugMode: true,
    contributions: [{bucket: 340282366920938463463374607431768211455n, value: 5}]
  };

  await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
}, 'contributeToHistogram() with a max bucket');

promise_test(async () => {
  const paa_data = {
    enableDebugMode: true,
    contributions: [{bucket: 1n, value: 2.3}]
  };

  await VerifyContributeToHistogram(paa_data, /*expected_error=*/false);
}, 'contributeToHistogram() with a non-integer value');

</script>
</body>
