Skip to content

Instantly share code, notes, and snippets.

@stollcri
Created June 6, 2014 15:11
Show Gist options
  • Save stollcri/0325c0e1c11b3a8a3158 to your computer and use it in GitHub Desktop.
Save stollcri/0325c0e1c11b3a8a3158 to your computer and use it in GitHub Desktop.
Minimum Functions for 3 Integers in C
#include <stdio.h>
#include <limits.h>
#include <sys/time.h>
#define TEST_ITTERATIONS 100
#define TEST_LOOPS 100000
static inline int min3a(int a, int b, int c)
{
if (a < b) {
if (a < c) {
return a;
} else {
return c;
}
} else {
if (b < c) {
return b;
} else {
return c;
}
}
}
static inline int min3b(int a, int b, int c)
{
int result = a;
if (b < result) {
result = b;
}
if (c < result) {
return c;
}
return result;
}
static void testA()
{
int result = 0;
for (int i = 0; i < TEST_LOOPS; ++i) {
result = 0;
result += min3a(1, 2, 3);
result += min3a(1, 3, 2);
result += min3a(2, 1, 3);
result += min3a(2, 3, 1);
result += min3a(3, 1, 2);
result += min3a(3, 2, 1);
if (result != 6) {
printf("Bad min (method A, group 1, loop %d)\n", i);
}
result = 0;
result = min3a(INT_MAX-2, INT_MAX-1, INT_MAX);
result = min3a(INT_MAX-2, INT_MAX, INT_MAX-1);
result = min3a(INT_MAX-1, INT_MAX-2, INT_MAX);
result = min3a(INT_MAX-1, INT_MAX, INT_MAX-2);
result = min3a(INT_MAX, INT_MAX-2, INT_MAX-1);
result = min3a(INT_MAX, INT_MAX-1, INT_MAX-2);
if (result != INT_MAX-2) {
printf("Bad min (method A, group 2, loop %d)\n", i);
}
}
}
static void testB()
{
int result = 0;
for (int i = 0; i < TEST_LOOPS; ++i) {
result = 0;
result += min3b(1, 2, 3);
result += min3b(1, 3, 2);
result += min3b(2, 1, 3);
result += min3b(2, 3, 1);
result += min3b(3, 1, 2);
result += min3b(3, 2, 1);
if (result != 6) {
printf("Bad min (method B, group 1, loop %d)\n", i);
}
result = 0;
result = min3b(INT_MAX-2, INT_MAX-1, INT_MAX);
result = min3b(INT_MAX-2, INT_MAX, INT_MAX-1);
result = min3b(INT_MAX-1, INT_MAX-2, INT_MAX);
result = min3b(INT_MAX-1, INT_MAX, INT_MAX-2);
result = min3b(INT_MAX, INT_MAX-2, INT_MAX-1);
result = min3b(INT_MAX, INT_MAX-1, INT_MAX-2);
if (result != INT_MAX-2) {
printf("Bad min (method B, group 2, loop %d)\n", i);
}
}
}
int main(int argc, char const *argv[])
{
struct timeval stop, start;
int totalTime = 0;
for (int i = 0; i < TEST_ITTERATIONS; ++i) {
gettimeofday(&start, NULL);
testA();
gettimeofday(&stop, NULL);
totalTime += (stop.tv_usec - start.tv_usec);
printf("Method A: %u us \n", stop.tv_usec - start.tv_usec);
}
printf("A Avg: %u us \n", (totalTime / TEST_ITTERATIONS));
totalTime = 0;
for (int i = 0; i < TEST_ITTERATIONS; ++i) {
gettimeofday(&start, NULL);
testB();
gettimeofday(&stop, NULL);
totalTime += (stop.tv_usec - start.tv_usec);
printf("Method B: %u us \n", stop.tv_usec - start.tv_usec);
}
printf("B Avg: %u us \n", (totalTime / TEST_ITTERATIONS));
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment