Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <time.h>
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct slist {
- int val;
- struct slist *next;
- } slist_t;
- typedef struct {
- const char *name;
- clock_t build;
- clock_t iterate;
- int result;
- } result_t;
- result_t array(int count)
- {
- clock_t start = clock();
- int *arr = malloc(count * sizeof(int));
- for (int i = 0; i < count; i++)
- arr[i] = 1;
- clock_t build = clock();
- int sum = 0;
- for (int i = 0; i < count; i++)
- sum += arr[i];
- clock_t done = clock();
- free(arr);
- return (result_t){"array", build - start, done - build, sum};
- }
- result_t slist(int count)
- {
- clock_t start = clock();
- slist_t *list = NULL;
- for (int i = 0; i < count; i++)
- {
- slist_t *new = malloc(sizeof(slist_t));
- new->val = 1;
- new->next = list;
- list = new;
- }
- clock_t build = clock();
- int sum = 0;
- slist_t *l = list;
- while (l)
- {
- sum += l->val;
- l = l->next;
- }
- clock_t done = clock();
- l = list;
- while (l)
- {
- slist_t *next = l->next;
- free(l);
- l = next;
- }
- return (result_t){"list", build - start, done - build, sum};
- }
- void runTest(int num, int count, result_t (*test)(int))
- {
- result_t master = {0, 0, 0, 0};
- for (int i = 0; i < num; i++)
- {
- result_t result = test(count);
- master.name = result.name;
- master.build += result.build;
- master.iterate += result.iterate;
- master.result += result.result;
- }
- printf ("%10s build %2.8lf iterate %2.8lf result %d\n",
- master.name,
- master.build / (double) CLOCKS_PER_SEC,
- master.iterate / (double) CLOCKS_PER_SEC,
- master.result);
- }
- int main()
- {
- result_t (*tests[2])(int) = {array, slist};
- for (int i = 0; i < 2; i++)
- runTest(10, 100000000, tests[i]);
- return 1;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement