Merge branch 'u2_10_12_branch' of git://git.code.sf.net/p/undernet-ircu/ircu2
[ircu2.10.12-pk.git] / ircd / test / ircd_chattr_t.c
diff --git a/ircd/test/ircd_chattr_t.c b/ircd/test/ircd_chattr_t.c
new file mode 100644 (file)
index 0000000..04051e2
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * 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;
+}
+