memtest/test_logik.c

58 lines
1.5 KiB
C

#pragma once
void fill_pattern(uint32_t *buf, size_t words, uint32_t pattern) {
for (unsigned int i = 0; i < words; i++) {
buf[i] = pattern;
}
}
void fill_increment(uint32_t *buf, size_t words) {
for (unsigned int i = 0; i < words; i++) {
buf[i] = (uint32_t)i;
}
}
int check_pattern(uint32_t *buf, size_t words, uint32_t pattern) {
int errors = 0;
for (unsigned int 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;
}
void fill_walking_ones(uint32_t *mem, size_t words) {
for (unsigned int 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 (unsigned int 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 (unsigned int 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 (unsigned int i = 0; i < words; i++) {
if (mem[i] != ~(1U << (i % 32))){
printf("\nПиздец\n");
errors++;
}
}
return errors;
}