@Test
 public void libraryReference() {
   Helper.check(0, TestCanUsePureLibrary.class);
 }
 @Test
 public void covariantReturnTypeImmutable() {
   Helper.check(3, 2, BadBase.class, LeakyOverride.class, PureClass.class);
 }
 @Test
 public void runtimeResultNarrowing() {
   Helper.check(1, NarrowAtRuntime.class);
   Helper.check(1, BrokenRuntimeCheck.class);
 }
 @Test
 public void parentClassNotImmutable() {
   Helper.check(1, InnerClassAccess.class);
   Helper.check(0, FieldSetting.class);
 }
 @Test
 public void thisAllowedAsReturn() {
   Helper.check(0, ReturnThis.class);
 }
 @Test
 public void immutableOnlyReturned() {
   Helper.check(1, BadReturn.class);
 }
 @Test
 public void publicParametersImmutable() {
   Helper.check(1, PureNarrowingTest.class);
 }
 @Test
 public void publicFieldsImmutable() {
   Helper.check(1, TestCheckStatic.class);
   Helper.check(1, SomeMutableUnsharedClass.class);
 }
 @Test
 public void annotationInherited() {
   Helper.check(2, BasePure.class, InheritedPure.class);
 }
 @Test
 public void visitorExample() {
   Helper.check(1, VisitorExample.class);
 }