// Textbook stage-07 migration: check optional state before reading its value.
// Stage 07: independent expected values, always-on checks, and strict input parsing.
#include <charconv>
#include <cstddef>
#include <iostream>
#include <optional>
#include <span>
#include <string_view>
#include <vector>
struct Summary {std::size_t count;long long total;};
Summary summarize(std::span<const int> values) {
    Summary result{values.size(),0};
    for(const int value:values) result.total+=value;
    return result;
}
std::optional<int> parse_reading(std::string_view text) {
    if(text.empty()) return std::nullopt;
    int value=0;
    const auto [end,error]=std::from_chars(text.data(),text.data()+text.size(),value);
    if(error!=std::errc{} || end!=text.data()+text.size() || value < -1000000 || value > 1000000)
        return std::nullopt;
    return value;
}
int main() {
    const std::vector<std::vector<int>> cases{{3,1,4,1,5},{},{5},{-3,1},{0,0}};
    const std::vector<long long> expected{14,0,5,-2,0};
    for(std::size_t i=0;i<cases.size();++i) {
        const auto actual=summarize(cases[i]);
        if(actual.total!=expected[i] || actual.count!=cases[i].size()) return 1;
    }
    const auto three = parse_reading("3");
    const auto lower = parse_reading("-1000000");
    if(!three || *three!=3 || !lower || *lower!=-1000000 ||
       parse_reading("3x") || parse_reading("") || parse_reading("1000001")) return 2;
    const std::vector<int> left{3,1},right{4,1,5};
    if(summarize(left).total+summarize(right).total!=14) return 3;
    std::cout<<"batch_cases="<<cases.size()<<" parsing_checks=5 split_total=14\n";
}
