File: amalgamation_demo.c

package info (click to toggle)
simdutf 8.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,524 kB
  • sloc: cpp: 64,498; ansic: 15,347; python: 3,592; sh: 366; makefile: 12
file content (59 lines) | stat: -rw-r--r-- 1,577 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "simdutf_c.h"

int main(void) {
  printf("SIMDUTF C API demo\n");
  const char *source = "1234";
  /* validate UTF-8 */
  if (!simdutf_validate_utf8(source, 4)) {
    puts("invalid UTF-8");
    return EXIT_FAILURE;
  }
  puts("valid UTF-8");

  /* Convert UTF-8 -> UTF-16LE */
  size_t expected_utf16 = simdutf_utf16_length_from_utf8(source, 4);
  char16_t *utf16_output =
      (char16_t *)malloc(expected_utf16 * sizeof(char16_t));
  if (!utf16_output)
    return EXIT_FAILURE;
  size_t utf16words = simdutf_convert_utf8_to_utf16le(source, 4, utf16_output);
  printf("wrote %zu UTF-16LE words.\n", utf16words);

  if (!simdutf_validate_utf16le(utf16_output, utf16words)) {
    puts("invalid UTF-16LE");
    free(utf16_output);
    return EXIT_FAILURE;
  }
  puts("valid UTF-16LE");

  /* Convert back UTF-16LE -> UTF-8 */
  size_t expected_utf8 =
      simdutf_utf8_length_from_utf16le(utf16_output, utf16words);
  char *utf8_output = (char *)malloc(expected_utf8 + 1);
  if (!utf8_output) {
    free(utf16_output);
    return EXIT_FAILURE;
  }
  size_t utf8words =
      simdutf_convert_utf16le_to_utf8(utf16_output, utf16words, utf8_output);
  utf8_output[utf8words] = '\0';
  printf("wrote %zu UTF-8 words.\n", utf8words);
  puts(utf8_output);

  if (strcmp(utf8_output, source) != 0) {
    puts("bad conversion");
    free(utf16_output);
    free(utf8_output);
    return EXIT_FAILURE;
  } else {
    puts("perfect round trip");
  }

  free(utf16_output);
  free(utf8_output);
  return EXIT_SUCCESS;
}