16
Exploratory Tests

Thread base theory test

Embed Size (px)

DESCRIPTION

Automated Exploratory Multithreaded Race Condition Testing with theory testing api from approvaltests

Citation preview

Page 1: Thread base theory test

Exploratory Tests

Page 2: Thread base theory test
Page 3: Thread base theory test

? ✓=

Page 4: Thread base theory test

many threads = 1 thread

at a time

Page 5: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 6: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 7: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 8: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 9: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 10: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 11: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 12: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 13: Thread base theory test

[TestMethod]public void ExplorePossibleRaceCondition(){

var random = new Random();

Func<int[]> inputGenerator = () => new int[] { random.Next(1000),

random.Next(1000), random.Next(1000) };

Func<int[], string> toString = n => string.Format("{0} + {1} + {2} = ", n[0],

n[1], n[2]);

var stateCalulator = new StateCalulator();Func<int[], object> raceConditionsFunction =

s=> stateCalulator.Sum(s[0],s[1],s[2]);Func<int[], object> knownGoodFunction =

f => new StateCalulator().Sum(f[0],f[1],f[2]);

ThreadSafetyTheory.VerifyNoRaceConditions(10000, inputGenerator, toString, raceConditionsFunction, knownGoodFunction);

}

Page 14: Thread base theory test

= ErlangHashmap

Page 15: Thread base theory test

= ErlangSimulati on

Page 16: Thread base theory test

ApprovalTests