Написал генератор json сейчас информация только по 0x00000000, 0xFFFFFFFF, 0xAAAAAAAA, 0x55555555 но это божет не работать без -t

This commit is contained in:
romenskiy 2025-06-26 18:20:25 +03:00
parent cd842d8c05
commit bf32765ea9
8 changed files with 3929 additions and 203 deletions

View file

@ -1,89 +1,102 @@
void fill_pattern(uint32_t *buf, size_t words, uint32_t pattern) {
for (size_t i = 0; i < words; i++) {
buf[i] = pattern;
}
}
#pragma once
#include <time.h>
void fill_increment(uint32_t *buf, size_t words) {
for (size_t i = 0; i < words; i++) {
buf[i] = (uint32_t)i;
int one_percent_chance(){
static int initialized = 0;
if (!initialized) {
srand((unsigned int)time(NULL));
initialized = 1;
}
return (rand() % 1000000) == 0;
}
int check_pattern(uint32_t *buf, size_t words, uint32_t pattern) {
int errors = 0;
for (size_t i = 0; i < words; i++) {
if (buf[i] != pattern) {
printf("\nОшибка в тесте %zu: должен быть: 0x%08X, фактический: 0x%08X\n", i, pattern, buf[i]);
errors++;
if (errors > 10) break;
}
}
return errors;
}
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]);
if (meta->test_tip == 1){
for (size_t i = meta->words_start; i < meta->words_stop; i++) {
meta->mem[i] = 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;
if (meta->test_tip == 1){
for (size_t i = meta->words_start; i < meta->words_stop; i++){
if (meta->mem[i] != test_patterns[meta->id]) {
printf("\nОшибка в тесте %zu: должен быть: 0x%08X, фактический: 0x%08X\n", i, test_patterns[meta->id], meta->mem[i]);
meta->return_error++;
if (meta->return_error > 10) break;
}
}
}
else if (meta->test_tip == 2){
for (size_t i = meta->words_start; i < meta->words_stop; i++) {
if (meta->mem[i] != (uint32_t)i) {
printf("Ошибка в тесте %zu: должен быть: 0x%08X, фактический: 0x%08X\n", i, (uint32_t)i, meta->mem[i]);
meta->return_error++;
if (meta->return_error > 10) break;
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;
}
void fill_walking_ones(uint32_t *mem, size_t words) {
for (size_t i = 0; i < words; i++) {
mem[i] = 1U << (i % 32);
}
}
int fill_walking_ones_test(uint32_t *mem, size_t words) {
int errors = 0;
for (size_t i = 0; i < words; i++) {
if (mem[i] != 1U << (i % 32)){
printf("\nПиздец\n");
errors++;
}
}
return errors;
}
void fill_walking_zeros(uint32_t *mem, size_t words) {
for (size_t i = 0; i < words; i++) {
mem[i] = ~(1U << (i % 32));
}
}
int fill_walking_zeros_test(uint32_t *mem, size_t words) {
int errors = 0;
for (size_t i = 0; i < words; i++) {
if (mem[i] != ~(1U << (i % 32))){
printf("\nПиздец\n");
errors++;
}
}
return errors;
}