# pyboard testing functions for CPython
import time


def delay(n):
    # time.sleep(float(n) / 1000)
    pass


rand_seed = 1


def rng():
    global rand_seed
    # for these choice of numbers, see P L'Ecuyer, "Tables of linear congruential generators of different sizes and good lattice structure"
    rand_seed = (rand_seed * 653276) % 8388593
    return rand_seed


# LCD testing object for PC
# uses double buffering
class LCD:
    def __init__(self, port):
        self.width = 128
        self.height = 32
        self.buf1 = [[0 for x in range(self.width)] for y in range(self.height)]
        self.buf2 = [[0 for x in range(self.width)] for y in range(self.height)]

    def light(self, value):
        pass

    def fill(self, value):
        for y in range(self.height):
            for x in range(self.width):
                self.buf1[y][x] = self.buf2[y][x] = value

    def show(self):
        print("")  # blank line to separate frames
        for y in range(self.height):
            for x in range(self.width):
                self.buf1[y][x] = self.buf2[y][x]
        for y in range(self.height):
            row = "".join(["*" if self.buf1[y][x] else " " for x in range(self.width)])
            print(row)

    def get(self, x, y):
        if 0 <= x < self.width and 0 <= y < self.height:
            return self.buf1[y][x]
        else:
            return 0

    def pixel(self, x, y, value):
        if 0 <= x < self.width and 0 <= y < self.height:
            self.buf2[y][x] = value
