#define SAFETENSORS_CPP_IMPLEMENTATION #include #include #include #include #include #include #include "safetensors.hh" int main(int argc, char **argv) { if (argc != 2) { return 2; } std::ifstream f(argv[1], std::ios::binary); std::string contents((std::istreambuf_iterator(f)), std::istreambuf_iterator()); if (contents.empty()) { return 2; } uint8_t *buf = static_cast(std::malloc(contents.size())); if (!buf) { return 2; } std::memcpy(buf, contents.data(), contents.size()); safetensors::safetensors_t st; std::string warn; std::string err; bool ok = safetensors::mmap_from_memory(buf, contents.size(), argv[1], &st, &warn, &err); std::cerr << "mmap_from_memory=" << ok << " err=" << err << "\n"; if (!ok) { return 1; } err.clear(); bool valid = safetensors::validate_data_offsets(st, err); std::cerr << "validate_data_offsets=" << valid << " err=" << err << "\n"; safetensors::tensor_t a; safetensors::tensor_t b; if (!st.tensors.at("a", &a) || !st.tensors.at("b", &b)) { return 1; } const uint8_t *base = st.databuffer_addr; std::cerr << "databuffer_size=" << st.databuffer_size << "\n"; std::cerr << "a=[" << a.data_offsets[0] << "," << a.data_offsets[1] << "] bytes=" << char(base[a.data_offsets[0]]) << char(base[a.data_offsets[1] - 1]) << "\n"; std::cerr << "b=[" << b.data_offsets[0] << "," << b.data_offsets[1] << "] byte=" << char(base[b.data_offsets[0]]) << "\n"; std::cerr << "alias=" << (base + b.data_offsets[0] == base + a.data_offsets[1] - 1) << "\n"; std::free(buf); return valid ? 0 : 1; }