library;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
import "dart:_internal" as _in;

static method useAddAll() → void {
  dynamic dynamicSet1 = block {
    final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
    #t1.{core::Set::add}(0){(core::int*) →* core::bool*};
    #t1.{core::Set::add}(1){(core::int*) →* core::bool*};
    #t1.{core::Set::add}(2){(core::int*) →* core::bool*};
  } =>#t1;
  dynamic dynamicSet2 = block {
    final core::Set<core::num*>* #t2 = col::LinkedHashSet::•<core::num*>();
    #t2.{core::Set::add}(3){(core::num*) →* core::bool*};
    #t2.{core::Set::add}(4){(core::num*) →* core::bool*};
    #t2.{core::Set::add}(5){(core::num*) →* core::bool*};
  } =>#t2;
  core::Iterable<core::int*>* iterableIntSet = block {
    final core::Set<core::int*>* #t3 = col::LinkedHashSet::•<core::int*>();
    #t3.{core::Set::add}(6){(core::int*) →* core::bool*};
    #t3.{core::Set::add}(7){(core::int*) →* core::bool*};
    #t3.{core::Set::add}(8){(core::int*) →* core::bool*};
  } =>#t3;
  core::Iterable<core::num*>* iterableNumSet1 = block {
    final core::Set<core::int*>* #t4 = col::LinkedHashSet::•<core::int*>();
    #t4.{core::Set::add}(9){(core::int*) →* core::bool*};
    #t4.{core::Set::add}(10){(core::int*) →* core::bool*};
    #t4.{core::Set::add}(11){(core::int*) →* core::bool*};
  } =>#t4;
  core::Iterable<core::num*>* iterableNumSet2 = block {
    final core::Set<core::num*>* #t5 = col::LinkedHashSet::•<core::num*>();
    #t5.{core::Set::add}(12){(core::num*) →* core::bool*};
    #t5.{core::Set::add}(13){(core::num*) →* core::bool*};
    #t5.{core::Set::add}(14){(core::num*) →* core::bool*};
  } =>#t5;
  core::Set<core::int*>* intSet = block {
    final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
    #t6.{core::Set::add}(15){(core::int*) →* core::bool*};
    #t6.{core::Set::add}(16){(core::int*) →* core::bool*};
    #t6.{core::Set::add}(17){(core::int*) →* core::bool*};
  } =>#t6;
  core::Set<core::num*>* numSet1 = block {
    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
    #t7.{core::Set::add}(18){(core::int*) →* core::bool*};
    #t7.{core::Set::add}(19){(core::int*) →* core::bool*};
    #t7.{core::Set::add}(20){(core::int*) →* core::bool*};
  } =>#t7;
  core::Set<core::num*>* numSet2 = block {
    final core::Set<core::num*>* #t8 = col::LinkedHashSet::•<core::num*>();
    #t8.{core::Set::add}(21){(core::num*) →* core::bool*};
    #t8.{core::Set::add}(22){(core::num*) →* core::bool*};
    #t8.{core::Set::add}(23){(core::num*) →* core::bool*};
  } =>#t8;
  core::Set<core::int*>* set1 = block {
    final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
    for (final dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::int* #t11 = #t10 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
    }
    for (final dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::int* #t13 = #t12 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t13){(core::int*) →* core::bool*};
    }
    #t9.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::int*>*) →* void};
    for (final dynamic #t14 in iterableNumSet1) {
      final core::int* #t15 = #t14 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t15){(core::int*) →* core::bool*};
    }
    for (final dynamic #t16 in iterableNumSet2) {
      final core::int* #t17 = #t16 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t17){(core::int*) →* core::bool*};
    }
    #t9.{core::Set::addAll}(intSet){(core::Iterable<core::int*>*) →* void};
    for (final dynamic #t18 in numSet1) {
      final core::int* #t19 = #t18 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t19){(core::int*) →* core::bool*};
    }
    for (final dynamic #t20 in numSet2) {
      final core::int* #t21 = #t20 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t21){(core::int*) →* core::bool*};
    }
  } =>#t9;
  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set1);
  core::Set<core::num*>* set2 = block {
    final core::Set<core::num*>* #t22 = col::LinkedHashSet::•<core::num*>();
    for (final dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::num* #t24 = #t23 as{TypeError} core::num*;
      #t22.{core::Set::add}(#t24){(core::num*) →* core::bool*};
    }
    for (final dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::num* #t26 = #t25 as{TypeError} core::num*;
      #t22.{core::Set::add}(#t26){(core::num*) →* core::bool*};
    }
    #t22.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}(iterableNumSet1){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}(iterableNumSet2){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}(intSet){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}(numSet1){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}(numSet2){(core::Iterable<core::num*>*) →* void};
  } =>#t22;
  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set2);
  core::Set<core::int*>* set3 = block {
    final core::Set<core::int*>* #t27 = col::LinkedHashSet::•<core::int*>();
    final core::Iterable<dynamic>* #t28 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
    if(!(#t28 == null))
      for (final dynamic #t29 in #t28) {
        final core::int* #t30 = #t29 as{TypeError} core::int*;
        #t27.{core::Set::add}(#t30){(core::int*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t31 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
    if(!(#t31 == null))
      for (final dynamic #t32 in #t31) {
        final core::int* #t33 = #t32 as{TypeError} core::int*;
        #t27.{core::Set::add}(#t33){(core::int*) →* core::bool*};
      }
    final core::Iterable<core::int*>* #t34 = iterableIntSet;
    if(!(#t34 == null))
      #t27.{core::Set::addAll}(#t34){(core::Iterable<core::int*>*) →* void};
    final core::Iterable<dynamic>* #t35 = iterableNumSet1;
    if(!(#t35 == null))
      for (final dynamic #t36 in #t35) {
        final core::int* #t37 = #t36 as{TypeError} core::int*;
        #t27.{core::Set::add}(#t37){(core::int*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t38 = iterableNumSet2;
    if(!(#t38 == null))
      for (final dynamic #t39 in #t38) {
        final core::int* #t40 = #t39 as{TypeError} core::int*;
        #t27.{core::Set::add}(#t40){(core::int*) →* core::bool*};
      }
    final core::Iterable<core::int*>* #t41 = intSet;
    if(!(#t41 == null))
      #t27.{core::Set::addAll}(#t41){(core::Iterable<core::int*>*) →* void};
    final core::Iterable<dynamic>* #t42 = numSet1;
    if(!(#t42 == null))
      for (final dynamic #t43 in #t42) {
        final core::int* #t44 = #t43 as{TypeError} core::int*;
        #t27.{core::Set::add}(#t44){(core::int*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t45 = numSet2;
    if(!(#t45 == null))
      for (final dynamic #t46 in #t45) {
        final core::int* #t47 = #t46 as{TypeError} core::int*;
        #t27.{core::Set::add}(#t47){(core::int*) →* core::bool*};
      }
  } =>#t27;
  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set3);
  core::Set<core::num*>* set4 = block {
    final core::Set<core::num*>* #t48 = col::LinkedHashSet::•<core::num*>();
    final core::Iterable<dynamic>* #t49 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
    if(!(#t49 == null))
      for (final dynamic #t50 in #t49) {
        final core::num* #t51 = #t50 as{TypeError} core::num*;
        #t48.{core::Set::add}(#t51){(core::num*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t52 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
    if(!(#t52 == null))
      for (final dynamic #t53 in #t52) {
        final core::num* #t54 = #t53 as{TypeError} core::num*;
        #t48.{core::Set::add}(#t54){(core::num*) →* core::bool*};
      }
    final core::Iterable<core::num*>* #t55 = iterableIntSet;
    if(!(#t55 == null))
      #t48.{core::Set::addAll}(#t55){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t56 = iterableNumSet1;
    if(!(#t56 == null))
      #t48.{core::Set::addAll}(#t56){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t57 = iterableNumSet2;
    if(!(#t57 == null))
      #t48.{core::Set::addAll}(#t57){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t58 = intSet;
    if(!(#t58 == null))
      #t48.{core::Set::addAll}(#t58){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t59 = numSet1;
    if(!(#t59 == null))
      #t48.{core::Set::addAll}(#t59){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t60 = numSet2;
    if(!(#t60 == null))
      #t48.{core::Set::addAll}(#t60){(core::Iterable<core::num*>*) →* void};
  } =>#t48;
  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set4);
}
static method main() → dynamic {
  self::useAddAll();
}
static method expect(core::Set<dynamic>* set1, core::Set<dynamic>* set2) → void {
  if(!(set1.{_in::EfficientLengthIterable::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} set2.{_in::EfficientLengthIterable::length}{core::int*})) {
    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}{core::int*}}, actual ${set2.{_in::EfficientLengthIterable::length}{core::int*}}.";
  }
  for (dynamic element in set1) {
    if(!set2.{core::Set::contains}(element){(core::Object*) →* core::bool*}) {
      throw "Element ${element} not found. Expected ${set1}, actual ${set2}.";
    }
  }
}
