cc_library(
    name = "asl",
    hdrs = [
        "allocator.hpp",
        "annotations.hpp",
        "assert.hpp",
        "atomic.hpp",
        "box.hpp",
        "buffer.hpp",
        "config.hpp",
        "float.hpp",
        "format.hpp",
        "functional.hpp",
        "hash.hpp",
        "hash_map.hpp",
        "hash_set.hpp",
        "integers.hpp",
        "io.hpp",
        "layout.hpp",
        "maybe_uninit.hpp",
        "memory.hpp",
        "meta.hpp",
        "option.hpp",
        "print.hpp",
        "span.hpp",
        "status.hpp",
        "status_or.hpp",
        "string.hpp",
        "string_builder.hpp",
        "string_view.hpp",
        "utility.hpp",
    ],
    srcs = [
        "allocator.cpp",
        "assert.cpp",
        "format.cpp",
        "format_float.cpp",
        "hash_cityhash.cpp",
        "print.cpp",
        "status.cpp",
    ],
    deps = [
        "//vendor/dragonbox",
    ],
    visibility = ["//visibility:public"],
)

[cc_test(
    name = "%s_tests" % name,
    srcs = [
        "tests/%s_tests.cpp" % name,
        "tests/test_types.hpp",
    ],
    deps = [
        ":asl",
        "//asl/testing",
    ],
) for name in [
    "box",
    "buffer",
    "float",
    "format",
    "functional",
    "hash",
    "hash_map",
    "hash_set",
    "integers",
    "maybe_uninit",
    "meta",
    "option",
    "span",
    "status",
    "status_or",
    "string",
    "string_builder",
    "string_view",
    "utility",
]]