|  | // Copyright (c) 2023, 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. | 
|  |  | 
|  | library line_splitter_test; | 
|  |  | 
|  | import 'dart:convert'; | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | void main() { | 
|  | testEfficency(); | 
|  | } | 
|  |  | 
|  | /// Regression test for https://dartbug.com/51167 | 
|  | /// | 
|  | /// Had quadratic time behavior when concatenating chunks without linebreaks. | 
|  | /// | 
|  | /// Should now only use linear time/space for buffering. | 
|  | void testEfficency() { | 
|  | // After fix: finishes in < 1 second on desktop. | 
|  | // Before fix, with N = 100000, took 25 seconds. | 
|  | const N = 1000000; | 
|  | String result = ""; // Starts empty, set once. | 
|  | var sink = LineSplitter() | 
|  | .startChunkedConversion(ChunkedConversionSink.withCallback((lines) { | 
|  | // Gets called only once with exactly one line. | 
|  | Expect.equals("", result); | 
|  | Expect.equals(1, lines.length); | 
|  | var line = lines.first; | 
|  | Expect.notEquals("", line); | 
|  | result = line; | 
|  | })); | 
|  | for (var i = 0; i < N; i++) { | 
|  | sink.add("xy"); | 
|  | } | 
|  | sink.close(); | 
|  | Expect.equals("xy" * N, result); | 
|  | } |