Trait('TextBenchmarkHelperTrait', {
addAndRandomlyStyleNWords: function(n, index) {
var start = index !== undefined ? index : this.textString.length,
intervals = this.addNWords(n, start),
styledIntervals = intervals.collect(function(interval) {
return interval.concat({color: Color.random()});
});
this.emphasizeRanges(styledIntervals);
// styledIntervals.forEach(function(ea) {
// this.emphasize(ea[2], ea[0], ea[1]);
// }, this);
},
addNWords: function(n, index) {
var words = this.world().nRandomWords(n),
at = index !== undefined ? index : this.textString.length,
isAtEnd = at === this.textString.length,
isAtStart = at === 0,
insertString = ' ' + words.join(' ');
this.insertTextStringAt(at, insertString);
var intervals = [];
words.inject(at, function(index, word) {
intervals.push([index, index + word.length + 1]);
return intervals.last()[1];
});
return intervals;
},
setNWords: function(n) {
this.textString = '';
this.addNWords(n);
},
runBenchmark: function() {
var pBar = $world.addStatusProgress(),
t = this,
times = [],
chart = this.get('chart');
chart.data = times;
t.benchmarkSetup();
Array.range(1, t.benchmarkRepeats()).forEachShowingProgress(pBar, function(n) {
t.benchmarkReset(n);
times.push(t.benchmark(n));
}, Functions.K, function() { pBar.remove(); chart.update() });
},
benchmarkRepeats: function() { return 1 },
benchmarkSetup: function() {},
benchmarkReset: function(repeatIndex) {},
benchmark: function(repeatIndex) {}
}).applyTo(lively.morphic.Text);