reverse-complement Dart #3 program
source code
/* The Computer Language Benchmarks Game
https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
Contributed by James Wendel
Modified by Anders Johnsen
*/
import 'dart:io';
void main() {
var src = "CGATMKRYVBHD";
var dst = "GCTAKMYRBVDH";
var tbl = new List<int>(256);
var seq = new List<int>();
// Set up lookup table
for (int i = 0; i < tbl.length; i++)
tbl[i] = i;
for (int i = 0; i < src.length; i++) {
tbl[src.codeUnitAt(i)] = dst.codeUnitAt(i);
tbl[src.toLowerCase().codeUnitAt(i)] = dst.codeUnitAt(i);
}
var buffer = new List<int>(60);
List<int> list = new List<int>();
bool commentLine = false;
StringBuffer sbuf = new StringBuffer();
stdin.listen((List<int> dataList) {
// Loop over all the contents of the buffer so far
for (int data in dataList) {
// Check if this is a comment line (and that we aren't already on a comment line)
if (data == 62 && !commentLine) {
int count = 0;
// Print the reverse components for the last block
for (int g in list.reversed) {
if (count == 60) {
sbuf.writeln(new String.fromCharCodes(buffer));
count=0;
}
buffer[count++] = g;
}
// Print any stragling data
if (count > 0) {
sbuf.writeln(new String.fromCharCodes(buffer.getRange(0, count)));
}
// Reset the data for the begining of a block of data
list.clear();
commentLine = true;
}
if (commentLine) {
if (data == 10) {
sbuf.write(new String.fromCharCodes(list));
print(sbuf);
sbuf = new StringBuffer();
commentLine = false;
list.clear();
} else {
list.add(data);
}
} else if (data != 10) {
// Add the complement to the buffer
list.add(tbl[data]);
}
}
}).onDone(() {
// Print out anything remaining in the buffers
if (commentLine) {
sbuf.write(new String.fromCharCodes(list));
} else {
int count = 0;
for (int data in list.reversed) {
if (count == 60) {
sbuf.writeln(new String.fromCharCodes(buffer));
count=0;
}
buffer[count++] = data;
}
if (count > 0) {
sbuf.write(new String.fromCharCodes(buffer.getRange(0, count)));
}
}
print(sbuf);
});
}
notes, command-line, and program output
NOTES:
64-bit Ubuntu quad core
Dart VM version: 2.8.1 (stable) (Unknown timestamp) on "linux_x64"
Wed, 06 May 2020 20:16:15 GMT
MAKE:
/usr/bin/dartanalyzer revcomp.dart-3.dart
make: /usr/bin/dartanalyzer: Command not found
make: [/home/dunham/8000-benchmarksgame/nanobench/makefiles/u64q.programs.Makefile:445: revcomp.dart-3.dart_run] Error 127 (ignored)
0.16s to complete and log all make actions
COMMAND LINE:
/usr/bin/dart --old_gen_heap_size=3072 revcomp.dart-3.dart 0 < revcomp-input100000000.txt
PROGRAM FAILED
PROGRAM OUTPUT:
>ONE Homo sapiens alu
Exhausted heap space, trying to allocate 2147483664 bytes.
Unhandled exception:
Out of Memory
#0 List._allocateData (dart:core-patch/growable_array.dart)
#1 List._grow (dart:core-patch/growable_array.dart:250:19)
#2 main.<anonymous closure> (file:///home/dunham/benchmarksgame_quadcore/revcomp/tmp/revcomp.dart-3.dart:91:2317)
#3 _RootZone.runUnaryGuarded (dart:async/zone.dart:1374:10)
#4 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#5 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)
#6 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:779:19)
#7 _StreamController._add (dart:async/stream_controller.dart:655:7)
#8 _StreamController.add (dart:async/stream_controller.dart:597:5)
#9 _FileStream._readBlock.<anonymous closure> (dart:io/file_impl.dart:105:19)
#10 _RootZone.runUnary (dart:async/zone.dart:1439:54)
#11 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
#12 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
#13 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
#14 Future._completeWithValue (dart:async/future_impl.dart:526:5)
#15 Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:556:7)
#16 _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
#17 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
#18 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#19 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)