ircu2/ircd/test/ircd_chattr_t.c

161 lines
2.7 KiB
C

/*
* ircd_chattr_t.c - Test file for character attributes
*/
#include "ircd_chattr.h"
/* #include <assert.h> -- not used here */
#include <stdio.h>
typedef int (*EvalFn)(char);
int eval_alnum(char c)
{
return (0 != IsAlnum(c));
}
int eval_alpha(char c)
{
return (0 != IsAlpha(c));
}
int eval_digit(char c)
{
return (0 != IsDigit(c));
}
int eval_lower(char c)
{
return (0 != IsLower(c));
}
int eval_space(char c)
{
return (0 != IsSpace(c));
}
int eval_upper(char c)
{
return (0 != IsUpper(c));
}
int eval_cntrl(char c)
{
return (0 != IsCntrl(c));
}
int eval_channel_char(char c)
{
return (0 != IsChannelChar(c));
}
int eval_channel_lower(char c)
{
return (0 != IsChannelLower(c));
}
int eval_channel_prefix(char c)
{
return (0 != IsChannelPrefix(c));
}
int eval_nick_char(char c)
{
return (0 != IsNickChar(c));
}
int eval_user_char(char c)
{
return (0 != IsUserChar(c));
}
int eval_host_char(char c)
{
return (0 != IsHostChar(c));
}
int eval_ip_char(char c)
{
return (0 != IsIPChar(c));
}
int eval_eol(char c)
{
return (0 != IsEol(c));
}
int eval_ktime_char(char c)
{
return (0 != IsKTimeChar(c));
}
struct CharTest {
const char* name;
EvalFn evaluator;
} testList[] = {
{ "IsAlnum: ", eval_alnum },
{ "IsAlpha: ", eval_alpha },
{ "IsDigit: ", eval_digit },
{ "IsLower: ", eval_lower },
{ "IsSpace: ", eval_space },
{ "IsUpper: ", eval_upper },
{ "IsCntrl: ", eval_cntrl },
{ "IsChannelChar: ", eval_channel_char },
{ "IsChannelLower: ", eval_channel_lower },
{ "IsChannelPrefix: ", eval_channel_prefix },
{ "IsNickChar: ", eval_nick_char },
{ "IsUserChar: ", eval_user_char },
{ "IsHostChar: ", eval_host_char },
{ "IsIPChar: ", eval_ip_char },
{ "IsEol: ", eval_eol },
{ "IsKTimeChar: ", eval_ktime_char }
};
#define TESTLIST_SIZE sizeof(testList) / sizeof(struct CharTest)
void print_char(unsigned char c)
{
if (c < 0x20) {
switch (c) {
case '\a': printf("\\a"); break;
case '\b': printf("\\b"); break;
case '\f': printf("\\f"); break;
case '\n': printf("\\n"); break;
case '\r': printf("\\r"); break;
case '\t': printf("\\t"); break;
case '\v': printf("\\v"); break;
default:
printf("\\%x", c); break;
}
}
else if (c < 0x7F) {
printf("%c", c);
}
else {
printf("\\%x", c);
}
}
void print_char_attr(struct CharTest* test)
{
int i;
printf("%s", test->name);
for (i = 0; i < 256; ++i) {
if ((*test->evaluator)(i))
print_char(i);
}
printf("\n");
}
int main(void)
{
int i;
for (i = 0; i < TESTLIST_SIZE; ++i)
print_char_attr(&testList[i]);
return 0;
}