#import "BaseNSLogging.h"
#import "PerformanceTesting.h"

#define DDLogVerbose NSLog
#define DDLogInfo    NSLog
#define DDLogWarn    NSLog
#define DDLogError   NSLog

#define FILENAME @"BaseNSLogging " // Trailing space to match exactly the others in length


@implementation BaseNSLogging

+ (void)speedTest0
{
	// Log statements that will not be executed due to log level
	
	for (NSUInteger i = 0; i < SPEED_TEST_0_COUNT; i++)
	{
		DDLogVerbose(@"%@: SpeedTest0 - %lu", FILENAME, (unsigned long)i);
	}
}

+ (void)speedTest1
{
	// Log statements that will be executed asynchronously
	
	for (NSUInteger i = 0; i < SPEED_TEST_1_COUNT; i++)
	{
		DDLogWarn(@"%@: SpeedTest1 - %lu", FILENAME, (unsigned long)i);
	}
}

+ (void)speedTest2
{
	// Log statements that will be executed synchronously
	
	for (NSUInteger i = 0; i < SPEED_TEST_2_COUNT; i++)
	{
		DDLogError(@"%@: SpeedTest2 - %lu", FILENAME, (unsigned long)i);
	}
}

+ (void)speedTest3
{
	// Even Spread:
	// 
	// 25% - Not executed due to log level
	// 50% - Executed asynchronously
	// 25% - Executed synchronously
	
	for (NSUInteger i = 0; i < SPEED_TEST_3_COUNT; i++)
	{
		DDLogError(@"%@: SpeedTest3A - %lu", FILENAME, (unsigned long)i);
	}
	for (NSUInteger i = 0; i < SPEED_TEST_3_COUNT; i++)
	{
		DDLogWarn(@"%@: SpeedTest3B - %lu", FILENAME, (unsigned long)i);
	}
	for (NSUInteger i = 0; i < SPEED_TEST_3_COUNT; i++)
	{
		DDLogInfo(@"%@: SpeedTest3C - %lu", FILENAME, (unsigned long)i);
	}
	for (NSUInteger i = 0; i < SPEED_TEST_3_COUNT; i++)
	{
		DDLogVerbose(@"%@: SpeedTest3D - %lu", FILENAME, (unsigned long)i);
	}
}

+ (void)speedTest4
{
	// Custom Spread
	
	for (NSUInteger i = 0; i < SPEED_TEST_4_ERROR_COUNT; i++)
	{
		DDLogError(@"%@: SpeedTest4A - %lu", FILENAME, (unsigned long)i);
	}
	for (NSUInteger i = 0; i < SPEED_TEST_4_WARN_COUNT; i++)
	{
		DDLogWarn(@"%@: SpeedTest4B - %lu", FILENAME, (unsigned long)i);
	}
	for (NSUInteger i = 0; i < SPEED_TEST_4_INFO_COUNT; i++)
	{
		DDLogInfo(@"%@: SpeedTest4C - %lu", FILENAME, (unsigned long)i);
	}
	for (NSUInteger i = 0; i < SPEED_TEST_4_VERBOSE_COUNT; i++)
	{
		DDLogVerbose(@"%@: SpeedTest4D - %lu", FILENAME, (unsigned long)i);
	}
}

@end
