@@ -37,6 +37,53 @@ export default class Problems extends React.PureComponent {
3737 }
3838 }
3939
40+ runtest ( i ) {
41+ const path = require ( 'path' ) ;
42+ var prob = this . state . probs [ this . state . curr ]
43+ var langcode = atom . config . get ( "codeblue.programmingLanguage" )
44+ var ext = ""
45+ if ( langcode == 43 ) ext = ".c"
46+ else if ( langcode == 54 ) ext = ".cpp"
47+ else ext = ".py"
48+ var wd = atom . config . get ( "codeblue.workingDirectory" )
49+ var towhere = path . join ( wd , prob . index )
50+ var torun = path . join ( towhere , prob . index + ext )
51+ var inputfile = path . join ( towhere , "examples/input" + i + ".in" )
52+
53+ var allverdicts = this . state . allverdicts
54+
55+ cmd = "python " + torun + " < " + inputfile
56+
57+ const { exec } = require ( 'child_process' ) ;
58+ exec ( cmd , {
59+ timeout : 2500 ,
60+ maxBuffer : 1024 * 32 ,
61+ } , ( error , stdout , stderr ) => {
62+ var res = { n : i - 1 , error : false , verdict : "none" , icon : "check" }
63+ res . stdout = stdout
64+ if ( error !== null ) {
65+ res . error = true
66+ if ( error . killed ) {
67+ res . verdict = "TIME_LIMIT_EXCEEDED"
68+ res . icon = "clock"
69+ } else if ( error . code == "ERR_CHILD_PROCESS_STDIO_MAXBUFFER" ) {
70+ res . verdict = "MEMORY_LIMIT_EXCEEDED"
71+ res . icon = "database"
72+ } else {
73+ res . verdict = "RUNTIME_ERROR"
74+ res . icon = "alert"
75+ }
76+ res . stderr = stderr
77+ }
78+ allverdicts [ prob . index ] [ i - 1 ] = res
79+ this . setState ( { allverdicts : allverdicts } )
80+ } )
81+ }
82+
83+ runexamples ( ) {
84+ this . runtest ( 1 )
85+ }
86+
4087 fetch ( url ) {
4188 return new Promise ( ( resolve , reject ) => {
4289 request ( url , ( error , response , body ) => {
@@ -100,7 +147,7 @@ export default class Problems extends React.PureComponent {
100147 outputs . push ( io )
101148 } else {
102149 inputs . push ( io )
103- verdicts . push ( { n : Math . floor ( i / 2 ) , verdict : "NONE " , icon : "none" } )
150+ verdicts . push ( { n : Math . floor ( i / 2 ) , error : false , verdict : "none " , icon : "none" , stdout : "" , stderr : "" } )
104151 }
105152 } else {
106153 noftests [ index ] = Math . floor ( i / 2 )
@@ -292,7 +339,11 @@ export default class Problems extends React.PureComponent {
292339 )
293340 }
294341 </ div >
295- { this . state . probs . length ? < Actions prob = { this . state . probs [ this . state . curr ] } tests = { this . state . allverdicts [ this . state . probs [ this . state . curr ] . index ] } /> : null }
342+ { this . state . probs . length ? < Actions
343+ prob = { this . state . probs [ this . state . curr ] }
344+ tests = { this . state . allverdicts [ this . state . probs [ this . state . curr ] . index ] }
345+ runexamples = { this . runexamples . bind ( this ) }
346+ /> : null }
296347 { this . state . probs . length ? < RecentSubmissions actions = { this . state . actions } /> : null }
297348 </ div >
298349 ) }
0 commit comments