utf8proc

A clean C library for processing UTF-8 Unicode data
git clone https://git.sinitax.com/juliastrings/utf8proc
Log | Files | Refs | README | LICENSE | sfeed.txt

unistring.c (1250B)


      1/* comparative benchmark of GNU libunistring */
      2
      3#include <stdio.h>
      4#include <stdlib.h>
      5#include <string.h>
      6
      7/* libunistring */
      8#include <unistr.h>
      9#include <uninorm.h>
     10
     11#include "util.h"
     12
     13int main(int argc, char **argv)
     14{
     15	 int i;
     16	 uninorm_t nf = UNINORM_NFKC;
     17
     18	 for (i = 1; i < argc; ++i) {
     19		  if (!strcmp(argv[i], "-nfkc")) {
     20			   nf = UNINORM_NFKC;
     21			   continue;
     22		  }
     23		  if (!strcmp(argv[i], "-nfkd")) {
     24			   nf = UNINORM_NFKD;
     25			   continue;
     26		  }
     27		  if (!strcmp(argv[i], "-nfc")) {
     28			   nf = UNINORM_NFC;
     29			   continue;
     30		  }
     31		  if (!strcmp(argv[i], "-nfd")) {
     32			   nf = UNINORM_NFD;
     33			   continue;
     34		  }
     35		  if (argv[i][0] == '-') {
     36			   fprintf(stderr, "unrecognized option: %s\n", argv[i]);
     37			   return EXIT_FAILURE;
     38		  }
     39
     40		  size_t len;
     41		  uint8_t *src = readfile(argv[i], &len);
     42		  if (!src) {
     43			   fprintf(stderr, "error reading %s\n", argv[i]);
     44			   return EXIT_FAILURE;
     45		  }
     46
     47		  size_t destlen;
     48		  uint8_t *dest;
     49		  mytime start = gettime();
     50		  for (int i = 0; i < 100; ++i) {
     51			   dest = u8_normalize(nf, src, len, NULL, &destlen);
     52			   if (!dest) return EXIT_FAILURE;
     53			   free(dest);
     54		  }
     55		  printf("%s: %g\n", argv[i], elapsed(gettime(), start) / 100);
     56		  free(src);
     57	 }
     58
     59	 return EXIT_SUCCESS;
     60}