// 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/stl_util.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
