crabc 0.7.8

A Rust musl-compatible libc with a dynamic linker
/* Copyright (c) 2026 Meng Zhuo */
/* SPDX-License-Identifier: BSD-3-Clause */

#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdio.h>
#include "string.h"

int main(void) {
    int fail = 0;

    if (strverscmp("", "") != 0) { puts("fail: empty==empty"); fail++; }
    if (strverscmp("a", "a") != 0) { puts("fail: a==a"); fail++; }

    if (strverscmp("a", "b") >= 0) { puts("fail: a<b"); fail++; }
    if (strverscmp("b", "a") <= 0) { puts("fail: b>a"); fail++; }

    if (strverscmp("000", "00") >= 0) { puts("fail: 000<00"); fail++; }
    if (strverscmp("00", "000") <= 0) { puts("fail: 00>000"); fail++; }

    if (strverscmp("9", "10") >= 0) { puts("fail: 9<10"); fail++; }
    if (strverscmp("1.2", "1.10") >= 0) { puts("fail: 1.2<1.10"); fail++; }
    if (strverscmp("a1b2", "a1b10") >= 0) { puts("fail: a1b2<a1b10"); fail++; }

    if (strverscmp("01", "010") >= 0) { puts("fail: 01<010"); fail++; }
    if (strverscmp("010", "09") >= 0) { puts("fail: 010<09"); fail++; }
    if (strverscmp("09", "0") >= 0) { puts("fail: 09<0"); fail++; }

    if (strverscmp("00", "01") >= 0) { puts("fail: 00<01"); fail++; }
    if (strverscmp("a0", "a") <= 0) { puts("fail: a0>a"); fail++; }
    if (strverscmp("0a", "0") <= 0) { puts("fail: 0a>0"); fail++; }

    if (strverscmp("foobar-1.1.2", "foobar-1.1.3") >= 0) { puts("fail: 1.1.2<1.1.3"); fail++; }
    if (strverscmp("foobar-1.1.2", "foobar-1.01.3") <= 0) { puts("fail: 1.1.2>1.01.3"); fail++; }

    if (strverscmp("foo", "foo~") >= 0) { puts("fail: foo<foo~"); fail++; }
    if (strverscmp("foo~", "foo") <= 0) { puts("fail: foo~<foo"); fail++; }

    if (fail == 0) {
        puts("strverscmp ok");
    }
    return fail;
}