87b829bacd
All these tests now pass in both weak and strong mode, except for relation_subclass_test and typedef_reflected_type_test. For those 2 tests I fixed the compile time error and now they have the same runtime errors in both weak and strong mode (they were already failing at runtime in weak mode). Change-Id: If0157f811fffcf72a12ce6690ac0568c8f4419a9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/144343 Commit-Queue: Liam Appelbe <liama@google.com> Reviewed-by: Régis Crelier <regis@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
149 lines
3.1 KiB
Dart
149 lines
3.1 KiB
Dart
// Copyright (c) 2020, 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.
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:async_helper/async_minitest.dart';
|
|
|
|
import 'utils.dart';
|
|
|
|
main() {
|
|
test('simple stream', () {
|
|
f(Stream<int> s) async {
|
|
var r = 0;
|
|
await for (var v in s) r += v;
|
|
return r;
|
|
}
|
|
|
|
return f(mkStream(5)).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
|
|
test('simple stream, await', () {
|
|
f(Stream<int> s) async {
|
|
var r = 0;
|
|
await for (var v in s) r += await Future<int>.microtask(() => v);
|
|
return r;
|
|
}
|
|
|
|
return f(mkStream(5)).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
|
|
test('simple stream - take', () {
|
|
f(Stream<int> s) async {
|
|
var r = 0;
|
|
await for (var v in s.take(5)) r += v;
|
|
return r;
|
|
}
|
|
|
|
return f(mkStream(10)).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
|
|
test('simple stream reyield', () {
|
|
f(Stream<int> s) async* {
|
|
var r = 0;
|
|
await for (var v in s) yield r += v;
|
|
}
|
|
|
|
return expectList(f(mkStream(5)), [0, 1, 3, 6, 10]);
|
|
});
|
|
|
|
test('simple stream, await, reyield', () {
|
|
f(Stream<int> s) async* {
|
|
var r = 0;
|
|
await for (var v in s) yield r += await Future<int>.microtask(() => v);
|
|
}
|
|
|
|
return expectList(f(mkStream(5)), [0, 1, 3, 6, 10]);
|
|
});
|
|
|
|
test('simple stream - take, reyield', () {
|
|
f(Stream<int> s) async* {
|
|
var r = 0;
|
|
await for (var v in s.take(5)) yield r += v;
|
|
}
|
|
|
|
return expectList(f(mkStream(10)), [0, 1, 3, 6, 10]);
|
|
});
|
|
|
|
test('nested', () {
|
|
f() async {
|
|
var r = 0;
|
|
await for (var i in mkStream(5)) {
|
|
await for (var j in mkStream(3)) {
|
|
r += i * j;
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f().then((v) {
|
|
expect(v, equals((1 + 2 + 3 + 4) * (1 + 2)));
|
|
});
|
|
});
|
|
|
|
test('nested, await', () {
|
|
f() async {
|
|
var r = 0;
|
|
await for (var i in mkStream(5)) {
|
|
await for (var j in mkStream(3)) {
|
|
r += await Future<int>.microtask(() => i * j);
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f().then((v) {
|
|
expect(v, equals((1 + 2 + 3 + 4) * (1 + 2)));
|
|
});
|
|
});
|
|
|
|
test('nested, await * 2', () {
|
|
f() async {
|
|
var r = 0;
|
|
await for (var i in mkStream(5)) {
|
|
var ai = await Future<int>.microtask(() => i);
|
|
await for (var j in mkStream(3)) {
|
|
r += await Future<int>.microtask(() => ai * j);
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f().then((v) {
|
|
expect(v, equals((1 + 2 + 3 + 4) * (1 + 2)));
|
|
});
|
|
});
|
|
|
|
test('await pauses loop', () {
|
|
var sc;
|
|
var i = 0;
|
|
void send() {
|
|
if (i == 5) {
|
|
sc.close();
|
|
} else {
|
|
sc.add(i++);
|
|
}
|
|
}
|
|
|
|
sc = StreamController<int>(onListen: send, onResume: send);
|
|
f(Stream<int> s) async {
|
|
var r = 0;
|
|
await for (var i in s) {
|
|
r += await Future<int>.delayed(ms * 10, () => i);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f(sc.stream).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
}
|