library;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

import "dart:async";

class Node extends core::Object {
  final field core::List<self::Node*>* nested;
  final field core::String* name;
  constructor •(core::String* name, [core::List<self::Node*>* nested = #C1]) → self::Node*
    : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
  method toString() → core::String*
    return "<${this.{self::Node::name}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested} in #t1.{core::List::==}(null) ?{core::String*} null : #t1.{core::Iterable::join}(", ")}]>";
  method toSimpleString() → dynamic {
    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested} in #t2.{core::List::==}(null) ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}());
    return "${this.{self::Node::name}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3.{core::Object::==}(null) ?{core::String*} null : #t3.{core::Iterable::join}(" ")}".{core::String::trim}();
  }
}
static method main() → void async {
  core::String* expected = "1 2 3 4 5 6 7 8 9 10";
  self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
  core::print(actual);
  if(!actual.{core::String::==}(expected)) {
    throw "Expected '${expected}' but got '${actual}'";
  }
}

constants  {
  #C1 = null
}
