from stdint import * import t, c import stdio import vrandom import testcheck # ============================================================ # VRandomTest - 硬件随机数生成 + 标准分布函数测试 # ============================================================ def main() -> t.CInt: testcheck.begin("VRandomTest: Hardware RNG + Distributions") # --- Test 1: RDRAND basic --- testcheck.section("Test 1: RDRAND basic") r32: t.CUInt32T = vrandom.rdrand32() r64: t.CUInt64T = vrandom.rdrand64() stdio.printf(" rdrand32() = 0x%08x\n", r32) stdio.printf(" rdrand64() = 0x%016llx\n", r64) testcheck.ok("RDRAND basic") # --- Test 2: randint --- testcheck.section("Test 2: randint(1, 100)") for _ in range(5): v: t.CInt = vrandom.randint(1, 100) stdio.printf(" randint(1,100) = %d\n", v) testcheck.ok("randint range check") # --- Test 3: randrange --- testcheck.section("Test 3: randrange(0, 100, 5)") for _ in range(5): v = vrandom.randrange(0, 100, 5) stdio.printf(" randrange(0,100,5) = %d\n", v) testcheck.ok("randrange step check") # --- Test 4: getrandbits --- testcheck.section("Test 4: getrandbits(8)") for _ in range(3): b: t.CUInt64T = vrandom.getrandbits(8) stdio.printf(" getrandbits(8) = 0x%02llx\n", b) testcheck.ok("getrandbits width check") # --- Test 5: random() [0,1) --- testcheck.section("Test 5: random()") for _ in range(3): f: t.CDouble = vrandom.random() stdio.printf(" random() = %f\n", f) testcheck.ok("random() in [0,1)") # --- Test 6: uniform --- testcheck.section("Test 6: uniform(10.0, 20.0)") for _ in range(3): f = vrandom.uniform(10.0, 20.0) stdio.printf(" uniform(10,20) = %f\n", f) testcheck.ok("uniform range check") # --- Test 7: gauss --- testcheck.section("Test 7: gauss(0.0, 1.0)") for _ in range(3): f = vrandom.gauss(0.0, 1.0) stdio.printf(" gauss(0,1) = %f\n", f) testcheck.ok("gauss distribution") # --- Test 8: normalvariate --- testcheck.section("Test 8: normalvariate(100.0, 15.0)") for _ in range(3): f = vrandom.normalvariate(100.0, 15.0) stdio.printf(" normalvariate(100,15) = %f\n", f) testcheck.ok("normalvariate distribution") # --- Test 9: expovariate --- testcheck.section("Test 9: expovariate(0.5)") for _ in range(3): f = vrandom.expovariate(0.5) stdio.printf(" expovariate(0.5) = %f\n", f) testcheck.ok("expovariate distribution") # --- Test 10: gammavariate --- testcheck.section("Test 10: gammavariate(2.0, 1.0)") for _ in range(3): f = vrandom.gammavariate(2.0, 1.0) stdio.printf(" gammavariate(2,1) = %f\n", f) testcheck.ok("gammavariate distribution") # --- Test 11: betavariate --- testcheck.section("Test 11: betavariate(2.0, 5.0)") for _ in range(3): f = vrandom.betavariate(2.0, 5.0) stdio.printf(" betavariate(2,5) = %f\n", f) testcheck.ok("betavariate distribution") # --- Test 12: triangular --- testcheck.section("Test 12: triangular(0.0, 10.0, 5.0)") for _ in range(3): f = vrandom.triangular(0.0, 10.0, 5.0) stdio.printf(" triangular(0,10,5) = %f\n", f) testcheck.ok("triangular distribution") # --- Test 13: lognormvariate --- testcheck.section("Test 13: lognormvariate(0.0, 1.0)") for _ in range(3): f = vrandom.lognormvariate(0.0, 1.0) stdio.printf(" lognormvariate(0,1) = %f\n", f) testcheck.ok("lognormvariate distribution") # --- Test 14: paretovariate --- testcheck.section("Test 14: paretovariate(1.0)") for _ in range(3): f = vrandom.paretovariate(1.0) stdio.printf(" paretovariate(1) = %f\n", f) testcheck.ok("paretovariate distribution") # --- Test 15: weibullvariate --- testcheck.section("Test 15: weibullvariate(1.0, 1.5)") for _ in range(3): f = vrandom.weibullvariate(1.0, 1.5) stdio.printf(" weibullvariate(1,1.5) = %f\n", f) testcheck.ok("weibullvariate distribution") # --- Test 16: vonmisesvariate --- testcheck.section("Test 16: vonmisesvariate(0.0, 1.0)") for _ in range(3): f = vrandom.vonmisesvariate(0.0, 1.0) stdio.printf(" vonmisesvariate(0,1) = %f\n", f) testcheck.ok("vonmisesvariate distribution") return testcheck.end()