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