102 lines
4 KiB
C
102 lines
4 KiB
C
#pragma once
|
||
#include <time.h>
|
||
|
||
int one_percent_chance(){
|
||
static int initialized = 0;
|
||
if (!initialized) {
|
||
srand((unsigned int)time(NULL));
|
||
initialized = 1;
|
||
}
|
||
return (rand() % 1000000) == 0;
|
||
}
|
||
int a =1;
|
||
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++){
|
||
if (a && i % 1000 == 0 && one_percent_chance()) {
|
||
meta->mem[i] = 45345345;
|
||
}
|
||
else
|
||
meta->mem[i] = test_patterns[meta->id];
|
||
|
||
}
|
||
break;
|
||
case 2:
|
||
for (size_t i = meta->words_start; i < meta->words_stop; i++)
|
||
meta->mem[i] = (uint32_t)i;
|
||
break;
|
||
case 3:
|
||
for (size_t i = meta->words_start; i < meta->words_stop; i++)
|
||
meta->mem[i] = 1U << (i % 32);
|
||
break;
|
||
case 4:
|
||
for (size_t i = meta->words_start; i < meta->words_stop; i++)
|
||
meta->mem[i] = ~(1U << (i % 32));
|
||
break;
|
||
}
|
||
return NULL;
|
||
}
|
||
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]) {
|
||
if (args.json){
|
||
struct error_info* error_str = malloc(sizeof(struct error_info));
|
||
error_str->expected = test_patterns[meta->id];
|
||
error_str->actual = meta->mem[i];
|
||
error_str->error_adres = meta->mem[i];
|
||
if (!meta->test_stats->test_local_stats[meta->id]->error_int){
|
||
if (meta->test_stats->test_local_stats[meta->id] != NULL){
|
||
|
||
}
|
||
meta->test_stats->test_local_stats[meta->id]->error_info = error_str;
|
||
}
|
||
else
|
||
meta->test_stats->test_local_stats[meta->id]->error_info_end->error_info_next = error_str;
|
||
meta->test_stats->test_local_stats[meta->id]->error_info_end = error_str;
|
||
}
|
||
else{
|
||
printf("\nОшибка в тесте %zu: должен быть: 0x%08X, фактический: 0x%08X\n", i, test_patterns[meta->id], meta->mem[i]);
|
||
}
|
||
meta->test_stats->test_local_stats[meta->id]->error_int++;
|
||
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) {
|
||
printf("\nОшибка в тесте %zu: должен быть: 0x%08X, фактический: 0x%08X\n", i, (uint32_t)i, meta->mem[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)){
|
||
printf("\nПиздец_3\n");
|
||
meta->return_error++;
|
||
}
|
||
}
|
||
break;
|
||
case 4:
|
||
for (size_t i = meta->words_start; i < meta->words_stop; i++) {
|
||
if (meta->mem[i] != ~(1U << (i % 32))){
|
||
printf("\nПиздец_4\n");
|
||
meta->return_error++;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
|