@@ -28,7 +28,18 @@ plugin.testProblem = function(problem, cb) {
28
28
29
29
// generate full cpp source code that runnable
30
30
var meta = problem . templateMeta ;
31
- var args = problem . testcase . split ( '\n' ) . map ( function ( x , i ) {
31
+
32
+ var code = fs . readFileSync ( problem . file ) . toString ( ) ;
33
+ var re = code . match ( new RegExp ( ' ' + meta . name + '\\((.+)\\)' ) ) ;
34
+ if ( ! re ) return cb ( 'failed to generate runnable code!' ) ;
35
+
36
+ var types = re [ 1 ] . split ( ',' ) . map ( function ( x ) {
37
+ var parts = x . trim ( ) . split ( ' ' ) ;
38
+ parts . pop ( ) ; // skip param name
39
+ return parts . join ( ' ' ) ;
40
+ } ) ;
41
+
42
+ var values = problem . testcase . split ( '\n' ) . map ( function ( x , i ) {
32
43
// TODO: handle more special types??
33
44
// array, list, tree, etc
34
45
var t = meta . params [ i ] . type ;
@@ -40,9 +51,15 @@ plugin.testProblem = function(problem, cb) {
40
51
return x ;
41
52
} ) ;
42
53
43
- var data = DATA . replace ( '$code' , fs . readFileSync ( problem . file ) )
54
+ var data = DATA . replace ( '$code' , code )
44
55
. replace ( '$method' , meta . name )
45
- . replace ( '$args' , args . join ( ',' ) ) ;
56
+ . replace ( '$argDefs' , values . map ( function ( x , i ) {
57
+ return ' decay<' + types [ i ] + '>::type ' + 'p' + i + ' = ' + x + ';' ;
58
+ } ) . join ( '\n' ) )
59
+ . replace ( '$args' , values . map ( function ( x , i ) {
60
+ return 'p' + i ;
61
+ } ) . join ( ',' ) ) ;
62
+
46
63
fs . writeFileSync ( FILE_SRC , data ) ;
47
64
48
65
// compile and run
@@ -197,6 +214,7 @@ ostream& operator<<(ostream &os, const TreeNode *t) {
197
214
$code
198
215
int main() {
199
216
Solution s;
217
+ $argDefs
200
218
auto res = s.$method($args);
201
219
cout << res << endl;
202
220
return 0;
0 commit comments