Fixed accuracy issue in contrast calculations and added helper methods into GTXToolkit interface.
diff --git a/Classes/GTXImageAndColorUtils.m b/Classes/GTXImageAndColorUtils.m
index 96856bf..1033b58 100644
--- a/Classes/GTXImageAndColorUtils.m
+++ b/Classes/GTXImageAndColorUtils.m
@@ -34,8 +34,7 @@
       return (CGFloat)pow((component + 0.055f) / 1.055f, 2.4f);
     }
   };
-  return (0.2126f * adjustedComponent(red) +
-          0.0722f * adjustedComponent(blue) +
+  return (0.2126f * adjustedComponent(red) + 0.0722f * adjustedComponent(blue) +
           0.7152f * adjustedComponent(green));
 }
 
@@ -56,8 +55,10 @@
 }
 
 + (CGFloat)contrastRatioOfUILabel:(UILabel *)label {
-  NSAssert(label.window, @"Label %@ must be part of view hierarchy to use this method, see API"
-                         @" docs for more info.", label);
+  NSAssert(label.window,
+           @"Label %@ must be part of view hierarchy to use this method, see API"
+           @" docs for more info.",
+           label);
 
   // Take snapshot of the label as it exists.
   UIImage *before = [self gtx_takeSnapshot:label];
@@ -72,8 +73,10 @@
 }
 
 + (CGFloat)contrastRatioOfUITextView:(UITextView *)view {
-  NSAssert(view.window, @"View %@ must be part of view hierarchy to use this method, see API"
-           @" docs for more info.", view);
+  NSAssert(view.window,
+           @"View %@ must be part of view hierarchy to use this method, see API"
+           @" docs for more info.",
+           view);
 
   // Take snapshot of the text view as it exists.
   UIImage *before = [self gtx_takeSnapshot:view];
@@ -90,22 +93,20 @@
 #pragma mark - Utils
 
 + (UIImage *)gtx_takeSnapshot:(UIView *)element {
-    CGRect labelBounds = [element.window convertRect:element.bounds fromView:element];
-    UIWindow *window = element.window;
-    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
-      UIGraphicsBeginImageContextWithOptions(labelBounds.size,
-                                             NO, [UIScreen mainScreen].scale);
-    } else {
-      UIGraphicsBeginImageContext(labelBounds.size);
-    }
-    CGRect screenRect = CGRectZero;
-    screenRect.origin = CGPointMake(-labelBounds.origin.x,
-                                    -labelBounds.origin.y);
-    screenRect.size = window.bounds.size;
-    [window drawViewHierarchyInRect:screenRect afterScreenUpdates:YES];
-    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    return image;
+  CGRect labelBounds = [element.window convertRect:element.bounds fromView:element];
+  UIWindow *window = element.window;
+  if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
+    UIGraphicsBeginImageContextWithOptions(labelBounds.size, NO, [UIScreen mainScreen].scale);
+  } else {
+    UIGraphicsBeginImageContext(labelBounds.size);
+  }
+  CGRect screenRect = CGRectZero;
+  screenRect.origin = CGPointMake(-labelBounds.origin.x, -labelBounds.origin.y);
+  screenRect.size = window.bounds.size;
+  [window drawViewHierarchyInRect:screenRect afterScreenUpdates:YES];
+  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+  UIGraphicsEndImageContext();
+  return image;
 }
 
 /**
@@ -122,8 +123,8 @@
  */
 + (CGFloat)gtx_contrastRatioWithTextElementImage:(UIImage *)original
                     textElementColorShiftedImage:(UIImage *)colorShifted {
-  // Luminace of image is computed using Reinhard’s method:
-  // Luminace of image = Geometric Mean of luminance of individual pixels.
+  // Luminance of image is computed using Reinhard’s method:
+  // Luminance of image = Geometric Mean of luminance of individual pixels.
   CGFloat textLogAverage = 0;
   NSInteger textPixelCount = 0;
   CGFloat backgroundLogAverage = 0;
@@ -136,10 +137,10 @@
   // compute e to the power of the average. Also, since luminances are in the range of 0 to 1 the
   // logarithms will lie in the range negative infinity to 0 which will still cause inaccuracies
   // when we sum them, to avoid this we first offset all luminances by 1.0 and scale them by
-  // e (~2.7182) causing their logarithms to fall in the range of 0 to 1 instead leading to better
-  // accuracy of the geometric mean.
+  // e - 1 (~1.7182) causing their logarithms to fall in the range of 0 to 1 instead leading to
+  // better accuracy of the geometric mean.
   const CGFloat luminanceOffset = 1.0f;
-  const CGFloat luminanceScale = (CGFloat)M_E;
+  const CGFloat luminanceScale = (CGFloat)M_E - luminanceOffset;
   for (NSUInteger column = 0; column < beforeData.width; column++) {
     for (NSUInteger row = 0; row < beforeData.height; row++) {
       unsigned char *beforeOffset =
@@ -157,8 +158,9 @@
       }
 
       CGFloat logLuminance =
-          (CGFloat)log(luminanceOffset +
-                       luminanceScale * [self luminanceWithRed:red blue:blue green:green]);
+          (CGFloat)log(luminanceOffset + luminanceScale * [self luminanceWithRed:red
+                                                                            blue:blue
+                                                                           green:green]);
       if (beforeOffset[0] != afterOffset[0]) {
         // This pixel has changed from before: it is part of the text.
         textLogAverage += logLuminance;
@@ -181,7 +183,7 @@
   if (backgroundPixelCount != 0) {
     backgroundLuminance =
         (CGFloat)(exp(backgroundLogAverage / backgroundPixelCount) - luminanceOffset) /
-                  luminanceScale;
+        luminanceScale;
   }
   return [self contrastRatioWithLuminaceOfFirstColor:textLuminance
                            andLuminanceOfSecondColor:backgroundLuminance];
diff --git a/Classes/GTXToolKit.h b/Classes/GTXToolKit.h
index ac9ea49..84e60cb 100644
--- a/Classes/GTXToolKit.h
+++ b/Classes/GTXToolKit.h
@@ -29,6 +29,25 @@
  */
 @interface GTXToolKit : NSObject
 
+/**
+ Instead if init, use +defaultToolkit, +toolkitWithNoChecks or +toolkitWithAllDefaultChecks.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ @return A new toolkit object a single default check.
+ */
++ (instancetype)defaultToolkit;
+
+/**
+ @return A new empty toolkit object.
+ */
++ (instancetype)toolkitWithNoChecks;
+
+/**
+ @return A new toolkit object with all default checks.
+ */
++ (instancetype)toolkitWithAllDefaultChecks;
 
 /**
  Creates a check.
@@ -39,7 +58,6 @@
  */
 + (id<GTXChecking>)checkWithName:(NSString *)name block:(GTXCheckHandlerBlock)block;
 
-
 /**
  Registers the given check to be executed on all elements this instance is used on.
 
@@ -55,7 +73,6 @@
  */
 - (void)registerBlacklist:(id<GTXBlacklisting>)blacklist;
 
-
 /**
  Applies the registered checks on the given element while respecting blacklisted elements.
 
@@ -65,7 +82,6 @@
  */
 - (BOOL)checkElement:(id)element error:(GTXErrorRefType)errorOrNil;
 
-
 /**
  Applies the registered checks on all elements in the accessibility tree under the given root
  elements while respecting blacklisted elements.
diff --git a/Classes/GTXToolKit.m b/Classes/GTXToolKit.m
index 6857114..26853a3 100644
--- a/Classes/GTXToolKit.m
+++ b/Classes/GTXToolKit.m
@@ -20,8 +20,17 @@
 #import "GTXAnalytics.h"
 #import "GTXBlacklistBlock.h"
 #import "GTXBlacklistFactory.h"
+#import "GTXChecksCollection.h"
 #import "NSError+GTXAdditions.h"
 
+#pragma mark - Extension
+
+@interface GTXToolKit ()
+
+- (instancetype)initDefault NS_DESIGNATED_INITIALIZER;
+
+@end
+
 #pragma mark - Implementation
 
 @implementation GTXToolKit {
@@ -29,7 +38,26 @@
   NSMutableArray<id<GTXBlacklisting>> *_blacklists;
 }
 
-- (instancetype)init {
++ (instancetype)defaultToolkit {
+  GTXToolKit *toolkit = [[GTXToolKit alloc] initDefault];
+  [toolkit registerCheck:GTXChecksCollection.checkForAXLabelPresent];
+  return toolkit;
+}
+
++ (instancetype)toolkitWithNoChecks {
+  GTXToolKit *toolkit = [[GTXToolKit alloc] initDefault];
+  return toolkit;
+}
+
++ (instancetype)toolkitWithAllDefaultChecks {
+  GTXToolKit *toolkit = [[GTXToolKit alloc] initDefault];
+  for (id<GTXChecking> check in GTXChecksCollection.allGTXChecks) {
+    [toolkit registerCheck:check];
+  }
+  return toolkit;
+}
+
+- (instancetype)initDefault {
   self = [super init];
   if (self) {
     _checks = [[NSMutableArray alloc] init];
diff --git a/Classes/GTXiLibCore.m b/Classes/GTXiLibCore.m
index 015b3fa..02e9a10 100644
--- a/Classes/GTXiLibCore.m
+++ b/Classes/GTXiLibCore.m
@@ -200,11 +200,13 @@
   if (gCurrentOptions != currentTestCaseOptions) {
     gCurrentOptions = currentTestCaseOptions;
     if (gCurrentOptions) {
-      gToolkit = [[GTXToolKit alloc] init];
-      NSAssert(gCurrentOptions.checks && gCurrentOptions.checks.count > 0,
-               @"At least one check must be installed!");
-      for (id<GTXChecking> check in gCurrentOptions.checks) {
-        [gToolkit registerCheck:check];
+      if (gCurrentOptions.checks.count > 0) {
+        gToolkit = [GTXToolKit toolkitWithNoChecks];
+        for (id<GTXChecking> check in gCurrentOptions.checks) {
+          [gToolkit registerCheck:check];
+        }
+      } else {
+        gToolkit = [GTXToolKit defaultToolkit];
       }
       for (id<GTXBlacklisting> blacklist in gCurrentOptions.elementBlacklist) {
         [gToolkit registerBlacklist:blacklist];
diff --git a/Tests/UnitTests/GTXAnalyticsTests.m b/Tests/UnitTests/GTXAnalyticsTests.m
index 350be3e..748cabf 100644
--- a/Tests/UnitTests/GTXAnalyticsTests.m
+++ b/Tests/UnitTests/GTXAnalyticsTests.m
@@ -44,7 +44,7 @@
 }
 
 - (void)testCheckElementReportsAnalyticsCorrectly {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   __block NSInteger successEventsCount = 0;
   __block NSInteger failureEventsCount = 0;
   [GTXAnalytics setHandler:^(GTXAnalyticsEvent event) {
@@ -84,7 +84,7 @@
 }
 
 - (void)testCheckElementsFromRootElementsReportsAnalyticsCorrectly {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   __block NSInteger successEventsCount = 0;
   __block NSInteger failureEventsCount = 0;
   [GTXAnalytics setHandler:^(GTXAnalyticsEvent event) {
@@ -128,7 +128,7 @@
 }
 
 - (void)testAnalyticsCanBeDisabled {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   __block NSInteger successEventsCount = 0;
   __block NSInteger failureEventsCount = 0;
   [GTXAnalytics setHandler:^(GTXAnalyticsEvent event) {
diff --git a/Tests/UnitTests/GTXToolKitTests.m b/Tests/UnitTests/GTXToolKitTests.m
index 224f253..619ffb5 100644
--- a/Tests/UnitTests/GTXToolKitTests.m
+++ b/Tests/UnitTests/GTXToolKitTests.m
@@ -45,8 +45,14 @@
 
 @implementation GTXToolKitTests
 
+- (void)testToolkitCreationMethods {
+  XCTAssertNotNil([GTXToolKit defaultToolkit]);
+  XCTAssertNotNil([GTXToolKit toolkitWithNoChecks]);
+  XCTAssertNotNil([GTXToolKit toolkitWithAllDefaultChecks]);
+}
+
 - (void)testRegisterCheckRaisesExceptionForDuplicateCheckNames {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   NSString *checkName = @"foo";
   [toolkit registerCheck:[GTXToolKit checkWithName:checkName block:noOpCheckBlock]];
   XCTAssertThrows([toolkit registerCheck:[GTXToolKit checkWithName:checkName
@@ -54,7 +60,7 @@
 }
 
 - (void)testCheckElementReportsFailures {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   NSObject *failingElement = [self newAccessibleElement];
   NSObject *passingElement = [self newAccessibleElement];
   id<GTXChecking> check = [GTXToolKit checkWithName:@"Foo"
@@ -71,7 +77,7 @@
 }
 
 - (void)testCheckElementsFromRootElementsReportsFailures {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   NSObject *root = [self newInAccessibleElement];
   NSObject *child1 = [self newAccessibleElement];
   NSObject *child2 = [self newInAccessibleElement];
@@ -92,7 +98,7 @@
 }
 
 - (void)testCheckElementsFromRootElementsSkipsHiddenAXElements {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   NSObject *root = [self newAccessibleElement];
   // Since root is an accessibile element its children are hidden.
   NSObject *child1 = [self newAccessibleElement];
@@ -112,7 +118,7 @@
 }
 
 - (void)testBlacklistAPICanSkipElementsFromChecks {
-  GTXToolKit *toolkit = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit = [GTXToolKit toolkitWithNoChecks];
   NSObject *failingElement = [self newAccessibleElement];
   id<GTXChecking> check = [GTXToolKit checkWithName:@"Foo"
                                               block:^BOOL(id _Nonnull element,
@@ -151,7 +157,7 @@
                                                  return element != allChecksFailingElement;
                                                }];
 
-  GTXToolKit *toolkit1 = [[GTXToolKit alloc] init];
+  GTXToolKit *toolkit1 = [GTXToolKit toolkitWithNoChecks];
   [toolkit1 registerCheck:check1];
   [toolkit1 registerCheck:check2];
   XCTAssertFalse([toolkit1 checkElement:check1FailingElement error:nil]);