void diff_event()

in EventProcessorTests.cpp [84:235]


void diff_event(int idx, const Event& e, const Event& a) {
    std::stringstream msg;
    if (e.Seconds() != a.Seconds()) {
        msg << "Event["<<idx<<"] Seconds Mismatch: expected " << e.Seconds() << ", got " << a.Seconds();
        throw std::runtime_error(msg.str());
    }
    if (e.Milliseconds() != a.Milliseconds()) {
        msg << "Event["<<idx<<"] Milliseconds Mismatch: expected " << e.Milliseconds() << ", got " << a.Milliseconds();
        throw std::runtime_error(msg.str());
    }
    if (e.Serial() != a.Serial()) {
        msg << "Event["<<idx<<"] Serial Mismatch: expected " << e.Serial() << ", got " << a.Serial();
        throw std::runtime_error(msg.str());
    }
    if (e.Flags() != a.Flags()) {
        msg << "Event["<<idx<<"] Flags Mismatch: expected " << e.Flags() << ", got " << a.Flags();
        throw std::runtime_error(msg.str());
    }
    if (e.Pid() != a.Pid()) {
        msg << "Event["<<idx<<"] Pid Mismatch: expected " << e.Pid() << ", got " << a.Pid();
        throw std::runtime_error(msg.str());
    }

    if (e.NumRecords() != a.NumRecords()) {
        msg << "Event["<<idx<<"] NumRecords Mismatch: expected " << e.NumRecords() << ", got " << a.NumRecords();
        throw std::runtime_error(msg.str());
    }

    for (int r = 0; r < e.NumRecords(); ++r) {
        auto er = e.RecordAt(r);
        auto ar = a.RecordAt(r);

        if (er.RecordType() != ar.RecordType()) {
            msg << "Event["<<idx<<"].Record[" << r << "] RecordType Mismatch: expected " << er.RecordType() << ", got " << ar.RecordType();
            throw std::runtime_error(msg.str());
        }

        if (er.RecordTypeNamePtr() == nullptr || ar.RecordTypeNamePtr() == nullptr) {
            if (er.RecordTypeNamePtr() != ar.RecordTypeNamePtr()) {
                msg << "Event["<<idx<<"].Record[" << r << "] RecordTypeName Mismatch: expected "
                    << (er.RecordTypeNamePtr() == nullptr ? "null" : er.RecordTypeName())
                    << ", got "
                    << (ar.RecordTypeNamePtr() == nullptr ? "null" : ar.RecordTypeName());
                throw std::runtime_error(msg.str());
            }
        } else {
            if (strcmp(er.RecordTypeNamePtr(), ar.RecordTypeNamePtr()) != 0) {
                msg << "Event["<<idx<<"].Record[" << r << "] RecordTypeName Mismatch: expected " << er.RecordTypeNamePtr() << ", got " << ar.RecordTypeNamePtr();
                throw std::runtime_error(msg.str());
            }
        }

        if (er.RecordTextPtr() == nullptr || ar.RecordTextPtr() == nullptr) {
            if (er.RecordTextPtr() != ar.RecordTextPtr()) {
                msg << "Event["<<idx<<"].Record[" << r << "] RecordText Mismatch: expected "
                    << (er.RecordTextPtr() == nullptr ? "null" : er.RecordTextPtr())
                    << ", got "
                    << (ar.RecordTextPtr() == nullptr ? "null" : ar.RecordTextPtr());
                throw std::runtime_error(msg.str());
            }
        } else {
            if (strcmp(er.RecordTextPtr(), ar.RecordTextPtr()) != 0) {
                msg << "Event["<<idx<<"].Record[" << r << "] RecordText Mismatch: expected " << er.RecordTextPtr() << ", got " << ar.RecordTextPtr();
                throw std::runtime_error(msg.str());
            }
        }

        if (er.NumFields() != ar.NumFields()) {
            msg << "Event["<<idx<<"].Record[" << r << "] NumFields Mismatch: expected " << er.NumFields() << ", got " << ar.NumFields() << "\n";

            std::unordered_set<std::string> _en;
            std::unordered_set<std::string> _an;

            for (auto f : er) {
                _en.emplace(f.FieldNamePtr(), f.FieldNameSize());
            }

            for (auto f : ar) {
                _an.emplace(f.FieldNamePtr(), f.FieldNameSize());
            }

            for (auto name : _en) {
                if (_an.count(name) == 0) {
                    msg << "    Expected Field Name Not Found: " << name << "\n";
                }
            }

            for (auto name : _an) {
                if (_en.count(name) == 0) {
                    msg << "    Unxpected Field Name Found: " << name << "\n";
                }
            }

            throw std::runtime_error(msg.str());
        }

        for (int f = 0; f < er.NumFields(); ++f) {
            auto ef = er.FieldAt(f);
            auto af = ar.FieldAt(f);

            if (ef.FieldNamePtr() == nullptr || af.FieldNamePtr() == nullptr) {
                if (ef.FieldNamePtr() != af.FieldNamePtr()) {
                    msg << "Event["<<idx<<"].Record[" << r << "].Field[" << f << "] FieldName Mismatch: expected "
                        << (ef.FieldNamePtr() == nullptr ? "null" : ef.FieldNamePtr())
                        << ", got "
                        << (af.FieldNamePtr() == nullptr ? "null" : af.FieldNamePtr());
                    throw std::runtime_error(msg.str());
                }
            } else {
                if (strcmp(ef.FieldNamePtr(), af.FieldNamePtr()) != 0) {
                    msg << "Event["<<idx<<"].Record[" << r << "].Field[" << f << "] FieldName Mismatch: expected " << ef.FieldNamePtr() << ", got " << af.FieldNamePtr();
                    throw std::runtime_error(msg.str());
                }
            }

            if (ef.RawValuePtr() == nullptr || af.RawValuePtr() == nullptr) {
                if (ef.RawValuePtr() != af.RawValuePtr()) {
                    msg << "Event["<<idx<<"].Record[" << r << "].Field[" << f << "] RawValue Mismatch: expected "
                        << (ef.RawValuePtr() == nullptr ? "null" : ef.RawValuePtr())
                        << ", got "
                        << (af.RawValuePtr() == nullptr ? "null" : af.RawValuePtr());
                    throw std::runtime_error(msg.str());
                }
            } else {
                if (strcmp(ef.RawValuePtr(), af.RawValuePtr()) != 0) {
                    msg << "Event["<<idx<<"].Record[" << r << "].Field[" << f << "] RawValue Mismatch: expected " << ef.RawValuePtr() << ", got " << af.RawValuePtr();
                    throw std::runtime_error(msg.str());
                }
            }

            if (ef.InterpValuePtr() == nullptr || af.InterpValuePtr() == nullptr) {
                if (ef.InterpValuePtr() != af.InterpValuePtr()) {
                    msg << "Event["<<idx<<"].Record[" << r << "].Field[" << f << "] (Name="<<ef.FieldName()<<") InterpValue Mismatch: expected "
                        << (ef.InterpValuePtr() == nullptr ? "null" : ef.InterpValuePtr())
                        << ", got "
                        << (af.InterpValuePtr() == nullptr ? "null" : af.InterpValuePtr());
                    throw std::runtime_error(msg.str());
                }
            } else {
                if (strcmp(ef.InterpValuePtr(), af.InterpValuePtr()) != 0) {
                    msg << "Event["<<idx<<"].Record[" << r << "].Field[" << f << "] (Name="<<ef.FieldName()<<") InterpValue Mismatch: expected " << ef.InterpValuePtr() << ", got " << af.InterpValuePtr();
                    throw std::runtime_error(msg.str());
                }
            }

            if (ef.FieldType() != af.FieldType()) {
                msg << "Event["<<idx<<"].Record[" << r << "].Field[" << f << "] (Name="<<ef.FieldName()<<") FieldType Mismatch: expected " << static_cast<uint>(ef.FieldType()) << ", got " << static_cast<uint>(af.FieldType());
                throw std::runtime_error(msg.str());
            }
        }
    }
}