PIOTimeRangeComparison pioCompareTimeRanges( PIOTimeRange tr1, PIOTimeRange tr2) { int compareStart = compare_int64_t(tr1.time * tr2.scale, tr2.time * tr1.scale); int compareStop = compare_int64_t((tr1.time+tr1.duration) * tr2.scale, (tr2.time+tr2.duration) * tr1.scale); switch (compareStart) { // tr1 begins before tr2 case -1: return PINOCCHIO_TIMERANGE_COMPARISON_ASCENDING; break; case 0: switch (compareStop) { // tr1 stops before tr2 case -1: return PINOCCHIO_TIMERANGE_COMPARISON_ASCENDING; break; case 0: return PINOCCHIO_TIMERANGE_COMPARISON_SAME; break; case 1: return PINOCCHIO_TIMERANGE_COMPARISON_DESCENDING; break; } break; // tr2 begins before tr1 case 1: return PINOCCHIO_TIMERANGE_COMPARISON_DESCENDING; break; } return 0; }
static char* log_reader_aggregates_into_single_histogram() { const char* file_name = "histogram.log"; struct timespec timestamp; struct timespec interval; hdr_gettime(×tamp); interval.tv_sec = 5; interval.tv_nsec = 2000000; struct hdr_log_writer writer; struct hdr_log_reader reader; hdr_log_writer_init(&writer); hdr_log_reader_init(&reader); int rc = 0; FILE* log_file = fopen(file_name, "w+"); hdr_log_write_header(&writer, log_file, "Test log", ×tamp); hdr_log_write(&writer, log_file, ×tamp, &interval, cor_histogram); hdr_log_write(&writer, log_file, ×tamp, &interval, raw_histogram); fflush(log_file); fclose(log_file); log_file = fopen(file_name, "r"); struct hdr_histogram* histogram; hdr_alloc(3600L * 1000 * 1000, 3, &histogram); rc = hdr_log_read_header(&reader, log_file); mu_assert("Failed header read", validate_return_code(rc)); rc = hdr_log_read(&reader, log_file, &histogram, NULL, NULL); mu_assert("Failed corrected read", validate_return_code(rc)); rc = hdr_log_read(&reader, log_file, &histogram, NULL, NULL); mu_assert("Failed raw read", validate_return_code(rc)); struct hdr_recorded_iter iter; hdr_recorded_iter_init(&iter, histogram); int64_t expected_total_count = raw_histogram->total_count + cor_histogram->total_count; mu_assert( "Total counts incorrect", compare_int64_t(histogram->total_count, expected_total_count)); while (hdr_recorded_iter_next(&iter)) { int64_t count = iter.iter.count_at_index; int64_t value = iter.iter.value_from_index; int64_t expected_count = hdr_count_at_value(raw_histogram, value) + hdr_count_at_value(cor_histogram, value); mu_assert("Incorrect count", compare_int64_t(count, expected_count)); } fclose(log_file); remove(file_name); free(histogram); return 0; }