aboutsummaryrefslogtreecommitdiff
path: root/src/c/test.c
blob: 0122dc3067c884305f7eaeedf43406eff7376b3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <ctype.h>
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <zlib.h>

#include "quikr.h"
#include "quikr_functions.h"


static int failed = 0;

void status(int test, int pass, char *testname) {
	fprintf(stdout, "test %d in %s ", test, testname);

	if(pass)
		fprintf(stdout, "passed.\n");
	else {
		fprintf(stdout, "failed. \n");
		failed = 1;
	}
}

#define test_eq(data, value) status(test_number, (data == value), test_name); test_number++; 
#define test_n_eq(data, value) status(test_number, (data != value), test_name); test_number++; 
#define test_gt(data, value) status(test_number, (data < value), test_name); test_number++; 
#define test_lt(data, value) status(test_number, (data > value), test_name); test_number++; 

#define header(test_name) printf("testing %s:\n", test_name);
#define footer() printf("\n\n");;

void test_count_sequences() {

	int test_number = 1;
	char *test_name = "test_count_sequences";

	// test 1
	// Make sure we can count this properly
	int t_count_sequences_res = count_sequences("tests/data/test.fa");
	test_eq(t_count_sequences_res, 17414);

	// test 2
	// Should be zero, since the file is empty
	t_count_sequences_res = count_sequences("tests/data/empty.fa");
	test_eq(t_count_sequences_res, 0);

	// test 3
	// Doesn't exist, count should be zero
	t_count_sequences_res = count_sequences("non-existant-file");
	test_eq(t_count_sequences_res, 0);

}


void test_normalize_matrix() {

	int test_number = 1;
	int fail_flag = 0;
	char *test_name = "test_normailze_matrix";

	double sum = 0;
	int i = 0;
	int j = 0;

	double matrix_1[4] = {1,1,1,1};
	double matrix_2[8] = {2,2,4,4,8,8,16,16};


	// test 1
	// our matrix to sum to 1 properly even with only one row 
	normalize_matrix(matrix_1, 1, 4);
	for(i = 0; i < 4; i++) 
		sum += matrix_1[i];

	test_eq(sum, 1);

	// test 2
	// each element in the array should be .25
	for(i = 0; i < 4; i++)
		if(matrix_1[i] != 0.25)
			fail_flag = 1;

	test_eq(fail_flag, 0);

	fail_flag = 0;
	sum = 0;
	// test 3
	//  make sure a multidimensional array sums each row properly
	normalize_matrix(matrix_2, 2, 4);
	for(j = 0; j < 2; j++) {
		double row_sum = 0;

		for(i = 0; i < 4; i++) 
			row_sum += matrix_2[j*2 + i];	
		
		// floating point hack
		if(fabsl(row_sum - 1.0) > .0001)
			fail_flag = 1;
	}

	test_eq(fail_flag, (double)0);
		
}

int main() {

	header("count_sequences");
	test_count_sequences();
	footer();

	header("normalize_matrix");
	test_normalize_matrix();
	footer();

	if(failed)
		return EXIT_FAILURE;
	else
		return EXIT_SUCCESS;
};