blob: 1901a88c1276e3b6a2b5df88b66236f5415d97e4 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import "package:expect/expect.dart";
Function? foo = null;
// Checks that contexts for the constructor allocator and constructor body are
// setup correctly when using the [dart2wasm] compiler, or this test will
// throw an error at compile time. In [dart2wasm], there are four cases:
//
// 1. No context is needed for the constructor (i.e. there are no captured
// type parameters or normal parameters, and `this` is not captured).
// 2. Only the constructor body context is needed (i.e. `this` is captured
// by the constructor body, or normal parameters are captured by in the
// constructor body but nothing else is captured).
// 3. Only the constructor allocator context is needed (i.e. type
// parameters and/or normal parameters) are captured, but `this` is not
// captured.
// 4. Both the constructor allocator and constructor body contexts are
// needed (i.e. type parameters and/or normal parameters are captured,
// and `this` is captured by the constructor body).
//
// `this` cannot be captured by a constructor's initializer list, as the object
// has not been allocated yet.
var expectedValueOfA = 0;
abstract class Test {
List<Function> assertions = [];
Test();
void runAssertions() {
for (Function assertion in assertions) {
assertion();
}
}
}
// No contexts should be created, as nothing is captured.
class NoContextsNothingCaptured<T> extends Test {
Function f1;
Function f2;
NoContextsNothingCaptured(T a)
: f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() => {});
assertions.add(() => {});
}
}
// Combinations which should create just a constructor allocator context.
class AllocatorContextOnlyTypeParamCapturedInInitializer<T> extends Test {
Function f1;
Function f2;
T a;
AllocatorContextOnlyTypeParamCapturedInInitializer(this.a)
: f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() => {});
assertions.add(() => {});
}
}
class AllocatorContextOnlyNormalParamCapturedInInitializer<T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextOnlyNormalParamCapturedInInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() => {});
assertions.add(() => {});
}
}
class AllocatorContextTypeAndNormalParamCapturedInInitializer<T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextTypeAndNormalParamCapturedInInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() => {});
assertions.add(() => {});
}
}
class AllocatorContextOnlyTypeParamCapturedInBody<T> extends Test {
Function f1;
Function f2;
T a;
AllocatorContextOnlyTypeParamCapturedInBody(this.a)
: f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
Expect.identical(T, int);
});
assertions.add(() {
Expect.identical(T, int);
});
}
}
class AllocatorContextTypeParamCapturedInInitializerAndTypeParamInBody<T>
extends Test {
Function f1;
Function f2;
int a;
AllocatorContextTypeParamCapturedInInitializerAndTypeParamInBody(int a)
: this.a = a,
f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
Expect.identical(T, int);
});
assertions.add(() {
Expect.identical(T, int);
});
}
}
class AllocatorContextNormalParamCapturedInInitializerAndTypeParamInBody<T>
extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamCapturedInInitializerAndTypeParamInBody(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
Expect.identical(T, int);
});
assertions.add(() {
Expect.identical(T, int);
});
}
}
class AllocatorContextTypeAndNormalParamCapturedInInitializerAndTypeParamInBody<
T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextTypeAndNormalParamCapturedInInitializerAndTypeParamInBody(
int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
Expect.identical(T, int);
});
assertions.add(() {
Expect.identical(T, int);
});
}
}
// Combinations which should create just a constructor body context.
class BodyContextOnlyThisCaptured<T> extends Test {
Function f1;
Function f2;
int a;
BodyContextOnlyThisCaptured(this.a)
: f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, a);
});
}
}
class BodyContextOnlyNormalParamCapturedInBody<T> extends Test {
Function f1;
Function f2;
int a;
BodyContextOnlyNormalParamCapturedInBody(this.a)
: f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
}
}
class BodyContextOnlyThisAndNormalParamCapturedInBody<T> extends Test {
Function f1;
Function f2;
int a;
BodyContextOnlyThisAndNormalParamCapturedInBody(this.a)
: f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, a);
a++;
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, a);
a++;
Expect.equals(++expectedValueOfA, a);
});
}
}
class AllocatorContextNormalParamCapturedInBodyTypeParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamCapturedInBodyTypeParamInInitializer(int a)
: this.a = a,
f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
}
}
class AllocatorContextNormalParamCapturedInBodyAndInitializer<T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamCapturedInBodyAndInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
}
}
class AllocatorContextNormalParamCapturedInBodyAndNormalAndTypeParamInInitializer<
T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamCapturedInBodyAndNormalAndTypeParamInInitializer(
int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
});
}
}
class AllocatorContextNormalParamAndTypeParamCapturedInBody<T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamAndTypeParamCapturedInBody(int a)
: this.a = a,
f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
class AllocatorContextNormalParamAndTypeParamCapturedInBodyAndTypeParamInInitializer<
T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndTypeParamInInitializer(
int a)
: this.a = a,
f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
class AllocatorContextNormalParamAndTypeParamCapturedInBodyAndNormalParamInInitializer<
T> extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndNormalParamInInitializer(
int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
class AllocatorContextNormalParamAndTypeParamCapturedInBodyAndInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
// Combinations which create an allocator and body context.
class BothContextsThisAndTypeParamCapturedInBody<T> extends Test {
Function f1;
Function f2;
int a;
BothContextsThisAndTypeParamCapturedInBody(int a)
: this.a = a,
f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.identical(T, int);
});
}
}
class BothContextsThisCapturedInBodyTypeParamInInitializer<T> extends Test {
Function f1;
Function f2;
int a;
BothContextsThisCapturedInBodyTypeParamInInitializer(int a)
: this.a = a,
f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, this.a);
});
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, this.a);
});
}
}
class BothContextsThisCapturedInBodyNormalParamInInitializer<T> extends Test {
Function f1;
Function f2;
int a;
BothContextsThisCapturedInBodyNormalParamInInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA - 1, this.a);
});
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA, this.a);
});
}
}
class BothContextsThisCapturedInBodyNormalAndTypeParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
BothContextsThisCapturedInBodyNormalAndTypeParamInInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA - 1, this.a);
});
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA, this.a);
});
}
}
class BothContextsThisAndNormalParamCapturedInBodyTypeParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
BothContextsThisAndNormalParamCapturedInBodyTypeParamInInitializer(int a)
: this.a = a,
f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.equals(expectedValueOfA, a);
});
assertions.add(() {
this.a++;
a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.equals(expectedValueOfA, a);
});
}
}
class BothContextsThisAndNormalParamCapturedInBodyNormalParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
BothContextsThisAndNormalParamCapturedInBodyNormalParamInInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
});
}
}
class BothContextsThisAndNormalParamCapturedInBodyTypeAndNormalParamInInitializer<
T> extends Test {
Function f1;
Function f2;
int a;
BothContextsThisAndNormalParamCapturedInBodyTypeAndNormalParamInInitializer(
int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
});
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
});
}
}
class BothContextsThisAndTypeParamCapturedInBodyTypeParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
BothContextsThisAndTypeParamCapturedInBodyTypeParamInInitializer(int a)
: this.a = a,
f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.identical(T, int);
});
}
}
class BothContextsThisAndTypeParamCapturedInBodyNormalParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
BothContextsThisAndTypeParamCapturedInBodyNormalParamInInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA, this.a);
Expect.identical(T, int);
});
}
}
class BothContextsThisAndTypeParamCapturedInBodyTypeAndNormalParamInInitializer<
T> extends Test {
Function f1;
Function f2;
int a;
BothContextsThisAndTypeParamCapturedInBodyTypeAndNormalParamInInitializer(
int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
Expect.equals(expectedValueOfA, this.a);
Expect.identical(T, int);
});
}
}
class BothContextsEverythingCapturedInBody<T> extends Test {
Function f1;
Function f2;
int a;
BothContextsEverythingCapturedInBody(int a)
: this.a = a,
f1 = (() => {}),
f2 = (() => {}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.equals(expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.equals(expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
class BothContextsEverythingCapturedInBodyAndTypeParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
BothContextsEverythingCapturedInBodyAndTypeParamInInitializer(int a)
: this.a = a,
f1 = (() {
Expect.identical(T, int);
}),
f2 = (() {
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.equals(expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
a++;
Expect.equals(++expectedValueOfA, this.a);
Expect.equals(expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
class BothContextsEverythingCapturedInBodyAndNormalParamInInitializer<T>
extends Test {
Function f1;
Function f2;
int a;
BothContextsEverythingCapturedInBodyAndNormalParamInInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
class BothContextsEverythingCapturedInBodyAndInitializer<T> extends Test {
Function f1;
Function f2;
int a;
BothContextsEverythingCapturedInBodyAndInitializer(int a)
: this.a = a,
f1 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}),
f2 = (() {
a++;
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
}) {
assertions.add(f1);
assertions.add(f2);
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
assertions.add(() {
this.a++;
a++;
Expect.equals(expectedValueOfA - 1, this.a);
Expect.equals(++expectedValueOfA, a);
Expect.identical(T, int);
});
}
}
void main() {
expectedValueOfA = 123;
NoContextsNothingCaptured a =
NoContextsNothingCaptured<int>(expectedValueOfA);
a.runAssertions();
expectedValueOfA = 123;
AllocatorContextOnlyTypeParamCapturedInInitializer b =
AllocatorContextOnlyTypeParamCapturedInInitializer<int>(expectedValueOfA);
b.runAssertions();
expectedValueOfA = 123;
AllocatorContextOnlyNormalParamCapturedInInitializer c =
AllocatorContextOnlyNormalParamCapturedInInitializer<int>(
expectedValueOfA);
c.runAssertions();
expectedValueOfA = 123;
AllocatorContextTypeAndNormalParamCapturedInInitializer d =
AllocatorContextTypeAndNormalParamCapturedInInitializer<int>(
expectedValueOfA);
d.runAssertions();
expectedValueOfA = 123;
AllocatorContextOnlyTypeParamCapturedInBody e =
AllocatorContextOnlyTypeParamCapturedInBody<int>(expectedValueOfA);
e.runAssertions();
expectedValueOfA = 123;
AllocatorContextTypeParamCapturedInInitializerAndTypeParamInBody f =
AllocatorContextTypeParamCapturedInInitializerAndTypeParamInBody<int>(
expectedValueOfA);
f.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamCapturedInInitializerAndTypeParamInBody g =
AllocatorContextNormalParamCapturedInInitializerAndTypeParamInBody<int>(
expectedValueOfA);
g.runAssertions();
expectedValueOfA = 123;
AllocatorContextTypeAndNormalParamCapturedInInitializerAndTypeParamInBody h =
AllocatorContextTypeAndNormalParamCapturedInInitializerAndTypeParamInBody<
int>(expectedValueOfA);
h.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamCapturedInBodyTypeParamInInitializer i =
AllocatorContextNormalParamCapturedInBodyTypeParamInInitializer<int>(
expectedValueOfA);
i.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamCapturedInBodyAndInitializer j =
AllocatorContextNormalParamCapturedInBodyAndInitializer<int>(
expectedValueOfA);
j.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamCapturedInBodyAndNormalAndTypeParamInInitializer
k =
AllocatorContextNormalParamCapturedInBodyAndNormalAndTypeParamInInitializer<
int>(expectedValueOfA);
k.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamAndTypeParamCapturedInBody l =
AllocatorContextNormalParamAndTypeParamCapturedInBody<int>(
expectedValueOfA);
l.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndTypeParamInInitializer
m =
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndTypeParamInInitializer<
int>(expectedValueOfA);
m.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndNormalParamInInitializer
n =
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndNormalParamInInitializer<
int>(expectedValueOfA);
n.runAssertions();
expectedValueOfA = 123;
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndInitializer o =
AllocatorContextNormalParamAndTypeParamCapturedInBodyAndInitializer<int>(
expectedValueOfA);
o.runAssertions();
expectedValueOfA = 123;
BodyContextOnlyNormalParamCapturedInBody p =
BodyContextOnlyNormalParamCapturedInBody<int>(expectedValueOfA);
p.runAssertions();
expectedValueOfA = 123;
BodyContextOnlyThisCaptured q =
BodyContextOnlyThisCaptured<int>(expectedValueOfA);
q.runAssertions();
expectedValueOfA = 123;
BodyContextOnlyThisAndNormalParamCapturedInBody r =
BodyContextOnlyThisAndNormalParamCapturedInBody<int>(expectedValueOfA);
r.runAssertions();
expectedValueOfA = 123;
BothContextsThisCapturedInBodyTypeParamInInitializer s =
BothContextsThisCapturedInBodyTypeParamInInitializer<int>(
expectedValueOfA);
s.runAssertions();
expectedValueOfA = 123;
BothContextsThisCapturedInBodyNormalParamInInitializer t =
BothContextsThisCapturedInBodyNormalParamInInitializer<int>(
expectedValueOfA);
t.runAssertions();
expectedValueOfA = 123;
BothContextsThisCapturedInBodyNormalAndTypeParamInInitializer u =
BothContextsThisCapturedInBodyNormalAndTypeParamInInitializer<int>(
expectedValueOfA);
u.runAssertions();
expectedValueOfA = 123;
BothContextsThisAndTypeParamCapturedInBody v =
BothContextsThisAndTypeParamCapturedInBody<int>(expectedValueOfA);
v.runAssertions();
expectedValueOfA = 123;
BothContextsThisAndTypeParamCapturedInBodyTypeParamInInitializer w =
BothContextsThisAndTypeParamCapturedInBodyTypeParamInInitializer<int>(
expectedValueOfA);
w.runAssertions();
expectedValueOfA = 123;
BothContextsThisAndTypeParamCapturedInBodyNormalParamInInitializer x =
BothContextsThisAndTypeParamCapturedInBodyNormalParamInInitializer<int>(
expectedValueOfA);
x.runAssertions();
expectedValueOfA = 123;
BothContextsThisAndTypeParamCapturedInBodyTypeAndNormalParamInInitializer y =
BothContextsThisAndTypeParamCapturedInBodyTypeAndNormalParamInInitializer<
int>(expectedValueOfA);
y.runAssertions();
expectedValueOfA = 123;
BothContextsThisAndNormalParamCapturedInBodyTypeParamInInitializer z =
BothContextsThisAndNormalParamCapturedInBodyTypeParamInInitializer<int>(
expectedValueOfA);
z.runAssertions();
expectedValueOfA = 123;
BothContextsThisAndNormalParamCapturedInBodyNormalParamInInitializer aa =
BothContextsThisAndNormalParamCapturedInBodyNormalParamInInitializer<int>(
expectedValueOfA);
aa.runAssertions();
expectedValueOfA = 123;
BothContextsThisAndNormalParamCapturedInBodyTypeAndNormalParamInInitializer
ab =
BothContextsThisAndNormalParamCapturedInBodyTypeAndNormalParamInInitializer<
int>(expectedValueOfA);
ab.runAssertions();
expectedValueOfA = 123;
BothContextsEverythingCapturedInBody ac =
BothContextsEverythingCapturedInBody<int>(expectedValueOfA);
ac.runAssertions();
expectedValueOfA = 123;
BothContextsEverythingCapturedInBodyAndTypeParamInInitializer ad =
BothContextsEverythingCapturedInBodyAndTypeParamInInitializer<int>(
expectedValueOfA);
ad.runAssertions();
expectedValueOfA = 123;
BothContextsEverythingCapturedInBodyAndNormalParamInInitializer ae =
BothContextsEverythingCapturedInBodyAndNormalParamInInitializer<int>(
expectedValueOfA);
ae.runAssertions();
expectedValueOfA = 123;
BothContextsEverythingCapturedInBodyAndInitializer af =
BothContextsEverythingCapturedInBodyAndInitializer<int>(expectedValueOfA);
af.runAssertions();
}