blob: 716add239e3e315c81772a356aeb6ad040379c73 [file] [log] [blame]
// 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.
// @dart = 2.9
/// @assertion final SendPort sendPort
/// Returns a SendPort that sends to this raw receive port.
///
/// @description Checks that same SendPort instance can be used by different
/// isolates.
///
/// @author a.semenov@unipro.ru
import "dart:isolate";
import "../../../Utils/expect.dart";
const int ISOLATE_COUNT = 10;
const int SEND_COUNT = 10;
const int TOTAL_COUNT = ISOLATE_COUNT * SEND_COUNT;
void entryPoint(SendPort sendPort) {
for (int i=0; i<SEND_COUNT; i++) {
sendPort.send(i);
}
}
main() {
asyncStart();
RawReceivePort receivePort;
List receivedData = [];
void receiveHandler(event) {
receivedData.add(event);
if (receivedData.length==TOTAL_COUNT) {
receivePort.close();
// check the data
receivedData.sort();
List<int> expectedData = new List<int>.generate(TOTAL_COUNT,
(i) => i ~/ ISOLATE_COUNT);
Expect.listEquals(expectedData, receivedData);
asyncEnd();
}
}
receivePort = new RawReceivePort(receiveHandler);
SendPort sendPort = receivePort.sendPort;
for (int i=0; i<ISOLATE_COUNT; i++) {
Isolate.spawn(entryPoint, sendPort);
}
}