Beispiel #1
0
int main(int argc, char *argv[]) {
	const char *outfile = NULL;
	FILE *out;
	const struct symbol *sym_table;
	const unsigned long *cov_bitmap;
	int opt, i, sym_n;

	getopt_init();
	while (-1 != (opt = getopt(argc, argv, "o:h"))) {
		switch (opt) {
		case 'h':
			printf("Usage: %s [-h] [-o output_file]\n", argv[0]);
			return 0;
		case 'o':
			outfile = optarg;
		default:
			break;
		}
	}

	if (outfile) {
		out = fopen(outfile, "w");
		if (!out) {
			perror("fopen");
			return -errno;
		}
	} else {
		out = stdout;
	}


	sym_n = coverage_getstat(&sym_table, &cov_bitmap);
	if (sym_n <= 0) {
		if (outfile)
			fclose(out);
		return sym_n;
	}

	fprintf(out, "%32s\t%8s\n", "FUNCTION", "EXECUTED");
	for (i = 0; i < sym_n; i++) {

		fprintf(out, "%21s@0x%08lx\t%8s\n", sym_table[i].name,
				(unsigned long) sym_table[i].addr,
				bitmap_test_bit(cov_bitmap, i) ? "true" : "false");
	}

	if (outfile)
		fclose(out);

	return 0;
}
Beispiel #2
0
bool eratosthenes_isprime(const struct eratosthenes *s, unsigned long n)
{
	assert(n < s->limit);

	if ((n % 2) == 0)
		return (n == 2);

	if (n < 3) {
		assert(n == 1);
		return false;
	}

	return bitmap_test_bit(s->b, VAL_TO_BIT(n));
}
Beispiel #3
0
static void test_size(int nbits)
{
	BITMAP_DECLARE(bitmap, nbits);
	uint32_t marker = 0xdeadbeef;
	int i, j, k;
	bool wrong;

	for (i = 0; i < nbits; i++) {
		for (j = i; j <= nbits; j++) {
			bitmap_zero(bitmap, nbits);
			bitmap_fill_range(bitmap, i, j);

			wrong = false;
			for (k = 0; k < nbits; k++) {
				bool inrange = (k >= i) && (k < j);
				wrong = wrong || (bitmap_test_bit(bitmap, k) != inrange);
			}
			ok1(!wrong);
		}
	}

	for (i = 0; i < nbits; i++) {
		for (j = i; j <= nbits; j++) {
			bitmap_fill(bitmap, nbits);
			bitmap_zero_range(bitmap, i, j);

			wrong = false;
			for (k = 0; k < nbits; k++) {
				bool inrange = (k >= i) && (k < j);
				wrong = wrong || (bitmap_test_bit(bitmap, k) == inrange);
			}
			ok1(!wrong);
		}
	}

	ok1(marker == 0xdeadbeef);
}
Beispiel #4
0
void
tests(void)
{
#ifndef USING_WOLFSSL
	struct bitmap *b;
	BIGNUM *bn;
	size_t len;
	int i, j, k, n;
	u_char bbuf[1024], bnbuf[1024];
	int r;
#else
	struct bitmap *b;
	BIGNUM *bn;
#endif

	TEST_START("bitmap_new");
	b = bitmap_new();
	ASSERT_PTR_NE(b, NULL);
	bn = BN_new();
	ASSERT_PTR_NE(bn, NULL);
	TEST_DONE();

	TEST_START("bitmap_set_bit / bitmap_test_bit");
#ifndef USING_WOLFSSL
	for (i = -1; i < NTESTS; i++) {
		for (j = -1; j < NTESTS; j++) {
			for (k = -1; k < NTESTS; k++) {
				bitmap_zero(b);
	/* wolfSSL does not have support for BN_clear at this time */
				BN_clear(bn);
				test_subtest_info("set %d/%d/%d", i, j, k);
				/* Set bits */
				if (i >= 0) {
					ASSERT_INT_EQ(bitmap_set_bit(b, i), 0);
					ASSERT_INT_EQ(BN_set_bit(bn, i), 1);
				}
				if (j >= 0) {
					ASSERT_INT_EQ(bitmap_set_bit(b, j), 0);
					ASSERT_INT_EQ(BN_set_bit(bn, j), 1);
				}
				if (k >= 0) {
					ASSERT_INT_EQ(bitmap_set_bit(b, k), 0);
					ASSERT_INT_EQ(BN_set_bit(bn, k), 1);
				}

				/* Check perfect match between bitmap and bn */
				test_subtest_info("match %d/%d/%d", i, j, k);
				for (n = 0; n < NTESTS; n++) {
					ASSERT_INT_EQ(BN_is_bit_set(bn, n),
					    bitmap_test_bit(b, n));
				}

				/* Test length calculations */
				test_subtest_info("length %d/%d/%d", i, j, k);
				ASSERT_INT_EQ(BN_num_bits(bn),
				    (int)bitmap_nbits(b));
				ASSERT_INT_EQ(BN_num_bytes(bn),
				    (int)bitmap_nbytes(b));

				/* Test serialisation */
				test_subtest_info("serialise %d/%d/%d",
				    i, j, k);
				len = bitmap_nbytes(b);
				memset(bbuf, 0xfc, sizeof(bbuf));
				ASSERT_INT_EQ(bitmap_to_string(b, bbuf,
				    sizeof(bbuf)), 0);
				for (n = len; n < (int)sizeof(bbuf); n++)
					ASSERT_U8_EQ(bbuf[n], 0xfc);
				r = BN_bn2bin(bn, bnbuf);
				ASSERT_INT_GE(r, 0);
				ASSERT_INT_EQ(r, (int)len);
				ASSERT_MEM_EQ(bbuf, bnbuf, len);

				/* Test deserialisation */
				test_subtest_info("deserialise %d/%d/%d",
				    i, j, k);
				bitmap_zero(b);
				ASSERT_INT_EQ(bitmap_from_string(b, bnbuf,
				    len), 0);
				for (n = 0; n < NTESTS; n++) {
					ASSERT_INT_EQ(BN_is_bit_set(bn, n),
					    bitmap_test_bit(b, n));
				}

				/* Test clearing bits */
				test_subtest_info("clear %d/%d/%d",
				    i, j, k);
				for (n = 0; n < NTESTS; n++) {
					ASSERT_INT_EQ(bitmap_set_bit(b, n), 0);
					ASSERT_INT_EQ(BN_set_bit(bn, n), 1);
				}
				if (i >= 0) {
					bitmap_clear_bit(b, i);
	/* wolfSSL does not have support for BN_clear_bit at this time */
					BN_clear_bit(bn, i);
				}
				if (j >= 0) {
					bitmap_clear_bit(b, j);
	/* wolfSSL does not have support for BN_clear_bit at this time */
					BN_clear_bit(bn, j);
				}
				if (k >= 0) {
					bitmap_clear_bit(b, k);
	/* wolfSSL does not have support for BN_clear_bit at this time */
					BN_clear_bit(bn, k);
				}
				for (n = 0; n < NTESTS; n++) {
					ASSERT_INT_EQ(BN_is_bit_set(bn, n),
					    bitmap_test_bit(b, n));
				}
			}
		}
	}
#endif /* USING_WOLFSSL */
	bitmap_free(b);
	BN_free(bn);
	TEST_DONE();
}