From 20913920310f4b1f4dbbd088f3a29b00f1592fe7 Mon Sep 17 00:00:00 2001
From: Kevin Jahns <kevin.jahns@rwth-aachen.de>
Date: Wed, 29 Jun 2016 17:48:56 +0200
Subject: [PATCH] implemented random seed generator, in order to reproduce
 tests

---
 package.json      |  5 +++--
 src/SpecHelper.js | 24 ++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 3ab51ee8..1e34870b 100644
--- a/package.json
+++ b/package.json
@@ -42,6 +42,7 @@
   },
   "homepage": "http://y-js.org",
   "devDependencies": {
+    "babel-eslint": "^5.0.0-beta6",
     "babel-plugin-transform-runtime": "^6.1.18",
     "babel-preset-es2015": "^6.1.18",
     "babelify": "^7.2.0",
@@ -69,10 +70,10 @@
     "pre-commit": "^1.1.1",
     "regenerator": "^0.8.42",
     "run-sequence": "^1.1.4",
+    "seedrandom": "^2.4.2",
     "standard": "^5.2.2",
     "vinyl-buffer": "^1.0.0",
-    "vinyl-source-stream": "^1.1.0",
-    "babel-eslint": "^5.0.0-beta6"
+    "vinyl-source-stream": "^1.1.0"
   },
   "dependencies": {}
 }
diff --git a/src/SpecHelper.js b/src/SpecHelper.js
index b1a58b42..b014c9d6 100644
--- a/src/SpecHelper.js
+++ b/src/SpecHelper.js
@@ -23,6 +23,29 @@ if (typeof global !== 'undefined') {
 }
 g.g = g
 
+// Helper methods for the random number generator
+Math.seedrandom = require('seedrandom')
+
+g.generateRandomSeed = function generateRandomSeed() {
+  var seed
+  if (window.location.hash.length > 1) {
+    seed = window.location.hash.slice(1) // first character is the hash!
+    console.warn('Using random seed that was specified in the url!')
+  } else {
+    seed = JSON.stringify(Math.random())
+  }
+  console.info('Using random seed: ' + seed)
+  setRandomSeed(seed)
+
+}
+
+g.setRandomSeed = function setRandomSeed(seed) {
+  Math.seedrandom.currentSeed = seed
+  Math.seedrandom(Math.seedrandom.currentSeed, { global: true })
+}
+
+g.generateRandomSeed()
+
 g.YConcurrency_TestingMode = true
 
 jasmine.DEFAULT_TIMEOUT_INTERVAL = 200000
@@ -86,6 +109,7 @@ function getRandomString () {
 g.getRandomString = getRandomString
 
 function * applyTransactions (relAmount, numberOfTransactions, objects, users, transactions, noReconnect) {
+  g.generateRandomSeed() // create a new seed, so we can re-create the behavior
   for (var i = 0; i < numberOfTransactions * relAmount + 1; i++) {
     var r = Math.random()
     if (r > 0.95) {
-- 
GitLab