#pragma once #include int one_percent_chance(){ static int initialized = 0; if (!initialized) { srand((unsigned int)time(NULL)); initialized = 1; } return (rand() % 1000000) == 0; } void error_simulet(size_t i, struct tred_pizdec* meta){ if (args.simulate_errors && i % 1000 == 0 && one_percent_chance()) { meta->mem[i] = 45345345; } } void* fill_pattern_multi_tred(void *arg) { struct tred_pizdec* meta = (struct tred_pizdec*) arg; DEBUG_PRINT("id: 0x%08X\n", test_patterns[meta->id]); switch (meta->test_tip){ case 1: for (size_t i = meta->words_start; i < meta->words_stop; i++){ meta->mem[i] = test_patterns[meta->id]; error_simulet(i, meta); } break; case 2: for (size_t i = meta->words_start; i < meta->words_stop; i++){ meta->mem[i] = (uint32_t)i; error_simulet(i, meta); } break; case 3: for (size_t i = meta->words_start; i < meta->words_stop; i++){ meta->mem[i] = 1U << (i % 32); error_simulet(i, meta); } break; case 4: for (size_t i = meta->words_start; i < meta->words_stop; i++){ meta->mem[i] = ~(1U << (i % 32)); error_simulet(i, meta); } break; } return NULL; } void error_write_info(size_t i, struct tred_pizdec* meta, uint32_t expected){ int id = meta->id; if (meta->test_tip != 1){ id = 2 + meta->test_tip; } if (args.json){ struct error_info* error_str = malloc(sizeof(struct error_info)); error_str->expected = expected; error_str->actual = meta->mem[i]; if (!meta->test_stats->test_local_stats[id]->error_int){ meta->test_stats->test_local_stats[id]->error_info = error_str; } else meta->test_stats->test_local_stats[id]->error_info_end->error_info_next = error_str; meta->test_stats->test_local_stats[id]->error_info_end = error_str; } else{ if (meta->test_tip == 1) printf("\nОшибка в тесте 0x%08X: должен быть: 0x%08X, фактический: 0x%08X\n", test_patterns[id], expected, meta->mem[i]); else printf("\nОшибка в тесте %s: должен быть: 0x%08X, фактический: 0x%08X\n", test_name[meta->test_tip-2], expected, meta->mem[i]); } meta->test_stats->test_local_stats[id]->error_int++; } void* check_pattern_multi_tred(void *arg) { struct tred_pizdec* meta = (struct tred_pizdec*) arg; //meta->return_error = 0; switch (meta->test_tip){ case 1: for (size_t i = meta->words_start; i < meta->words_stop; i++){ if (meta->mem[i] != test_patterns[meta->id]){ error_write_info(i, meta, test_patterns[meta->id]); meta->return_error++; //if (meta->return_error > 10) break; } } break; case 2: for (size_t i = meta->words_start; i < meta->words_stop; i++) { if (meta->mem[i] != (uint32_t)i) { error_write_info(i, meta, (uint32_t)i); meta->return_error++; //if (meta->return_error > 10) break; } //printf("Адрес памяти: %p\n", (void*)meta->mem[i]); } break; case 3: for (size_t i = meta->words_start; i < meta->words_stop; i++) { if (meta->mem[i] != 1U << (i % 32)){ error_write_info(i, meta, 1U << (i % 32)); meta->return_error++; //if (meta->return_error > 10) break; } } break; case 4: for (size_t i = meta->words_start; i < meta->words_stop; i++) { //printf("\rTEST: 0x%08X ", ~(1U << (i % 32))); if (meta->mem[i] != ~(1U << (i % 32))){ DEBUG_PRINT("\n\nTEST: %p \n", (void*)&meta->mem[i]); DEBUG_PRINT("TEST: 0x%08X \n", meta->mem[i]); DEBUG_PRINT("TEST: 0x%08X \n\n", ~(1U << (i % 32))); error_write_info(i, meta, ~(1U << (i % 32))); meta->return_error++; //if (meta->return_error > 10) break; } } break; } return NULL; }