Commit ccadcbc715

Andrew Kelley <superjoe30@gmail.com>
2018-03-29 18:33:29
fix examples and rename std.rand.Rand to std.rand.Random
1 parent 0fd0f6f
Changed files (4)
example
guess_number
src
std
example/guess_number/main.zig
@@ -2,7 +2,6 @@ const builtin = @import("builtin");
 const std = @import("std");
 const io = std.io;
 const fmt = std.fmt;
-const Rand = std.rand.Rand;
 const os = std.os;
 
 pub fn main() !void {
@@ -14,15 +13,15 @@ pub fn main() !void {
 
     try stdout.print("Welcome to the Guess Number Game in Zig.\n");
 
-    var seed_bytes: [@sizeOf(usize)]u8 = undefined;
+    var seed_bytes: [@sizeOf(u64)]u8 = undefined;
     os.getRandomBytes(seed_bytes[0..]) catch |err| {
         std.debug.warn("unable to seed random number generator: {}", err);
         return err;
     };
-    const seed = std.mem.readInt(seed_bytes, usize, builtin.Endian.Big);
-    var rand = Rand.init(seed);
+    const seed = std.mem.readInt(seed_bytes, u64, builtin.Endian.Big);
+    var prng = std.rand.DefaultPrng.init(seed);
 
-    const answer = rand.range(u8, 0, 100) + 1;
+    const answer = prng.random.range(u8, 0, 100) + 1;
 
     while (true) {
         try stdout.print("\nGuess a number between 1 and 100: ");
src/parser.hpp
@@ -16,7 +16,6 @@ ATTRIBUTE_PRINTF(2, 3)
 void ast_token_error(Token *token, const char *format, ...);
 
 
-// This function is provided by generated code, generated by parsergen.cpp
 AstNode * ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner, ErrColor err_color);
 
 void ast_print(AstNode *node, int indent);
std/rand/index.zig
@@ -26,16 +26,16 @@ pub const DefaultPrng = Xoroshiro128;
 // When you need cryptographically secure random numbers
 pub const DefaultCsprng = Isaac64;
 
-pub const Rand = struct {
-    fillFn: fn(r: &Rand, buf: []u8) void,
+pub const Random = struct {
+    fillFn: fn(r: &Random, buf: []u8) void,
 
     /// Read random bytes into the specified buffer until fill.
-    pub fn bytes(r: &Rand, buf: []u8) void {
+    pub fn bytes(r: &Random, buf: []u8) void {
         r.fillFn(r, buf);
     }
 
     /// Return a random integer/boolean type.
-    pub fn scalar(r: &Rand, comptime T: type) T {
+    pub fn scalar(r: &Random, comptime T: type) T {
         var rand_bytes: [@sizeOf(T)]u8 = undefined;
         r.bytes(rand_bytes[0..]);
 
@@ -49,7 +49,7 @@ pub const Rand = struct {
 
     /// Get a random unsigned integer with even distribution between `start`
     /// inclusive and `end` exclusive.
-    pub fn range(r: &Rand, comptime T: type, start: T, end: T) T {
+    pub fn range(r: &Random, comptime T: type, start: T, end: T) T {
         assert(start <= end);
         if (T.is_signed) {
             const uint = @IntType(false, T.bit_count);
@@ -91,7 +91,7 @@ pub const Rand = struct {
     }
 
     /// Return a floating point value evenly distributed in the range [0, 1).
-    pub fn float(r: &Rand, comptime T: type) T {
+    pub fn float(r: &Random, comptime T: type) T {
         // Generate a uniform value between [1, 2) and scale down to [0, 1).
         // Note: The lowest mantissa bit is always set to 0 so we only use half the available range.
         switch (T) {
@@ -110,18 +110,18 @@ pub const Rand = struct {
     }
 
     /// Return a floating point value normally distributed in the range [0, 1].
-    pub fn floatNorm(r: &Rand, comptime T: type) T {
+    pub fn floatNorm(r: &Random, comptime T: type) T {
         // TODO(tiehuis): See https://www.doornik.com/research/ziggurat.pdf
         @compileError("floatNorm is unimplemented");
     }
 
     /// Return a exponentially distributed float between (0, @maxValue(f64))
-    pub fn floatExp(r: &Rand, comptime T: type) T {
+    pub fn floatExp(r: &Random, comptime T: type) T {
         @compileError("floatExp is unimplemented");
     }
 
     /// Shuffle a slice into a random order.
-    pub fn shuffle(r: &Rand, comptime T: type, buf: []T) void {
+    pub fn shuffle(r: &Random, comptime T: type, buf: []T) void {
         if (buf.len < 2) {
             return;
         }
@@ -178,14 +178,14 @@ test "splitmix64 sequence" {
 pub const Pcg = struct {
     const default_multiplier = 6364136223846793005;
 
-    random: Rand,
+    random: Random,
 
     s: u64,
     i: u64,
 
     pub fn init(init_s: u64) Pcg {
         var pcg = Pcg {
-            .random = Rand { .fillFn = fill },
+            .random = Random { .fillFn = fill },
             .s = undefined,
             .i = undefined,
         };
@@ -218,7 +218,7 @@ pub const Pcg = struct {
         self.s = self.s *% default_multiplier +% self.i;
     }
 
-    fn fill(r: &Rand, buf: []u8) void {
+    fn fill(r: &Random, buf: []u8) void {
         const self = @fieldParentPtr(Pcg, "random", r);
 
         var i: usize = 0;
@@ -269,13 +269,13 @@ test "pcg sequence" {
 //
 // PRNG
 pub const Xoroshiro128 = struct {
-    random: Rand,
+    random: Random,
 
     s: [2]u64,
 
     pub fn init(init_s: u64) Xoroshiro128 {
         var x = Xoroshiro128 {
-            .random = Rand { .fillFn = fill },
+            .random = Random { .fillFn = fill },
             .s = undefined,
         };
 
@@ -328,7 +328,7 @@ pub const Xoroshiro128 = struct {
         self.s[1] = gen.next();
     }
 
-    fn fill(r: &Rand, buf: []u8) void {
+    fn fill(r: &Random, buf: []u8) void {
         const self = @fieldParentPtr(Xoroshiro128, "random", r);
 
         var i: usize = 0;
@@ -397,7 +397,7 @@ test "xoroshiro sequence" {
 // Follows the general idea of the implementation from here with a few shortcuts.
 // https://doc.rust-lang.org/rand/src/rand/prng/isaac64.rs.html
 pub const Isaac64 = struct {
-    random: Rand,
+    random: Random,
 
     r: [256]u64,
     m: [256]u64,
@@ -408,7 +408,7 @@ pub const Isaac64 = struct {
 
     pub fn init(init_s: u64) Isaac64 {
         var isaac = Isaac64 {
-            .random = Rand { .fillFn = fill },
+            .random = Random { .fillFn = fill },
             .r = undefined,
             .m = undefined,
             .a = undefined,
@@ -522,7 +522,7 @@ pub const Isaac64 = struct {
         self.i = self.r.len;    // trigger refill on first value
     }
 
-    fn fill(r: &Rand, buf: []u8) void {
+    fn fill(r: &Random, buf: []u8) void {
         const self = @fieldParentPtr(Isaac64, "random", r);
 
         var i: usize = 0;
@@ -577,8 +577,8 @@ test "isaac64 sequence" {
     }
 }
 
-// Actual Rand helper function tests, pcg engine is assumed correct.
-test "Rand float" {
+// Actual Random helper function tests, pcg engine is assumed correct.
+test "Random float" {
     var prng = DefaultPrng.init(0);
 
     var i: usize = 0;
@@ -593,18 +593,18 @@ test "Rand float" {
     }
 }
 
-test "Rand scalar" {
+test "Random scalar" {
     var prng = DefaultPrng.init(0);
     const s = prng .random.scalar(u64);
 }
 
-test "Rand bytes" {
+test "Random bytes" {
     var prng = DefaultPrng.init(0);
     var buf: [2048]u8 = undefined;
     prng.random.bytes(buf[0..]);
 }
 
-test "Rand shuffle" {
+test "Random shuffle" {
     var prng = DefaultPrng.init(0);
 
     var seq = []const u8 { 0, 1, 2, 3, 4 };
@@ -629,14 +629,14 @@ fn sumArray(s: []const u8) u32 {
     return r;
 }
 
-test "Rand range" {
+test "Random range" {
     var prng = DefaultPrng.init(0);
     testRange(&prng.random, -4, 3);
     testRange(&prng.random, -4, -1);
     testRange(&prng.random, 10, 14);
 }
 
-fn testRange(r: &Rand, start: i32, end: i32) void {
+fn testRange(r: &Random, start: i32, end: i32) void {
     const count = usize(end - start);
     var values_buffer = []bool{false} ** 20;
     const values = values_buffer[0..count];
std/sort.zig
@@ -1091,7 +1091,7 @@ test "sort fuzz testing" {
 
 var fixed_buffer_mem: [100 * 1024]u8 = undefined;
 
-fn fuzzTest(rng: &std.rand.Rand) void {
+fn fuzzTest(rng: &std.rand.Random) void {
     const array_size = rng.range(usize, 0, 1000);
     var fixed_allocator = std.heap.FixedBufferAllocator.init(fixed_buffer_mem[0..]);
     var array = fixed_allocator.allocator.alloc(IdAndValue, array_size) catch unreachable;