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}{Invariant}(0){(core::int*) →* core::bool*};
    #t1.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
    #t1.{core::Set::add}{Invariant}(2){(core::int*) →* core::bool*};
  } =>#t1;
  dynamic dynamicSet2 = block {
    final core::Set<core::num*>* #t2 = col::LinkedHashSet::•<core::num*>();
    #t2.{core::Set::add}{Invariant}(3){(core::num*) →* core::bool*};
    #t2.{core::Set::add}{Invariant}(4){(core::num*) →* core::bool*};
    #t2.{core::Set::add}{Invariant}(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}{Invariant}(6){(core::int*) →* core::bool*};
    #t3.{core::Set::add}{Invariant}(7){(core::int*) →* core::bool*};
    #t3.{core::Set::add}{Invariant}(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}{Invariant}(9){(core::int*) →* core::bool*};
    #t4.{core::Set::add}{Invariant}(10){(core::int*) →* core::bool*};
    #t4.{core::Set::add}{Invariant}(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}{Invariant}(12){(core::num*) →* core::bool*};
    #t5.{core::Set::add}{Invariant}(13){(core::num*) →* core::bool*};
    #t5.{core::Set::add}{Invariant}(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}{Invariant}(15){(core::int*) →* core::bool*};
    #t6.{core::Set::add}{Invariant}(16){(core::int*) →* core::bool*};
    #t6.{core::Set::add}{Invariant}(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}{Invariant}(18){(core::int*) →* core::bool*};
    #t7.{core::Set::add}{Invariant}(19){(core::int*) →* core::bool*};
    #t7.{core::Set::add}{Invariant}(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}{Invariant}(21){(core::num*) →* core::bool*};
    #t8.{core::Set::add}{Invariant}(22){(core::num*) →* core::bool*};
    #t8.{core::Set::add}{Invariant}(23){(core::num*) →* core::bool*};
  } =>#t8;
  core::Set<core::int*>* set1 = block {
    final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
    for (final has-declared-initializer dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::int* #t11 = #t10 as{TypeError} core::int*;
      #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
    }
    for (final has-declared-initializer dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::int* #t13 = #t12 as{TypeError} core::int*;
      #t9.{core::Set::add}{Invariant}(#t13){(core::int*) →* core::bool*};
    }
    #t9.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::int*>*) →* void};
    for (final has-declared-initializer dynamic #t14 in iterableNumSet1) {
      final core::int* #t15 = #t14 as{TypeError} core::int*;
      #t9.{core::Set::add}{Invariant}(#t15){(core::int*) →* core::bool*};
    }
    for (final has-declared-initializer dynamic #t16 in iterableNumSet2) {
      final core::int* #t17 = #t16 as{TypeError} core::int*;
      #t9.{core::Set::add}{Invariant}(#t17){(core::int*) →* core::bool*};
    }
    #t9.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::int*>*) →* void};
    for (final has-declared-initializer dynamic #t18 in numSet1) {
      final core::int* #t19 = #t18 as{TypeError} core::int*;
      #t9.{core::Set::add}{Invariant}(#t19){(core::int*) →* core::bool*};
    }
    for (final has-declared-initializer dynamic #t20 in numSet2) {
      final core::int* #t21 = #t20 as{TypeError} core::int*;
      #t9.{core::Set::add}{Invariant}(#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 has-declared-initializer dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::num* #t24 = #t23 as{TypeError} core::num*;
      #t22.{core::Set::add}{Invariant}(#t24){(core::num*) →* core::bool*};
    }
    for (final has-declared-initializer dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::num* #t26 = #t25 as{TypeError} core::num*;
      #t22.{core::Set::add}{Invariant}(#t26){(core::num*) →* core::bool*};
    }
    #t22.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}{Invariant}(iterableNumSet1){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}{Invariant}(iterableNumSet2){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}{Invariant}(numSet1){(core::Iterable<core::num*>*) →* void};
    #t22.{core::Set::addAll}{Invariant}(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 has-declared-initializer dynamic #t29 in #t28) {
        final core::int* #t30 = #t29 as{TypeError} core::int*;
        #t27.{core::Set::add}{Invariant}(#t30){(core::int*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t31 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
    if(!(#t31 == null))
      for (final has-declared-initializer dynamic #t32 in #t31) {
        final core::int* #t33 = #t32 as{TypeError} core::int*;
        #t27.{core::Set::add}{Invariant}(#t33){(core::int*) →* core::bool*};
      }
    final core::Iterable<core::int*>* #t34 = iterableIntSet;
    if(!(#t34 == null))
      #t27.{core::Set::addAll}{Invariant}(#t34){(core::Iterable<core::int*>*) →* void};
    final core::Iterable<dynamic>* #t35 = iterableNumSet1;
    if(!(#t35 == null))
      for (final has-declared-initializer dynamic #t36 in #t35) {
        final core::int* #t37 = #t36 as{TypeError} core::int*;
        #t27.{core::Set::add}{Invariant}(#t37){(core::int*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t38 = iterableNumSet2;
    if(!(#t38 == null))
      for (final has-declared-initializer dynamic #t39 in #t38) {
        final core::int* #t40 = #t39 as{TypeError} core::int*;
        #t27.{core::Set::add}{Invariant}(#t40){(core::int*) →* core::bool*};
      }
    final core::Iterable<core::int*>* #t41 = intSet;
    if(!(#t41 == null))
      #t27.{core::Set::addAll}{Invariant}(#t41){(core::Iterable<core::int*>*) →* void};
    final core::Iterable<dynamic>* #t42 = numSet1;
    if(!(#t42 == null))
      for (final has-declared-initializer dynamic #t43 in #t42) {
        final core::int* #t44 = #t43 as{TypeError} core::int*;
        #t27.{core::Set::add}{Invariant}(#t44){(core::int*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t45 = numSet2;
    if(!(#t45 == null))
      for (final has-declared-initializer dynamic #t46 in #t45) {
        final core::int* #t47 = #t46 as{TypeError} core::int*;
        #t27.{core::Set::add}{Invariant}(#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 has-declared-initializer dynamic #t50 in #t49) {
        final core::num* #t51 = #t50 as{TypeError} core::num*;
        #t48.{core::Set::add}{Invariant}(#t51){(core::num*) →* core::bool*};
      }
    final core::Iterable<dynamic>* #t52 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
    if(!(#t52 == null))
      for (final has-declared-initializer dynamic #t53 in #t52) {
        final core::num* #t54 = #t53 as{TypeError} core::num*;
        #t48.{core::Set::add}{Invariant}(#t54){(core::num*) →* core::bool*};
      }
    final core::Iterable<core::num*>* #t55 = iterableIntSet;
    if(!(#t55 == null))
      #t48.{core::Set::addAll}{Invariant}(#t55){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t56 = iterableNumSet1;
    if(!(#t56 == null))
      #t48.{core::Set::addAll}{Invariant}(#t56){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t57 = iterableNumSet2;
    if(!(#t57 == null))
      #t48.{core::Set::addAll}{Invariant}(#t57){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t58 = intSet;
    if(!(#t58 == null))
      #t48.{core::Set::addAll}{Invariant}(#t58){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t59 = numSet1;
    if(!(#t59 == null))
      #t48.{core::Set::addAll}{Invariant}(#t59){(core::Iterable<core::num*>*) →* void};
    final core::Iterable<core::num*>* #t60 = numSet2;
    if(!(#t60 == null))
      #t48.{core::Set::addAll}{Invariant}(#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}.";
    }
  }
}
