| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /// @assertion Stream.periodic(Duration period, |
| /// [T computation(int computationCount)]) |
| /// Creates a stream that repeatedly emits events at period intervals. |
| /// If computation is omitted the event values will all be null. |
| /// @description Checks that created stream emits events at period intervals. |
| /// Checks that if computation is omitted the event value is null. |
| /// @author kaigorodov |
| |
| import "dart:async"; |
| import "../../../Utils/expect.dart"; |
| |
| void check(int periodMs) { |
| Duration period = durationInMilliseconds(periodMs); |
| const int maxCount = 5; |
| int count = 0; |
| |
| Stopwatch sw = new Stopwatch(); |
| sw.start(); |
| |
| asyncStart(); |
| |
| Stream s = new Stream.periodic(period); |
| StreamSubscription? ss; |
| ss = s.listen((var event) { |
| count++; |
| Expect.isNull(event); |
| Duration expected = period * count; |
| Duration actual = sw.elapsed; |
| Expect.isTrue(expected <= actual, "expected=$expected, actual=$actual"); |
| if (count >= maxCount) { |
| ss?.cancel(); |
| asyncEnd(); |
| } |
| }); |
| } |
| |
| main() { |
| check(0); |
| check(1); |
| check(10); |
| check(30); |
| check(100); |
| } |