UNPKG

js-randomness-predictor

Version:

Predict Math.random output in Node, Deno, Bun, Chrome, Firefox, and Safari

47 lines (46 loc) 2.01 kB
import { BitVec, Solver, Context, Z3HighLevel, Z3LowLevel } from "z3-solver-jsrp"; import { RUNTIMES, JAVASCRIPT_ENGINES, SERVER_RUNTIMES, BROWSER_RUNTIMES } from "./constants.js"; /********************************************************************************************************* * INTERFACES *********************************************************************************************************/ export interface Predictor { sequence: number[]; predictNext(): Promise<number>; } export interface CliArgs { environment: Runtime; sequence?: number[]; predictions?: number; export?: string; force?: boolean; } /********************************************************************************************************* * TYPES *********************************************************************************************************/ export type Z3Api = Z3HighLevel & Z3LowLevel; export type Runtime = (typeof RUNTIMES)[number]; export type Engine = (typeof JAVASCRIPT_ENGINES)[number]; export type ServerRuntime = (typeof SERVER_RUNTIMES)[number]; export type BrowserRuntime = (typeof BROWSER_RUNTIMES)[number]; export type Pair<T> = [T, T]; export type SymbolicXorShiftFn = (symbolicState: Pair<BitVec>) => void; export type ConcreteXorShiftFn = (concreteState: Pair<bigint>) => void; export type RecoverMantissaFn = (n: number) => bigint; export type ConstrainMantissaFn = (mantissa: bigint, symbolicState: Pair<BitVec>, solver: Solver, context: Context) => void; export type ToDoubleFn = (concreteState: Pair<bigint>) => number; export type CliResult = { sequence: number[]; predictions: number[]; actual: string | number[]; isCorrect?: boolean; runtime: Runtime; _warnings?: string[]; _info?: string[]; }; export type SolvingStrategy = { recoverMantissa: RecoverMantissaFn; constrainMantissa: ConstrainMantissaFn; toDouble: ToDoubleFn; symbolicXorShift: SymbolicXorShiftFn; concreteXorShift: ConcreteXorShiftFn; };