// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stddef.h>
#include <stdint.h>
#include <vector>

#include "base/cxx17_backports.h"
#include "base/test/perf_test_suite.h"
#include "media/formats/mp2t/timestamp_unroller.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace media {
namespace mp2t {

static std::vector<int64_t> TruncateTimestamps(
    const std::vector<int64_t>& timestamps) {
  const int nbits = 33;
  int64_t truncate_mask = (INT64_C(1) << nbits) - 1;
  std::vector<int64_t> truncated_timestamps(timestamps.size());
  for (size_t k = 0; k < timestamps.size(); k++)
    truncated_timestamps[k] = timestamps[k] & truncate_mask;
  return truncated_timestamps;
}

static void RunUnrollTest(const std::vector<int64_t>& timestamps) {
  std::vector<int64_t> truncated_timestamps = TruncateTimestamps(timestamps);

  TimestampUnroller timestamp_unroller;
  for (size_t k = 0; k < timestamps.size(); k++) {
    int64_t unrolled_timestamp =
        timestamp_unroller.GetUnrolledTimestamp(truncated_timestamps[k]);
    EXPECT_EQ(timestamps[k], unrolled_timestamp);
  }
}

TEST(TimestampUnrollerTest, SingleStream) {
  // Array of 64 bit timestamps.
  // This is the expected result from unrolling these timestamps
  // truncated to 33 bits.
  int64_t timestamps[] = {
      INT64_C(0x0000000000000000),
      INT64_C(-190),                // - 190
      INT64_C(0x00000000aaaaa9ed),  // + 0xaaaaaaab
      INT64_C(0x0000000155555498),  // + 0xaaaaaaab
      INT64_C(0x00000001ffffff43),  // + 0xaaaaaaab
      INT64_C(0x00000002aaaaa9ee),  // + 0xaaaaaaab
      INT64_C(0x0000000355555499),  // + 0xaaaaaaab
      INT64_C(0x00000003ffffff44),  // + 0xaaaaaaab
  };

  std::vector<int64_t> timestamps_vector(timestamps,
                                         timestamps + base::size(timestamps));
  RunUnrollTest(timestamps_vector);
}

}  // namespace mp2t
}  // namespace media
