#!/usr/bin/ruby

# Translation of M.E. O'Neill's C code:
#   https://www.pcg-random.org/download.html

struct PCG32 {
    Number state,
    Number inc,
}

func pcg32(rng) {
    var oldstate = rng.state
    rng.state = (oldstate * 6364136223846793005 + (rng.inc | 1))
    var xorshifted = (((oldstate >> 18) ^ oldstate) >> 27)
    var rot = (oldstate >> 59)
    (xorshifted >> (rot & 31)) | (xorshifted << ((-rot) & 31))
}

var rng = PCG32(42, 3)
say 10.of { pcg32(rng) }