File: generator_test.ml

package info (click to toggle)
liquidsoap 2.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,844 kB
  • sloc: ml: 74,136; javascript: 27,320; ansic: 505; sh: 139; xml: 114; lisp: 96; makefile: 26
file content (106 lines) | stat: -rw-r--r-- 3,484 bytes parent folder | download | duplicates (2)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
let () = Frame_settings.lazy_config_eval := true
let audio = Content.Audio.format_of_channels 2
let video = Content.default_format Content.Video.kind

let () =
  let buffer =
    Generator.create ~max_length:1000 (Frame.Fields.make ~audio ~video ())
  in
  Generator.put buffer Frame.Fields.audio (Content.make ~length:500 audio);
  assert (Generator.length buffer = 0);
  assert (Generator.buffered_length buffer = 500);
  Generator.put buffer Frame.Fields.video (Content.make ~length:250 video);
  assert (Generator.length buffer = 250);
  assert (Generator.buffered_length buffer = 500);
  let m = Frame.Metadata.from_list [("foo", "bla")] in

  Generator.add_metadata buffer m;
  Generator.add_track_mark buffer;

  Generator.put buffer Frame.Fields.video (Content.make ~length:1 video);
  let c = Generator.slice buffer (Generator.length buffer) in

  assert (
    Content.Metadata.get_data (Frame.Fields.find Frame.Fields.metadata c)
    = [(250, m)]);
  assert (
    Content.Track_marks.get_data (Frame.Fields.find Frame.Fields.track_marks c)
    = [250]);

  Generator.put buffer Frame.Fields.video (Content.make ~length:50 video);
  assert (Generator.length buffer = 50);

  (* Last position for length [n] is [n-1], same as with arrays.. *)
  Generator.add_metadata ~pos:23 buffer m;
  Generator.add_track_mark ~pos:23 buffer;

  let c = Generator.slice buffer 23 in

  assert (
    Content.Metadata.get_data (Frame.Fields.find Frame.Fields.metadata c) = []);
  assert (
    Content.Track_marks.get_data (Frame.Fields.find Frame.Fields.track_marks c)
    = []);

  assert (Generator.length buffer = 27);
  let c = Generator.slice buffer 1 in

  assert (
    Content.Metadata.get_data (Frame.Fields.find Frame.Fields.metadata c)
    = [(0, m)]);

  assert (
    Content.Track_marks.get_data (Frame.Fields.find Frame.Fields.track_marks c)
    = [0])

let () =
  let buffer =
    Generator.create ~max_length:1000 (Frame.Fields.make ~audio ())
  in
  Generator.put buffer Frame.Fields.audio (Content.make ~length:500 audio);
  assert (Generator.length buffer = 500);
  assert (Generator.buffered_length buffer = 500);

  let c = Generator.peek buffer in

  let m = Frame.Fields.find Frame.Fields.metadata c in
  assert (Content.length m = max_int);
  let slice = Content.sub m 34 234 in
  assert (Content.length slice = 234);
  let rem = Content.truncate m 23 in
  assert (Content.length rem = max_int);

  let m = Frame.Fields.find Frame.Fields.track_marks c in
  assert (Content.length m = max_int);
  let slice = Content.sub m 34 234 in
  assert (Content.length slice = 234);
  let rem = Content.truncate m 23 in
  assert (Content.length rem = max_int);

  Generator.truncate buffer 50;

  assert (Generator.length buffer = 450);
  assert (Generator.buffered_length buffer = 450);

  let c = Generator.peek buffer in

  let m = Frame.Fields.find Frame.Fields.metadata c in
  assert (Content.length m = max_int);

  let m = Frame.Fields.find Frame.Fields.track_marks c in
  assert (Content.length m = max_int);

  let c = Generator.slice buffer 100 in

  Frame.Fields.iter (fun _ c -> assert (Content.length c = 100)) c;
  assert (Generator.length buffer = 350);
  assert (Generator.buffered_length buffer = 350);

  (try
     Generator.put buffer Frame.Fields.video (Content.make ~length:250 video);
     assert false
   with Not_found -> ());
  try
    Generator.put buffer Frame.Fields.audio (Content.make ~length:250 video);
    assert false
  with Content.Invalid -> ()