diff --git a/app/templates/editor/verifier/verifier-view.jade b/app/templates/editor/verifier/verifier-view.jade index dd01f0466..d0e0c21bd 100644 --- a/app/templates/editor/verifier/verifier-view.jade +++ b/app/templates/editor/verifier/verifier-view.jade @@ -6,15 +6,23 @@ block content div.col-sm-3 p.alert.alert-success(style="padding: 5px") | Passed: #{view.passed} + div.col-sm-3 + p.alert.alert-warning(style="padding: 5px") + | Test Problem: #{view.problem} div.col-sm-3 p.alert.alert-danger(style="padding: 5px") | Failed: #{view.failed} + div.col-sm-3 + p.alert.alert-info(style="padding: 5px") + | To Run: #{view.testCount - view.passed - view.problem - view.failed} if view.levelIDs .progress .progress-bar.progress-bar-success(role="progressbar" style="width: #{100*view.passed/view.testCount}%") + .progress-bar.progress-bar-warning(role="progressbar" style="width: #{100*view.problem/view.testCount}%") .progress-bar.progress-bar-danger(role="progressbar" style="width: #{100*view.failed/view.testCount}%") + each test, id in view.tests if test.level .pull-right @@ -55,7 +63,10 @@ block content else div(style='color: red') ✘ #{k} (#{v.status} vs #{test.solution.goals[k]}) else - h3 Running.... + h3 Pending.... + + if test.error + pre(style="color: red") #{test.error} else h1 Loading Level... diff --git a/app/views/editor/verifier/VerifierTest.coffee b/app/views/editor/verifier/VerifierTest.coffee index e796ada17..3a49ea98c 100644 --- a/app/views/editor/verifier/VerifierTest.coffee +++ b/app/views/editor/verifier/VerifierTest.coffee @@ -32,9 +32,9 @@ module.exports = class VerifierTest extends CocoClass @grabLevelLoaderData() unless @solution - @updateCallback? state: 'error' @error = 'No solution present...' @state = 'error' + @updateCallback? state: 'error' return me.team = @team = 'humans' @setupGod() diff --git a/app/views/editor/verifier/VerifierView.coffee b/app/views/editor/verifier/VerifierView.coffee index 46f151526..dda94d5d8 100644 --- a/app/views/editor/verifier/VerifierView.coffee +++ b/app/views/editor/verifier/VerifierView.coffee @@ -1,6 +1,7 @@ RootView = require 'views/core/RootView' template = require 'templates/editor/verifier/verifier-view' VerifierTest = require './VerifierTest' +SuperModel = require 'models/SuperModel' module.exports = class VerifierView extends RootView className: 'style-flat' @@ -13,6 +14,8 @@ module.exports = class VerifierView extends RootView # TODO: sort tests by unexpected result first @passed = 0 @failed = 0 + @problem = 0 + testLevels = [ 'dungeons-of-kithgard', 'gems-in-the-deep', 'shadow-guard', 'kounter-kithwise', 'crawlways-of-kithgard', 'enemy-mine', 'illusory-interruption', 'forgetful-gemsmith', 'signs-and-portents', 'favorable-odds', @@ -26,30 +29,79 @@ module.exports = class VerifierView extends RootView 'patrol-buster', 'endangered-burl', 'thumb-biter', 'gems-or-death', 'village-guard', 'thornbush-farm', 'back-to-back', 'ogre-encampment', 'woodland-cleaver', 'shield-rush', 'range-finder', 'munchkin-swarm', 'stillness-in-motion', 'the-agrippa-defense', 'backwoods-bombardier', 'coinucopia', 'copper-meadows', - 'drop-the-flag', 'mind-the-trap', 'signal-corpse', 'rich-forager' + 'drop-the-flag', 'mind-the-trap', 'signal-corpse', 'rich-forager', + + "the-mighty-sand-yak", "oasis", "sarven-road", "sarven-gaps", "thunderhooves", "minesweeper", + "medical-attention", "sarven-sentry", "keeping-time", "hoarding-gold", "decoy-drill", "continuous-alchemy", + "dust", "desert-combat", "sarven-savior", "lurkers", "preferential-treatment", "sarven-shepherd", + "shine-getter" + + #"the-dunes", "the-mighty-sand-yak", "oasis", "basin-stampede", "sarven-road", "sarven-gaps", + #"crossroads", "thunderhooves", "operation-killdeer", "medical-attention", "the-great-yak-stampede", + #"minesweeper", "sarven-sentry", "keeping-time", "hoarding-gold", "bookkeeper", "decoy-drill", + #"continuous-alchemy", "yakstraction", "sarven-brawl", "desert-combat", "dust", "dont-rush-be-quiet", + #"sarven-rescue", "sacred-statue", "mirage-maker", "sarven-savior", "odd-sandstorm", "lurkers", + #"preferential-treatment", "bash-em-all", "sarven-shepherd", "shine-getter", "sand-snakes", + #"the-trials", "mad-maxer", "mad-maxer-strikes-back", "mad-maxer-sells-out", "mad-maxer-gets-greedy", + #"mad-maxer-redemption", "sarven-treasure", "harrowland", "sarven-siege", "goalkeeper", + #"clash-of-clones", "stranded-in-the-dunes", "sarven-sum", "golden-mirage", "diamond-dozen", + #"brittle-morale", "zig-zag-and-zoom", "cubic-minefield" + + + ] + defaultCores = 2 + cores = Math.max(window.navigator.hardwareConcurrency, defaultCores) + #testLevels = testLevels.slice 0, 15 @linksQueryString = window.location.search @levelIDs = if @levelID then [@levelID] else testLevels - @testCount = @levelIDs.length * 2 #One per langauge + #supermodel = if @levelID then @supermodel else undefined @tests = [] - async.eachSeries @levelIDs, (levelID, lnext) => - async.eachSeries ['python','javascript'], (lang, next) => - test = new VerifierTest levelID, (e) => + @taskList = [] + + @tasksList = _.flatten _.map @levelIDs, (v) -> + console.log(v) + _.map ['python', 'javascript'], (l) -> + level: v, language: l + + @testCount = @tasksList.length + + chunks = _.groupBy @tasksList, (v,i) -> i%cores + supermodels = [@supermodel] + + + + + _.forEach chunks, (chunk, i) => + _.delay => + parentSuperModel = supermodels[supermodels.length-1] + chunkSupermodel = new SuperModel() + chunkSupermodel.models = _.clone parentSuperModel.models + chunkSupermodel.collections = _.clone parentSuperModel.collections + supermodels.push chunkSupermodel + + async.eachSeries chunk, (task, next) => + test = new VerifierTest task.level, (e) => + @update(e) + if e.state in ['complete', 'error'] + if e.state is 'complete' + if test.isSucessful() + ++@passed + else + ++@failed + else + ++@problem + + next() + , chunkSupermodel, task.language + @tests.unshift test + @render() + , => @render() + , if i > 0 then 5000 + i * 1000 else 0 - @update(e) - if e.state in ['complete', 'error'] - if test.isSucessful() - ++@passed - else - ++@failed - next() - , @supermodel, lang - @tests.unshift test - , -> lnext() - , () => @render() update: (event) => # TODO: show unworkable tests instead of hiding them # TODO: destroy them Tests after or something