summaryrefslogtreecommitdiff
path: root/test/test_random.cc
blob: d546410c36b8a8816b8cfa8bb7aa8c6019571282 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Copyright (C) 2026 Richard Qin */

#include <lume/selftest.h>
#include <lume/random.h>
#include <lume/kprintf.h>

void selftest_random()
{
    /* Test 1: Basic 64-bit generation */
    kprintf("[test] random: basic 64-bit generation ... ");
    uint64 v1 = get_random_u64();
    uint64 v2 = get_random_u64();
    if (v1 == v2) {
        kernel_panic("random: two consecutive generations were identical!");
    }
    kprintf("PASS\n");

    /* Test 2: Basic 32-bit generation */
    kprintf("[test] random: basic 32-bit generation ... ");
    uint32 v3 = get_random_u32();
    uint32 v4 = get_random_u32();
    if (v3 == v4) {
        kernel_panic("random: two consecutive 32-bit generations were identical!");
    }
    kprintf("PASS\n");

    /* Test 3: Byte generation */
    kprintf("[test] random: byte generation ... ");
    uint8 buf1[16];
    uint8 buf2[16];
    get_random_bytes(buf1, sizeof(buf1));
    get_random_bytes(buf2, sizeof(buf2));
    
    bool all_zero1 = true;
    bool all_zero2 = true;
    bool same = true;

    for (int i = 0; i < 16; i++) {
        if (buf1[i] != 0) all_zero1 = false;
        if (buf2[i] != 0) all_zero2 = false;
        if (buf1[i] != buf2[i]) same = false;
    }

    if (all_zero1 || all_zero2 || same) {
        kernel_panic("random: byte generation statistical failure!");
    }
    kprintf("PASS\n");
}