Sigrid Solveig Haflínudóttiruse Plan 9 naming of integer types22b11e51 year agoHistory
129 lines · 2.5 KB · C
RawDownload
#include "platform.h"#include "mp.h"#include "dat.h"#include "fns.h" /* these tests suck but better than nothing... but really should test more values than just 1<<i */ #define MPTOX(_name,_type,_func)  \static void \_name(void) \{ \	mpint *m; \	int i, sign, mag; \	_type v, e; \	int fail; \	 \	fail = 0; \	m = mpnew(0); \	for(i = 0; i < 256; i++){ \		sign = i >= 128 ? -1 : 1; \		mag = i % 128; \		itomp(sign, m); \		mpleft(m, mag, m); \		v = _func(m); \		e = 0xcafebabe; USED(e);#define MPTOX_END(_func,_format)  \		if(v != e){ \			fprintf(stderr, "FAIL: "#_func"(%s): return value: got "_format", expected "_format"\n", MFMT(m), v, e); \			fail=1; \		} \	} \	mpfree(m); \	if(!fail) \		fprintf(stderr, #_func": passed\n"); \	anyfail |= fail; \} #define XTOMP(_name,_type,_func)  \static void \_name(void) \{ \	mpint *m, *r; \	int i, sign, mag; \	_type v; \	int fail; \	 \	fail = 0; \	m = mpnew(0); \	r = mpnew(0); \	for(i = 0; i < 256; i++){ \		sign = i >= 128 ? -1 : 1; \		mag = i % 128; \		itomp(sign, r); \		mpleft(r, mag, r); #define XTOMP_END(_func,_type,_format)  \		_func(sign * (_type)(1ULL<<mag), m); \		if(mpcmp(r, m) != 0){ \			fprintf(stderr, "FAIL: "#_func"("_format"): return value: got %s, expected %s\n", sign * ((_type)1<<mag), MFMT(m), MFMT(r)); \			fail=1; \		} \	} \	mpfree(m); \	mpfree(r); \	if(!fail) \		fprintf(stderr, #_func": passed\n"); \	USED(v); \	anyfail |= fail; \} MPTOX(test_mptoi, int, mptoi)	if(mag < 31)		e = sign*(1<<mag);	else		e = sign > 0 ? (1U<<31)-1 : 1U<<31;MPTOX_END(mptoi, "%d") MPTOX(test_mptoui, u32int, mptoui)	if(mag < 32 && sign > 0)		e = 1U<<mag;	else		e = sign > 0 ? -1 : 0;MPTOX_END(mptoui, "%"PRIu32)  MPTOX(test_mptov, s64int, mptov)	if(mag < 63)		e = sign*(1LL<<mag);	else		e = sign > 0 ? (1ULL<<63)-1 : 1ULL<<63;MPTOX_END(mptov, "%"PRId64) MPTOX(test_mptouv, u64int, mptouv)	if(mag < 64 && sign > 0)		e = 1ULL<<mag;	else		e = sign > 0 ? -1ULL : 0;MPTOX_END(mptouv, "%"PRIu64) XTOMP(test_itomp, int, itomp)	if(mag >= 31) continue;XTOMP_END(vtomp, s64int, "%"PRId64) XTOMP(test_uitomp, u32int, uitomp)	if(mag >= 32 || sign < 0) continue;XTOMP_END(uitomp, u32int, "%"PRIu32) XTOMP(test_vtomp, s64int, vtomp)	if(mag >= 63) continue;XTOMP_END(vtomp, s64int, "%"PRId64) XTOMP(test_uvtomp, u64int, uvtomp)	if(mag >= 64 || sign < 0) continue;XTOMP_END(uvtomp, s64int, "%"PRId64)  voidconvtests(void){	test_mptoi();	test_mptoui();	test_mptov();	test_mptouv();	test_itomp();	test_uitomp();	test_vtomp();	test_uvtomp();} 

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t