// Original CPU teaching model; not a device simulator or benchmark.
#include <iostream>
#include <vector>
#include <numeric>
#include <stdexcept>

void require(bool ok) { if (!ok) throw std::runtime_error("model check failed"); }

int main() {
 const std::vector<int> x{1,2,3};
 auto y=x;for(int& v:y) v+=10;
 const int old_sum=std::accumulate(x.begin(),x.end(),0);
 auto overwritten=x;for(int& v:overwritten) v+=10;
 const int bad_old_sum=std::accumulate(overwritten.begin(),overwritten.end(),0);
 require(old_sum==6 && bad_old_sum==36 && y==overwritten);
 std::cout<<"old_sum="<<old_sum<<" overwritten_sum="<<bad_old_sum<<'\n';
}

