changeset 162:77e87f1b5811 core-javascript

$ hg merge core-javascript.closure-exercises # done, at least for now
author jf3243
date Wed, 09 Nov 2011 17:00:38 +0000
parents 9cdf095a283e (current diff) a4b0e283999c (diff)
children db35829a438f 48d35d049b19
files
diffstat 14 files changed, 496 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Tue Nov 01 09:07:46 2011 +0000
+++ b/.hgignore	Wed Nov 09 17:00:38 2011 +0000
@@ -4,6 +4,7 @@
 *.orig
 *.pyc
 *.zip
+*.exe
 
 # Generated by LaTeX Beamer.
 *.aux
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core-javascript/core-javascript-work/answers/closure-exercises.js	Wed Nov 09 17:00:38 2011 +0000
@@ -0,0 +1,205 @@
+var something;
+
+TEST('anon', function()
+{
+    var answer;
+
+    // start
+    answer = function(){
+        return 1;
+    };
+    // stop
+
+    assert( answer() ===  1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(){
+
+        var answer;
+
+        // start
+        answer = function(){
+            return 1;
+        };
+        // stop
+
+        return answer;
+    };
+
+    var my_inner_function = outer_function();
+
+    assert( typeof my_inner_function === 'function' );
+    assert( my_inner_function() === 1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(){
+
+        var answer;
+
+        // start
+        answer = function(){
+            return 1;
+        };
+        // stop
+
+        return answer;
+    };
+
+    assert( outer_function()() === 1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(n){
+
+        var answer;
+
+        // start
+        answer = function(){
+            return n;
+        };
+        // stop
+
+        return answer;
+    };
+
+    assert( outer_function(1)() === 1 );
+    assert( outer_function(2)() === 2 );
+    assert( outer_function(3)() === 3 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(n){
+
+        // start
+        return function(){
+          return n;
+        };
+        // stop
+    };
+
+    assert( outer_function(1)() === 1 );
+    assert( outer_function(2)() === 2 );
+    assert( outer_function(3)() === 3 );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var get_value = function(){
+        return value;
+    };
+
+    something = 1;
+    assert( get_value() === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var set_value = function(n){
+        value = n;
+    };
+
+    set_value(2);
+    something = 2;
+    assert( value === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var get_value = function(){
+        return value;
+    };
+
+    var set_value = function(n){
+        value = n;
+    };
+
+    something = 1;
+    assert( get_value() === something );
+
+    set_value(2);
+    something = 2;
+    assert( get_value() === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var ddd = function(aaa, bbb){
+        return {
+            // start
+            aaa: aaa,
+            bbb: bbb
+            // stop
+            };
+    };
+
+    var obj = ddd(1, 2);
+
+    assert( obj.aaa === 1 );
+    assert( obj.bbb === 2 );
+
+});
+
+
+TEST('anon', function()
+{
+
+    var get_set_factory = function(){
+
+        // start
+        var value;
+
+        var get = function(){
+            return value;
+        };
+
+        var set = function(new_value){
+            value = new_value;
+        };
+        // stop
+
+        return {
+            get : get,
+            set : set
+        };
+    };
+
+    var tmp;
+    tmp = get_set_factory();
+    var get_a = tmp.get;
+    var set_a = tmp.set;
+
+    tmp = get_set_factory();
+    var get_b = tmp.get;
+    var set_b = tmp.set;
+
+
+    set_a('aaa');
+    assert( get_a() == 'aaa' );
+
+    set_b('bbb');
+    assert( get_b() == 'bbb' );
+
+    assert( get_a() == 'aaa' );
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core-javascript/core-javascript-work/closure-exercises.js	Wed Nov 09 17:00:38 2011 +0000
@@ -0,0 +1,168 @@
+var something;
+
+TEST('anon', function()
+{
+    var answer;
+
+    // Please write your answer here.
+
+    assert( answer() ===  1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(){
+
+        var answer;
+
+        // Please write your answer here.
+
+        return answer;
+    };
+
+    var my_inner_function = outer_function();
+
+    assert( typeof my_inner_function === 'function' );
+    assert( my_inner_function() === 1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(){
+
+        var answer;
+
+        // Please write your answer here.
+
+        return answer;
+    };
+
+    assert( outer_function()() === 1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(n){
+
+        var answer;
+
+        // Please write your answer here.
+
+        return answer;
+    };
+
+    assert( outer_function(1)() === 1 );
+    assert( outer_function(2)() === 2 );
+    assert( outer_function(3)() === 3 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(n){
+
+        // Please write your answer here.
+    };
+
+    assert( outer_function(1)() === 1 );
+    assert( outer_function(2)() === 2 );
+    assert( outer_function(3)() === 3 );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var get_value = function(){
+        return value;
+    };
+
+    assert( get_value() === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var set_value = function(n){
+        value = n;
+    };
+
+    set_value(2);
+    assert( value === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var get_value = function(){
+        return value;
+    };
+
+    var set_value = function(n){
+        value = n;
+    };
+
+    assert( get_value() === something );
+
+    set_value(2);
+    assert( get_value() === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var ddd = function(aaa, bbb){
+        return {
+            // Please write your answer here.
+            };
+    };
+
+    var obj = ddd(1, 2);
+
+    assert( obj.aaa === 1 );
+    assert( obj.bbb === 2 );
+
+});
+
+
+TEST('anon', function()
+{
+
+    var get_set_factory = function(){
+
+        // Please write your answer here.
+
+        return {
+            get : get,
+            set : set
+        };
+    };
+
+    var tmp;
+    tmp = get_set_factory();
+    var get_a = tmp.get;
+    var set_a = tmp.set;
+
+    tmp = get_set_factory();
+    var get_b = tmp.get;
+    var set_b = tmp.set;
+
+
+    set_a('aaa');
+    assert( get_a() == 'aaa' );
+
+    set_b('bbb');
+    assert( get_b() == 'bbb' );
+
+    assert( get_a() == 'aaa' );
+});
--- a/core-javascript/core-javascript-work/exercise-1.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/exercise-1.js	Wed Nov 09 17:00:38 2011 +0000
@@ -1,9 +1,9 @@
-var AAA = (function (BBB) 
+var AAA = (function (BBB)
 {
-    BBB.fff = function(ccc) 
+    BBB.fff = function(ccc)
     {
         return {
-            ggg: function(ddd) 
+            ggg: function(ddd)
             {
                 return BBB.hhh(ddd, ccc.iii());
             }
--- a/core-javascript/core-javascript-work/exercise-2.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/exercise-2.js	Wed Nov 09 17:00:38 2011 +0000
@@ -1,5 +1,5 @@
 var copy_attributes = function(tgt, src){
-    
+
     tgt.aaa = src.get_aaa();
     tgt.bbb = src.get_bbb();
     tgt.ccc = src.get_ccc();
--- a/core-javascript/core-javascript-work/library.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/library.js	Wed Nov 09 17:00:38 2011 +0000
@@ -14,7 +14,7 @@
 var SimpleClass = function(prototype){
 
     var cls = function(){
-        
+
         var instance = create(prototype);
         instance.__init__.apply(instance, arguments);
         return instance;
--- a/core-javascript/core-javascript-work/solution-1-a.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/solution-1-a.js	Wed Nov 09 17:00:38 2011 +0000
@@ -1,10 +1,10 @@
-var AAA = function () 
+var AAA = function ()
 {
     var BBB = AAA || {};
-    BBB.fff = function(ccc) 
+    BBB.fff = function(ccc)
     {
         return {
-            ggg: function(ddd) 
+            ggg: function(ddd)
             {
                 return BBB.hhh(ddd, ccc.iii());
             }
--- a/core-javascript/core-javascript-work/solution-1-b.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/solution-1-b.js	Wed Nov 09 17:00:38 2011 +0000
@@ -1,4 +1,4 @@
-var AAA = function () 
+var AAA = function ()
 {
     var BBB = AAA || {};
     return BBB;
--- a/core-javascript/core-javascript-work/solution-1-d.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/solution-1-d.js	Wed Nov 09 17:00:38 2011 +0000
@@ -1,9 +1,9 @@
 var AAA = AAA || {};
 
-AAA.fff = function(ccc) 
+AAA.fff = function(ccc)
 {
     return {
-        ggg: function(ddd) 
+        ggg: function(ddd)
         {
             return AAA.hhh(ddd, ccc.iii());
         }
--- a/core-javascript/core-javascript-work/solution-2-a.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/solution-2-a.js	Wed Nov 09 17:00:38 2011 +0000
@@ -1,10 +1,10 @@
 var copy_attributes = function(tgt, src){
-    
+
     var keys = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh'];
     var i;
     var key;
 
     for(i=0; i< keys.length; i++){
-        tgt[key] = src['get_' + key]();        
+        tgt[key] = src['get_' + key]();
     }
 };
--- a/core-javascript/core-javascript-work/solution-2-b.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/solution-2-b.js	Wed Nov 09 17:00:38 2011 +0000
@@ -5,7 +5,7 @@
         var key;
 
         for(i=0; i< keys.length; i++){
-            tgt[key] = src['get_' + key]();        
+            tgt[key] = src['get_' + key]();
         };
     };
 };
--- a/core-javascript/core-javascript-work/solution-2-c.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/solution-2-c.js	Wed Nov 09 17:00:38 2011 +0000
@@ -9,7 +9,7 @@
         var i;
 
         for(i=0; i< keys.length; i++){
-            tgt[key] = src['get_' + key]();        
+            tgt[key] = src['get_' + key]();
         };
     }
 };
--- a/core-javascript/core-javascript-work/testtools.js	Tue Nov 01 09:07:46 2011 +0000
+++ b/core-javascript/core-javascript-work/testtools.js	Wed Nov 09 17:00:38 2011 +0000
@@ -4,20 +4,29 @@
 // Define a global function 'log'.
 var log;
 if (this.hasOwnProperty('jsArguments')){
-    
+
     log = function(s){
         print(s + '\n');
     };
 } else {
-    log = print;    
+    log = print;
 }
 
-// 
+//
 var TEST = function(title, code){
 
+    var x;
+
     log( 'Testing: ' + title );
     _assertion_count = 0;
-    code();
+
+    try {
+        code();
+    } catch (x) {
+        log('! Exception at ' + x.fileName +':' + x.lineNumber);
+        log('! [' + x.name + '] '  + x.message );
+    }
+
 };
 
 var assert = function(arg){
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core-javascript/py/remove_answers.py	Wed Nov 09 17:00:38 2011 +0000
@@ -0,0 +1,94 @@
+'''Remove answers from exercises file.'''
+
+import os
+import sys
+
+NORMAL, SKIPPING, ERROR = range(3)
+LINE, SOMETHING, START, STOP = range(4)
+
+lookup = {}
+
+# All other states are an error.
+lookup[NORMAL, LINE] = NORMAL
+lookup[NORMAL, SOMETHING] = NORMAL
+lookup[NORMAL, START] = SKIPPING
+lookup[SKIPPING, LINE] = SKIPPING
+# lookup[NORMAL, STOP] = ERROR
+# lookup[SKIPPING, SOMETHING] = ERROR
+lookup[SKIPPING, STOP] = NORMAL
+
+
+def doit(src, tgt):
+
+    pending = []
+    with open(src, 'rb') as lines:
+
+        new_state = NORMAL
+
+        for lineno, line in enumerate(lines):
+
+            state = new_state
+
+
+            stripped_line = line.strip()
+
+            if stripped_line.startswith('something'):
+                event = SOMETHING
+
+            elif stripped_line == '// start':
+                event = START
+
+            elif stripped_line == '// stop':
+                event = STOP
+
+            else:
+                event = LINE
+
+            new_state = lookup[state, event]
+
+            if event == SOMETHING:
+                pass
+
+            elif event == STOP:
+                pass
+
+            elif event == START:
+                indent = len(line) - len(line.lstrip())
+                spaces = line[0:indent]
+                pending.append(spaces + '// Please write your answer here.')
+
+            elif state == SKIPPING:
+                pass
+
+            elif event == LINE:
+                pending.append(line.rstrip())
+
+
+        with open(tgt, 'wb') as f:
+
+            for line in pending:
+                f.write(line + '\r\n')
+
+
+
+if __name__ == '__main__':
+
+
+    root = 'core-javascript-work'
+    exercises_dir = root
+    answers_dir = os.path.join(root, 'answers')
+
+
+    names = [
+        name
+        for name in os.listdir(answers_dir)
+        if name.endswith('.js')
+        ]
+
+
+    for name in names:
+
+        src = os.path.join(answers_dir, name)
+        tgt = os.path.join(exercises_dir, name)
+
+        doit(src, tgt)