--- /dev/null
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <yac/err.h>
+#include <yac/items.h>
+
+#include "../lib/mmap.h"
+
+int
+main(int argc, char **argv)
+{
+ assert(argc == 2);
+ size_t len = 0;
+ unsigned char *buf = NULL;
+ if (!Mmap(&buf, &len, argv[1])) {
+ exit(EXIT_FAILURE);
+ }
+ struct YACItems items;
+ enum YACErr err = YACItemsInit(&items);
+ if (err != YACErrNo) {
+ return EXIT_FAILURE;
+ }
+ size_t off = 0;
+ err = YACItemsParse(&items, &off, buf, len);
+ if (err != YACErrNo) {
+ return EXIT_SUCCESS;
+ }
+ {
+ const size_t tailLen = len - off;
+ unsigned char *dst = malloc(len);
+ assert(dst != NULL);
+ off = 0;
+ assert(YACItemsEncode(&items, 0, &off, dst, len));
+ assert(off == len - tailLen);
+ assert(memcmp(dst, buf, len - tailLen) == 0);
+ }
+ return EXIT_SUCCESS;
+}
--- /dev/null
+deps=../lib/mmap.o
+redo-ifchange $1.c $deps \
+ ../../conf/cc ../../conf/cflags ../../conf/ldflags ../../conf/prefix
+read CC <../../conf/cc
+CFLAGS=$(cat ../../conf/cflags)
+LDFLAGS=$(cat ../../conf/ldflags)
+read PREFIX <../../conf/prefix
+$CC $CFLAGS -I$PREFIX/include -o $3 $2.c $deps $LDFLAGS -L$PREFIX/lib -lyac -lm -static