File: rtp_time_unittest.cc

package info (click to toggle)
android-platform-tools 34.0.5-12
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 150,900 kB
  • sloc: cpp: 805,786; java: 293,500; ansic: 128,288; xml: 127,491; python: 41,481; sh: 14,245; javascript: 9,665; cs: 3,846; asm: 2,049; makefile: 1,917; yacc: 440; awk: 368; ruby: 183; sql: 140; perl: 88; lex: 67
file content (74 lines) | stat: -rw-r--r-- 2,998 bytes parent folder | download | duplicates (11)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Copyright 2015 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 "cast/streaming/rtp_time.h"

#include <chrono>

#include "gtest/gtest.h"
#include "util/chrono_helpers.h"

namespace openscreen {
namespace cast {

// Tests that conversions between std::chrono durations and RtpTimeDelta are
// accurate.  Note that this implicitly tests the conversions to/from
// RtpTimeTicks as well due to shared implementation.
TEST(RtpTimeDeltaTest, ConversionToAndFromDurations) {
  constexpr int kTimebase = 48000;

  // Origin in both timelines is equivalent.
  ASSERT_EQ(RtpTimeDelta(), RtpTimeDelta::FromTicks(0));
  ASSERT_EQ(RtpTimeDelta(),
            RtpTimeDelta::FromDuration(microseconds(0), kTimebase));
  ASSERT_EQ(microseconds::zero(),
            RtpTimeDelta::FromTicks(0).ToDuration<microseconds>(kTimebase));

  // Conversions that are exact (i.e., do not require rounding).
  ASSERT_EQ(RtpTimeDelta::FromTicks(480),
            RtpTimeDelta::FromDuration(milliseconds(10), kTimebase));
  ASSERT_EQ(RtpTimeDelta::FromTicks(96000),
            RtpTimeDelta::FromDuration(seconds(2), kTimebase));
  ASSERT_EQ(milliseconds(10),
            RtpTimeDelta::FromTicks(480).ToDuration<microseconds>(kTimebase));
  ASSERT_EQ(seconds(2),
            RtpTimeDelta::FromTicks(96000).ToDuration<microseconds>(kTimebase));

  // Conversions that are approximate (i.e., are rounded).
  for (int error_us = -3; error_us <= +3; ++error_us) {
    ASSERT_EQ(
        RtpTimeDelta::FromTicks(0),
        RtpTimeDelta::FromDuration(microseconds(0 + error_us), kTimebase));
    ASSERT_EQ(
        RtpTimeDelta::FromTicks(1),
        RtpTimeDelta::FromDuration(microseconds(21 + error_us), kTimebase));
    ASSERT_EQ(
        RtpTimeDelta::FromTicks(2),
        RtpTimeDelta::FromDuration(microseconds(42 + error_us), kTimebase));
    ASSERT_EQ(
        RtpTimeDelta::FromTicks(3),
        RtpTimeDelta::FromDuration(microseconds(63 + error_us), kTimebase));
    ASSERT_EQ(
        RtpTimeDelta::FromTicks(4),
        RtpTimeDelta::FromDuration(microseconds(83 + error_us), kTimebase));
    ASSERT_EQ(
        RtpTimeDelta::FromTicks(11200000000000),
        RtpTimeDelta::FromDuration(
            microseconds(INT64_C(233333333333333) + error_us), kTimebase));
  }
  ASSERT_EQ(microseconds(21),
            RtpTimeDelta::FromTicks(1).ToDuration<microseconds>(kTimebase));
  ASSERT_EQ(microseconds(42),
            RtpTimeDelta::FromTicks(2).ToDuration<microseconds>(kTimebase));
  ASSERT_EQ(microseconds(63),
            RtpTimeDelta::FromTicks(3).ToDuration<microseconds>(kTimebase));
  ASSERT_EQ(microseconds(83),
            RtpTimeDelta::FromTicks(4).ToDuration<microseconds>(kTimebase));
  ASSERT_EQ(microseconds(INT64_C(233333333333333)),
            RtpTimeDelta::FromTicks(11200000000000)
                .ToDuration<microseconds>(kTimebase));
}

}  // namespace cast
}  // namespace openscreen