library test;
import self as self;
import "dart:core" as core;

abstract class Test<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Test<self::Test::T*, self::Test::U*>*
    : super core::Object::•()
    ;
  abstract operator [](core::String* s) → self::Test::T*;
  abstract operator []=(core::String* s, generic-covariant-impl self::Test::U* v) → void;
}
static method getInt() → core::int*
  return 0;
static method getNum() → core::num*
  return 0;
static method getDouble() → core::double*
  return 0.0;
static method test1(self::Test<core::int*, core::int*>* t) → void {
  dynamic v1 = let final dynamic #t1 = t in let final dynamic #t2 = "x" in let final dynamic #t3 = self::getInt() in let final dynamic #t4 = #t1.[]=(#t2, #t3) in #t3;
  dynamic v2 = let final dynamic #t5 = t in let final dynamic #t6 = "x" in let final dynamic #t7 = self::getNum() in let final dynamic #t8 = #t5.[]=(#t6, #t7) in #t7;
  dynamic v4 = let final dynamic #t9 = t in let final dynamic #t10 = "x" in let final dynamic #t11 = #t9.[](#t10) in #t11.==(null) ? let final dynamic #t12 = self::getInt() in let final dynamic #t13 = #t9.[]=(#t10, #t12) in #t12 : #t11;
  dynamic v5 = let final dynamic #t14 = t in let final dynamic #t15 = "x" in let final dynamic #t16 = #t14.[](#t15) in #t16.==(null) ? let final dynamic #t17 = self::getNum() in let final dynamic #t18 = #t14.[]=(#t15, #t17) in #t17 : #t16;
  dynamic v7 = let final dynamic #t19 = t in let final dynamic #t20 = "x" in let final dynamic #t21 = #t19.[](#t20).+(self::getInt()) in let final dynamic #t22 = #t19.[]=(#t20, #t21) in #t21;
  dynamic v8 = let final dynamic #t23 = t in let final dynamic #t24 = "x" in let final dynamic #t25 = #t23.[](#t24).+(self::getNum()) in let final dynamic #t26 = #t23.[]=(#t24, #t25) in #t25;
  dynamic v10 = let final dynamic #t27 = t in let final dynamic #t28 = "x" in let final dynamic #t29 = #t27.[](#t28).+(1) in let final dynamic #t30 = #t27.[]=(#t28, #t29) in #t29;
  dynamic v11 = let final dynamic #t31 = t in let final dynamic #t32 = "x" in let final dynamic #t33 = #t31.[](#t32) in let final dynamic #t34 = #t31.[]=(#t32, #t33.+(1)) in #t33;
}
static method test2(self::Test<core::int*, core::num*>* t) → void {
  dynamic v1 = let final dynamic #t35 = t in let final dynamic #t36 = "x" in let final dynamic #t37 = self::getInt() in let final dynamic #t38 = #t35.[]=(#t36, #t37) in #t37;
  dynamic v2 = let final dynamic #t39 = t in let final dynamic #t40 = "x" in let final dynamic #t41 = self::getNum() in let final dynamic #t42 = #t39.[]=(#t40, #t41) in #t41;
  dynamic v3 = let final dynamic #t43 = t in let final dynamic #t44 = "x" in let final dynamic #t45 = self::getDouble() in let final dynamic #t46 = #t43.[]=(#t44, #t45) in #t45;
  dynamic v4 = let final dynamic #t47 = t in let final dynamic #t48 = "x" in let final dynamic #t49 = #t47.[](#t48) in #t49.==(null) ? let final dynamic #t50 = self::getInt() in let final dynamic #t51 = #t47.[]=(#t48, #t50) in #t50 : #t49;
  dynamic v5 = let final dynamic #t52 = t in let final dynamic #t53 = "x" in let final dynamic #t54 = #t52.[](#t53) in #t54.==(null) ? let final dynamic #t55 = self::getNum() in let final dynamic #t56 = #t52.[]=(#t53, #t55) in #t55 : #t54;
  dynamic v6 = let final dynamic #t57 = t in let final dynamic #t58 = "x" in let final dynamic #t59 = #t57.[](#t58) in #t59.==(null) ? let final dynamic #t60 = self::getDouble() in let final dynamic #t61 = #t57.[]=(#t58, #t60) in #t60 : #t59;
  dynamic v7 = let final dynamic #t62 = t in let final dynamic #t63 = "x" in let final dynamic #t64 = #t62.[](#t63).+(self::getInt()) in let final dynamic #t65 = #t62.[]=(#t63, #t64) in #t64;
  dynamic v8 = let final dynamic #t66 = t in let final dynamic #t67 = "x" in let final dynamic #t68 = #t66.[](#t67).+(self::getNum()) in let final dynamic #t69 = #t66.[]=(#t67, #t68) in #t68;
  dynamic v9 = let final dynamic #t70 = t in let final dynamic #t71 = "x" in let final dynamic #t72 = #t70.[](#t71).+(self::getDouble()) in let final dynamic #t73 = #t70.[]=(#t71, #t72) in #t72;
  dynamic v10 = let final dynamic #t74 = t in let final dynamic #t75 = "x" in let final dynamic #t76 = #t74.[](#t75).+(1) in let final dynamic #t77 = #t74.[]=(#t75, #t76) in #t76;
  dynamic v11 = let final dynamic #t78 = t in let final dynamic #t79 = "x" in let final dynamic #t80 = #t78.[](#t79) in let final dynamic #t81 = #t78.[]=(#t79, #t80.+(1)) in #t80;
}
static method test3(self::Test<core::int*, core::double*>* t) → void {
  dynamic v2 = let final dynamic #t82 = t in let final dynamic #t83 = "x" in let final dynamic #t84 = self::getNum() in let final dynamic #t85 = #t82.[]=(#t83, #t84) in #t84;
  dynamic v3 = let final dynamic #t86 = t in let final dynamic #t87 = "x" in let final dynamic #t88 = self::getDouble() in let final dynamic #t89 = #t86.[]=(#t87, #t88) in #t88;
  dynamic v5 = let final dynamic #t90 = t in let final dynamic #t91 = "x" in let final dynamic #t92 = #t90.[](#t91) in #t92.==(null) ? let final dynamic #t93 = self::getNum() in let final dynamic #t94 = #t90.[]=(#t91, #t93) in #t93 : #t92;
  dynamic v6 = let final dynamic #t95 = t in let final dynamic #t96 = "x" in let final dynamic #t97 = #t95.[](#t96) in #t97.==(null) ? let final dynamic #t98 = self::getDouble() in let final dynamic #t99 = #t95.[]=(#t96, #t98) in #t98 : #t97;
  dynamic v7 = let final dynamic #t100 = t in let final dynamic #t101 = "x" in let final dynamic #t102 = #t100.[](#t101).+(self::getInt()) in let final dynamic #t103 = #t100.[]=(#t101, #t102) in #t102;
  dynamic v8 = let final dynamic #t104 = t in let final dynamic #t105 = "x" in let final dynamic #t106 = #t104.[](#t105).+(self::getNum()) in let final dynamic #t107 = #t104.[]=(#t105, #t106) in #t106;
  dynamic v9 = let final dynamic #t108 = t in let final dynamic #t109 = "x" in let final dynamic #t110 = #t108.[](#t109).+(self::getDouble()) in let final dynamic #t111 = #t108.[]=(#t109, #t110) in #t110;
  dynamic v10 = let final dynamic #t112 = t in let final dynamic #t113 = "x" in let final dynamic #t114 = #t112.[](#t113).+(1) in let final dynamic #t115 = #t112.[]=(#t113, #t114) in #t114;
  dynamic v11 = let final dynamic #t116 = t in let final dynamic #t117 = "x" in let final dynamic #t118 = #t116.[](#t117) in let final dynamic #t119 = #t116.[]=(#t117, #t118.+(1)) in #t118;
}
static method test4(self::Test<core::num*, core::int*>* t) → void {
  dynamic v1 = let final dynamic #t120 = t in let final dynamic #t121 = "x" in let final dynamic #t122 = self::getInt() in let final dynamic #t123 = #t120.[]=(#t121, #t122) in #t122;
  dynamic v2 = let final dynamic #t124 = t in let final dynamic #t125 = "x" in let final dynamic #t126 = self::getNum() in let final dynamic #t127 = #t124.[]=(#t125, #t126) in #t126;
  dynamic v4 = let final dynamic #t128 = t in let final dynamic #t129 = "x" in let final dynamic #t130 = #t128.[](#t129) in #t130.==(null) ? let final dynamic #t131 = self::getInt() in let final dynamic #t132 = #t128.[]=(#t129, #t131) in #t131 : #t130;
  dynamic v5 = let final dynamic #t133 = t in let final dynamic #t134 = "x" in let final dynamic #t135 = #t133.[](#t134) in #t135.==(null) ? let final dynamic #t136 = self::getNum() in let final dynamic #t137 = #t133.[]=(#t134, #t136) in #t136 : #t135;
  dynamic v7 = let final dynamic #t138 = t in let final dynamic #t139 = "x" in let final dynamic #t140 = #t138.[](#t139).+(self::getInt()) in let final dynamic #t141 = #t138.[]=(#t139, #t140) in #t140;
  dynamic v8 = let final dynamic #t142 = t in let final dynamic #t143 = "x" in let final dynamic #t144 = #t142.[](#t143).+(self::getNum()) in let final dynamic #t145 = #t142.[]=(#t143, #t144) in #t144;
  dynamic v10 = let final dynamic #t146 = t in let final dynamic #t147 = "x" in let final dynamic #t148 = #t146.[](#t147).+(1) in let final dynamic #t149 = #t146.[]=(#t147, #t148) in #t148;
  dynamic v11 = let final dynamic #t150 = t in let final dynamic #t151 = "x" in let final dynamic #t152 = #t150.[](#t151) in let final dynamic #t153 = #t150.[]=(#t151, #t152.+(1)) in #t152;
}
static method test5(self::Test<core::num*, core::num*>* t) → void {
  dynamic v1 = let final dynamic #t154 = t in let final dynamic #t155 = "x" in let final dynamic #t156 = self::getInt() in let final dynamic #t157 = #t154.[]=(#t155, #t156) in #t156;
  dynamic v2 = let final dynamic #t158 = t in let final dynamic #t159 = "x" in let final dynamic #t160 = self::getNum() in let final dynamic #t161 = #t158.[]=(#t159, #t160) in #t160;
  dynamic v3 = let final dynamic #t162 = t in let final dynamic #t163 = "x" in let final dynamic #t164 = self::getDouble() in let final dynamic #t165 = #t162.[]=(#t163, #t164) in #t164;
  dynamic v4 = let final dynamic #t166 = t in let final dynamic #t167 = "x" in let final dynamic #t168 = #t166.[](#t167) in #t168.==(null) ? let final dynamic #t169 = self::getInt() in let final dynamic #t170 = #t166.[]=(#t167, #t169) in #t169 : #t168;
  dynamic v5 = let final dynamic #t171 = t in let final dynamic #t172 = "x" in let final dynamic #t173 = #t171.[](#t172) in #t173.==(null) ? let final dynamic #t174 = self::getNum() in let final dynamic #t175 = #t171.[]=(#t172, #t174) in #t174 : #t173;
  dynamic v6 = let final dynamic #t176 = t in let final dynamic #t177 = "x" in let final dynamic #t178 = #t176.[](#t177) in #t178.==(null) ? let final dynamic #t179 = self::getDouble() in let final dynamic #t180 = #t176.[]=(#t177, #t179) in #t179 : #t178;
  dynamic v7 = let final dynamic #t181 = t in let final dynamic #t182 = "x" in let final dynamic #t183 = #t181.[](#t182).+(self::getInt()) in let final dynamic #t184 = #t181.[]=(#t182, #t183) in #t183;
  dynamic v8 = let final dynamic #t185 = t in let final dynamic #t186 = "x" in let final dynamic #t187 = #t185.[](#t186).+(self::getNum()) in let final dynamic #t188 = #t185.[]=(#t186, #t187) in #t187;
  dynamic v9 = let final dynamic #t189 = t in let final dynamic #t190 = "x" in let final dynamic #t191 = #t189.[](#t190).+(self::getDouble()) in let final dynamic #t192 = #t189.[]=(#t190, #t191) in #t191;
  dynamic v10 = let final dynamic #t193 = t in let final dynamic #t194 = "x" in let final dynamic #t195 = #t193.[](#t194).+(1) in let final dynamic #t196 = #t193.[]=(#t194, #t195) in #t195;
  dynamic v11 = let final dynamic #t197 = t in let final dynamic #t198 = "x" in let final dynamic #t199 = #t197.[](#t198) in let final dynamic #t200 = #t197.[]=(#t198, #t199.+(1)) in #t199;
}
static method test6(self::Test<core::num*, core::double*>* t) → void {
  dynamic v2 = let final dynamic #t201 = t in let final dynamic #t202 = "x" in let final dynamic #t203 = self::getNum() in let final dynamic #t204 = #t201.[]=(#t202, #t203) in #t203;
  dynamic v3 = let final dynamic #t205 = t in let final dynamic #t206 = "x" in let final dynamic #t207 = self::getDouble() in let final dynamic #t208 = #t205.[]=(#t206, #t207) in #t207;
  dynamic v5 = let final dynamic #t209 = t in let final dynamic #t210 = "x" in let final dynamic #t211 = #t209.[](#t210) in #t211.==(null) ? let final dynamic #t212 = self::getNum() in let final dynamic #t213 = #t209.[]=(#t210, #t212) in #t212 : #t211;
  dynamic v6 = let final dynamic #t214 = t in let final dynamic #t215 = "x" in let final dynamic #t216 = #t214.[](#t215) in #t216.==(null) ? let final dynamic #t217 = self::getDouble() in let final dynamic #t218 = #t214.[]=(#t215, #t217) in #t217 : #t216;
  dynamic v7 = let final dynamic #t219 = t in let final dynamic #t220 = "x" in let final dynamic #t221 = #t219.[](#t220).+(self::getInt()) in let final dynamic #t222 = #t219.[]=(#t220, #t221) in #t221;
  dynamic v8 = let final dynamic #t223 = t in let final dynamic #t224 = "x" in let final dynamic #t225 = #t223.[](#t224).+(self::getNum()) in let final dynamic #t226 = #t223.[]=(#t224, #t225) in #t225;
  dynamic v9 = let final dynamic #t227 = t in let final dynamic #t228 = "x" in let final dynamic #t229 = #t227.[](#t228).+(self::getDouble()) in let final dynamic #t230 = #t227.[]=(#t228, #t229) in #t229;
  dynamic v10 = let final dynamic #t231 = t in let final dynamic #t232 = "x" in let final dynamic #t233 = #t231.[](#t232).+(1) in let final dynamic #t234 = #t231.[]=(#t232, #t233) in #t233;
  dynamic v11 = let final dynamic #t235 = t in let final dynamic #t236 = "x" in let final dynamic #t237 = #t235.[](#t236) in let final dynamic #t238 = #t235.[]=(#t236, #t237.+(1)) in #t237;
}
static method test7(self::Test<core::double*, core::int*>* t) → void {
  dynamic v1 = let final dynamic #t239 = t in let final dynamic #t240 = "x" in let final dynamic #t241 = self::getInt() in let final dynamic #t242 = #t239.[]=(#t240, #t241) in #t241;
  dynamic v2 = let final dynamic #t243 = t in let final dynamic #t244 = "x" in let final dynamic #t245 = self::getNum() in let final dynamic #t246 = #t243.[]=(#t244, #t245) in #t245;
  dynamic v4 = let final dynamic #t247 = t in let final dynamic #t248 = "x" in let final dynamic #t249 = #t247.[](#t248) in #t249.==(null) ? let final dynamic #t250 = self::getInt() in let final dynamic #t251 = #t247.[]=(#t248, #t250) in #t250 : #t249;
  dynamic v5 = let final dynamic #t252 = t in let final dynamic #t253 = "x" in let final dynamic #t254 = #t252.[](#t253) in #t254.==(null) ? let final dynamic #t255 = self::getNum() in let final dynamic #t256 = #t252.[]=(#t253, #t255) in #t255 : #t254;
  dynamic v7 = let final dynamic #t257 = t in let final dynamic #t258 = "x" in let final dynamic #t259 = #t257.[](#t258).+(self::getInt()) in let final dynamic #t260 = #t257.[]=(#t258, #t259) in #t259;
  dynamic v8 = let final dynamic #t261 = t in let final dynamic #t262 = "x" in let final dynamic #t263 = #t261.[](#t262).+(self::getNum()) in let final dynamic #t264 = #t261.[]=(#t262, #t263) in #t263;
  dynamic v10 = let final dynamic #t265 = t in let final dynamic #t266 = "x" in let final dynamic #t267 = #t265.[](#t266).+(1) in let final dynamic #t268 = #t265.[]=(#t266, #t267) in #t267;
  dynamic v11 = let final dynamic #t269 = t in let final dynamic #t270 = "x" in let final dynamic #t271 = #t269.[](#t270) in let final dynamic #t272 = #t269.[]=(#t270, #t271.+(1)) in #t271;
}
static method test8(self::Test<core::double*, core::num*>* t) → void {
  dynamic v1 = let final dynamic #t273 = t in let final dynamic #t274 = "x" in let final dynamic #t275 = self::getInt() in let final dynamic #t276 = #t273.[]=(#t274, #t275) in #t275;
  dynamic v2 = let final dynamic #t277 = t in let final dynamic #t278 = "x" in let final dynamic #t279 = self::getNum() in let final dynamic #t280 = #t277.[]=(#t278, #t279) in #t279;
  dynamic v3 = let final dynamic #t281 = t in let final dynamic #t282 = "x" in let final dynamic #t283 = self::getDouble() in let final dynamic #t284 = #t281.[]=(#t282, #t283) in #t283;
  dynamic v4 = let final dynamic #t285 = t in let final dynamic #t286 = "x" in let final dynamic #t287 = #t285.[](#t286) in #t287.==(null) ? let final dynamic #t288 = self::getInt() in let final dynamic #t289 = #t285.[]=(#t286, #t288) in #t288 : #t287;
  dynamic v5 = let final dynamic #t290 = t in let final dynamic #t291 = "x" in let final dynamic #t292 = #t290.[](#t291) in #t292.==(null) ? let final dynamic #t293 = self::getNum() in let final dynamic #t294 = #t290.[]=(#t291, #t293) in #t293 : #t292;
  dynamic v6 = let final dynamic #t295 = t in let final dynamic #t296 = "x" in let final dynamic #t297 = #t295.[](#t296) in #t297.==(null) ? let final dynamic #t298 = self::getDouble() in let final dynamic #t299 = #t295.[]=(#t296, #t298) in #t298 : #t297;
  dynamic v7 = let final dynamic #t300 = t in let final dynamic #t301 = "x" in let final dynamic #t302 = #t300.[](#t301).+(self::getInt()) in let final dynamic #t303 = #t300.[]=(#t301, #t302) in #t302;
  dynamic v8 = let final dynamic #t304 = t in let final dynamic #t305 = "x" in let final dynamic #t306 = #t304.[](#t305).+(self::getNum()) in let final dynamic #t307 = #t304.[]=(#t305, #t306) in #t306;
  dynamic v9 = let final dynamic #t308 = t in let final dynamic #t309 = "x" in let final dynamic #t310 = #t308.[](#t309).+(self::getDouble()) in let final dynamic #t311 = #t308.[]=(#t309, #t310) in #t310;
  dynamic v10 = let final dynamic #t312 = t in let final dynamic #t313 = "x" in let final dynamic #t314 = #t312.[](#t313).+(1) in let final dynamic #t315 = #t312.[]=(#t313, #t314) in #t314;
  dynamic v11 = let final dynamic #t316 = t in let final dynamic #t317 = "x" in let final dynamic #t318 = #t316.[](#t317) in let final dynamic #t319 = #t316.[]=(#t317, #t318.+(1)) in #t318;
}
static method test9(self::Test<core::double*, core::double*>* t) → void {
  dynamic v2 = let final dynamic #t320 = t in let final dynamic #t321 = "x" in let final dynamic #t322 = self::getNum() in let final dynamic #t323 = #t320.[]=(#t321, #t322) in #t322;
  dynamic v3 = let final dynamic #t324 = t in let final dynamic #t325 = "x" in let final dynamic #t326 = self::getDouble() in let final dynamic #t327 = #t324.[]=(#t325, #t326) in #t326;
  dynamic v5 = let final dynamic #t328 = t in let final dynamic #t329 = "x" in let final dynamic #t330 = #t328.[](#t329) in #t330.==(null) ? let final dynamic #t331 = self::getNum() in let final dynamic #t332 = #t328.[]=(#t329, #t331) in #t331 : #t330;
  dynamic v6 = let final dynamic #t333 = t in let final dynamic #t334 = "x" in let final dynamic #t335 = #t333.[](#t334) in #t335.==(null) ? let final dynamic #t336 = self::getDouble() in let final dynamic #t337 = #t333.[]=(#t334, #t336) in #t336 : #t335;
  dynamic v7 = let final dynamic #t338 = t in let final dynamic #t339 = "x" in let final dynamic #t340 = #t338.[](#t339).+(self::getInt()) in let final dynamic #t341 = #t338.[]=(#t339, #t340) in #t340;
  dynamic v8 = let final dynamic #t342 = t in let final dynamic #t343 = "x" in let final dynamic #t344 = #t342.[](#t343).+(self::getNum()) in let final dynamic #t345 = #t342.[]=(#t343, #t344) in #t344;
  dynamic v9 = let final dynamic #t346 = t in let final dynamic #t347 = "x" in let final dynamic #t348 = #t346.[](#t347).+(self::getDouble()) in let final dynamic #t349 = #t346.[]=(#t347, #t348) in #t348;
  dynamic v10 = let final dynamic #t350 = t in let final dynamic #t351 = "x" in let final dynamic #t352 = #t350.[](#t351).+(1) in let final dynamic #t353 = #t350.[]=(#t351, #t352) in #t352;
  dynamic v11 = let final dynamic #t354 = t in let final dynamic #t355 = "x" in let final dynamic #t356 = #t354.[](#t355) in let final dynamic #t357 = #t354.[]=(#t355, #t356.+(1)) in #t356;
}
static method main() → dynamic {}
