// 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/logging.h"
#include "base/macros.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 + arraysize(timestamps));
  RunUnrollTest(timestamps_vector);
}

}  // namespace mp2t
}  // namespace media
