You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2009/10/03 23:50:35 UTC

svn commit: r821425 - in /tuscany/cpp/sca: ./ etc/ kernel/ modules/eval/ samples/ samples/store/ samples/store2/ test/ test/store-function/ test/store-object/ test/store-script/

Author: jsdelfino
Date: Sat Oct  3 21:50:33 2009
New Revision: 821425

URL: http://svn.apache.org/viewvc?rev=821425&view=rev
Log:
Refactored store tests and moved them under test/. Simplified the script evaluation logic a little, added an apply procedure and support for variable lists of args. Added a test case that assembles the store app using a script.

Added:
    tuscany/cpp/sca/test/
    tuscany/cpp/sca/test/Makefile.am
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/Makefile.am
    tuscany/cpp/sca/test/store-function/
    tuscany/cpp/sca/test/store-function/Makefile.am
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/Makefile.am
    tuscany/cpp/sca/test/store-function/cart.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/cart.hpp
    tuscany/cpp/sca/test/store-function/catalog.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/catalog.hpp
    tuscany/cpp/sca/test/store-function/catalogs.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/catalogs.composite
    tuscany/cpp/sca/test/store-function/currency-composite.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/currency-composite.hpp
    tuscany/cpp/sca/test/store-function/currency.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/currency.composite
    tuscany/cpp/sca/test/store-function/currency.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/currency.hpp
    tuscany/cpp/sca/test/store-function/item.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/item.hpp
    tuscany/cpp/sca/test/store-function/service.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/service.hpp
    tuscany/cpp/sca/test/store-function/store-composite.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/store-composite.hpp
    tuscany/cpp/sca/test/store-function/store-function-test.cpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/store2-test.cpp
    tuscany/cpp/sca/test/store-function/store-solution.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/store-solution.hpp
    tuscany/cpp/sca/test/store-function/store-ui.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/store-ui.hpp
    tuscany/cpp/sca/test/store-function/store.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/store.composite
    tuscany/cpp/sca/test/store-object/
    tuscany/cpp/sca/test/store-object/Makefile.am
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/Makefile.am
    tuscany/cpp/sca/test/store-object/cart.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/cart.hpp
    tuscany/cpp/sca/test/store-object/catalog.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/catalog.hpp
    tuscany/cpp/sca/test/store-object/catalogs.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/catalogs.composite
    tuscany/cpp/sca/test/store-object/currency-composite.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/currency-composite.hpp
    tuscany/cpp/sca/test/store-object/currency.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/currency.composite
    tuscany/cpp/sca/test/store-object/currency.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/currency.hpp
    tuscany/cpp/sca/test/store-object/item.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/item.hpp
    tuscany/cpp/sca/test/store-object/store-composite.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/store-composite.hpp
    tuscany/cpp/sca/test/store-object/store-object-test.cpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/store-test.cpp
    tuscany/cpp/sca/test/store-object/store-solution.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/store-solution.hpp
    tuscany/cpp/sca/test/store-object/store-ui.hpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/store-ui.hpp
    tuscany/cpp/sca/test/store-object/store.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/store.composite
    tuscany/cpp/sca/test/store-script/
    tuscany/cpp/sca/test/store-script/Makefile.am
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/Makefile.am
    tuscany/cpp/sca/test/store-script/catalogs.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/catalogs.composite
    tuscany/cpp/sca/test/store-script/currency.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/currency.composite
    tuscany/cpp/sca/test/store-script/store-script-test.cpp
      - copied, changed from r819394, tuscany/cpp/sca/samples/store2/store2-test.cpp
    tuscany/cpp/sca/test/store-script/store-script.scm
    tuscany/cpp/sca/test/store-script/store.composite
      - copied, changed from r819394, tuscany/cpp/sca/samples/store/store.composite
Removed:
    tuscany/cpp/sca/samples/store/
    tuscany/cpp/sca/samples/store2/
Modified:
    tuscany/cpp/sca/Makefile.am
    tuscany/cpp/sca/configure.ac
    tuscany/cpp/sca/etc/git-exclude
    tuscany/cpp/sca/kernel/kernel-test.cpp
    tuscany/cpp/sca/kernel/list.hpp
    tuscany/cpp/sca/modules/eval/Makefile.am
    tuscany/cpp/sca/modules/eval/driver.hpp
    tuscany/cpp/sca/modules/eval/environment.hpp
    tuscany/cpp/sca/modules/eval/eval-test
    tuscany/cpp/sca/modules/eval/eval-test.cpp
    tuscany/cpp/sca/modules/eval/eval.hpp
    tuscany/cpp/sca/modules/eval/primitive.hpp
    tuscany/cpp/sca/modules/eval/read.hpp
    tuscany/cpp/sca/samples/Makefile.am
    tuscany/cpp/sca/samples/configure.ac

Modified: tuscany/cpp/sca/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/Makefile.am?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/Makefile.am (original)
+++ tuscany/cpp/sca/Makefile.am Sat Oct  3 21:50:33 2009
@@ -15,8 +15,8 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-SUBDIRS = runtime kernel modules doc
-DIST_SUBDIRS = runtime doc samples
+SUBDIRS = kernel modules test doc runtime
+DIST_SUBDIRS = doc runtime samples
 datadir=$(prefix)
 data_DATA = INSTALL README LICENSE COPYING NOTICE GettingStarted.html
 nobase_data_DATA = xsd/*.*
@@ -47,7 +47,7 @@
 	mv ${PACKAGE}-${PACKAGE_VERSION} ${PACKAGE}-${PACKAGE_VERSION}-src
 	tar -cf - ${PACKAGE}-${PACKAGE_VERSION}-src | gzip -c > ${PACKAGE}-${PACKAGE_VERSION}-src.tar.gz
 	cd ${PACKAGE}-${PACKAGE_VERSION}-src \
-	&&	sh ../makebindist.sh
+	&& sh ../makebindist.sh
 	mkdir ${PACKAGE}-${PACKAGE_VERSION}-bin
 	cp -r ${PACKAGE}-${PACKAGE_VERSION}-src/deploy/* ${PACKAGE}-${PACKAGE_VERSION}-bin
 	tar -cf - ${PACKAGE}-${PACKAGE_VERSION}-bin | gzip -c > ${PACKAGE}-${PACKAGE_VERSION}-bin.tar.gz

Modified: tuscany/cpp/sca/configure.ac
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/configure.ac?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/configure.ac (original)
+++ tuscany/cpp/sca/configure.ac Sat Oct  3 21:50:33 2009
@@ -255,6 +255,15 @@
 AM_CONDITIONAL([WANT_DOXYGEN], [test x$want_doxygen = xtrue])
 
 AC_CONFIG_FILES([Makefile
+                 kernel/Makefile
+                 modules/Makefile
+                 modules/eval/Makefile
+                 test/Makefile
+                 test/store-object/Makefile
+                 test/store-function/Makefile
+                 test/store-script/Makefile
+                 doc/Makefile
+                 doc/Doxyfile
                  runtime/Makefile
                  runtime/core/Makefile
                  runtime/core/src/Makefile
@@ -290,11 +299,6 @@
                  runtime/extensions/ruby/Makefile
                  runtime/extensions/ruby/src/Makefile
                  runtime/extensions/ruby/extension/Makefile
-                 kernel/Makefile
-                 modules/Makefile
-                 modules/eval/Makefile
-                 doc/Makefile
-                 doc/Doxyfile
                  ])
 AC_OUTPUT
 

Modified: tuscany/cpp/sca/etc/git-exclude
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/etc/git-exclude?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/etc/git-exclude (original)
+++ tuscany/cpp/sca/etc/git-exclude Sat Oct  3 21:50:33 2009
@@ -59,8 +59,10 @@
 sca/runtime/extensions/cpp/tools/scagen/docs/
 account_client
 calculator_client
-store-test
-store2-test
 kernel-test
 xml-test
+eval-test
+store-function-test
+store-object-test
+store-script-test
 

Modified: tuscany/cpp/sca/kernel/kernel-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/kernel/kernel-test.cpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/kernel/kernel-test.cpp (original)
+++ tuscany/cpp/sca/kernel/kernel-test.cpp Sat Oct  3 21:50:33 2009
@@ -105,9 +105,9 @@
     return true;
 }
 
-bool testlistGC() {
+bool testListGC() {
     resetLambdaCounters();
-    resetlistCounters();
+    resetListCounters();
     countElements = 0;
     testCons();
     assert(countLambdas == 0);
@@ -227,13 +227,13 @@
 }
 
 bool testSeq() {
-    //resetLambdaCounters();
-    //resetlistCounters();
+    resetLambdaCounters();
+    resetListCounters();
 
     list<double> s = seq(0.0, 1000.0);
     assert(1001 == length(s));
-    //printLambdaCounters();
-    //printlistCounters();
+    printLambdaCounters();
+    printListCounters();
 
     assert(1001 == length(map(lambda<double(double)>(testSeqMap), s)));
 
@@ -241,8 +241,8 @@
     assert(201 == length(member(200.0, reverse(s))));
 
     assert(1001 == reduce(lambda<double(double, double)>(testSeqReduce), 0.0, s));
-    //printLambdaCounters();
-    //printlistCounters();
+    printLambdaCounters();
+    printListCounters();
 
     return true;
 }
@@ -262,9 +262,9 @@
 }
 
 bool testValueGC() {
-    resetValueCounters();
     resetLambdaCounters();
-    resetlistCounters();
+    resetListCounters();
+    resetValueCounters();
     testValue();
     assert(countValues == 0);
     assert(countLambdas == 0);
@@ -292,7 +292,7 @@
     assert(1000 == length(r));
 
     gettimeofday(&end, NULL);
-    long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
+    //long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
     //std::cout << "Fib cpp perf test " << t << " ms" << std::endl;
     return true;
 }
@@ -305,7 +305,7 @@
         for(int i = 0; i < 10000000;)
             i = i + 1;
         gettimeofday(&end, NULL);
-        long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
+        //long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
         //std::cout << "Loop test " << t << " ms" << std::endl;
     }
     {
@@ -313,7 +313,7 @@
         for(int i = 0; i < 10000000;)
             __sync_add_and_fetch(&i, 1);
         gettimeofday(&end, NULL);
-        long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
+        //long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
         //std::cout << "Loop atomic test " << t << " ms" << std::endl;
     }
     {
@@ -327,7 +327,7 @@
         }
         gettimeofday(&end, NULL);
         pthread_mutex_destroy(&mutex);
-        long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
+        //long t = (end.tv_sec * 1000 + end.tv_usec / 1000) - (start.tv_sec * 1000 + start.tv_usec / 1000);
         //std::cout << "Loop mutex test " << t << " ms" << std::endl;
     }
     return true;
@@ -418,7 +418,7 @@
     tuscany::testFunction();
     tuscany::testFunctionGC();
     tuscany::testCons();
-    tuscany::testlistGC();
+    tuscany::testListGC();
     tuscany::testOut();
     tuscany::testEquals();
     tuscany::testLength();

Modified: tuscany/cpp/sca/kernel/list.hpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/kernel/list.hpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/kernel/list.hpp (original)
+++ tuscany/cpp/sca/kernel/list.hpp Sat Oct  3 21:50:33 2009
@@ -36,12 +36,12 @@
 long countClists = 0;
 long countElists = 0;
 
-bool resetlistCounters() {
+bool resetListCounters() {
     countlists = countIlists = countClists = countElists = 0;
     return true;
 }
 
-bool printlistCounters() {
+bool printListCounters() {
     std::cout << "countlists " << countlists << std::endl;
     std::cout << "countElists " << countElists << std::endl;
     std::cout << "countIlists " << countIlists << std::endl;

Modified: tuscany/cpp/sca/modules/eval/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/Makefile.am?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/modules/eval/Makefile.am (original)
+++ tuscany/cpp/sca/modules/eval/Makefile.am Sat Oct  3 21:50:33 2009
@@ -22,11 +22,6 @@
 
 INCLUDES = -I. -I$(top_builddir)/kernel -I${LIBXML2_INCLUDE}
 
-#libdir=$(prefix)/modules/eval/lib
-#lib_LTLIBRARIES = libtuscany_eval.la
-#libtuscany_eval_la_SOURCES = eval.cpp
-#libtuscany_eval_la_LIBADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca -lpthread
-
 eval_test_SOURCES = eval-test.cpp
 eval_test_LDADD = -lpthread -L${LIBXML2_LIB} -lxml2
 

Modified: tuscany/cpp/sca/modules/eval/driver.hpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/driver.hpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/modules/eval/driver.hpp (original)
+++ tuscany/cpp/sca/modules/eval/driver.hpp Sat Oct  3 21:50:33 2009
@@ -33,16 +33,16 @@
 namespace tuscany
 {
 
-const std::string evalOutputPrompt(";;; Eval value: ");
-const std::string evalInputPrompt(";;; Eval input: ");
+const std::string evalOutputPrompt("; ");
+const std::string evalInputPrompt("=> ");
 
 const bool promptForInput(std::ostream& out, const std::string str) {
-    out << "\n\n" << str << "\n";
+    out << "\n\n" << str;
     return true;
 }
 
 const bool announceOutput(std::ostream& out, const std::string str) {
-    out << "\n" << str << "\n";
+    out << "\n" << str;
     return true;
 }
 

Modified: tuscany/cpp/sca/modules/eval/environment.hpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/environment.hpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/modules/eval/environment.hpp (original)
+++ tuscany/cpp/sca/modules/eval/environment.hpp Sat Oct  3 21:50:33 2009
@@ -29,6 +29,7 @@
 #include <string>
 #include "list.hpp"
 #include "value.hpp"
+#include "primitive.hpp"
 
 namespace tuscany
 {
@@ -40,6 +41,7 @@
 const value falseSymbol = value("false");
 const value defineSymbol = value("define");
 const value setSymbol = value("set!");
+const value dotSymbol = value(".");
 
 const Env theEmptyEnvironment() {
     return list<value>();
@@ -73,8 +75,35 @@
     return cdr((list<value> )frame);
 }
 
+const bool isDotVariable(const value& var) {
+    return var == dotSymbol;
+}
+
+const Frame makeBinding(const Frame& frameSoFar, const list<value>& variables, const list<value> values) {
+    if (variables == list<value>()) {
+        if (values != list<value>())
+            std::cout << "Too many arguments supplied " << values << "\n";
+        return frameSoFar;
+    }
+    if (isDotVariable(car(variables)))
+        return makeBinding(frameSoFar, cdr(variables), makeList(value(values)));
+
+    if (values == list<value>()) {
+        if (variables != list<value>())
+            std::cout << "Too few arguments supplied " << variables << "\n";
+        return frameSoFar;
+    }
+
+    const list<value> vars = cons(car(variables), frameVariables(frameSoFar));
+    const list<value> vals = cons(car(values), frameValues(frameSoFar));
+    const Frame newFrame = value(cons(value(vars), vals));
+
+    return makeBinding(newFrame, cdr(variables), cdr(values));
+}
+
 const Frame makeFrame(const list<value>& variables, const list<value> values) {
-    return value(cons((value)variables, values));
+    const Frame emptyFrame = value(cons((value)list<value>(), list<value>()));
+    return makeBinding(emptyFrame, variables, values);
 }
 
 const value definitionVariable(const value& exp) {
@@ -110,13 +139,13 @@
 }
 
 const Env extendEnvironment(const list<value>& vars, const list<value>& vals, const Env& baseEnv) {
-    if(length(vars) == length(vals))
-        return cons(makeFrame(vars, vals), baseEnv);
-    else if(length(vars) < length(vals))
-        std::cout << "Too many arguments supplied " << vars << " " << vals << "\n";
-    else
-        std::cout << "Too few arguments supplied " << vars << " " << vals << "\n";
-    return baseEnv;
+//    if(length(vars) == length(vals))
+//    else if(length(vars) < length(vals))
+//        std::cout << "Too many arguments supplied " << vars << " " << vals << "\n";
+//    else
+//        std::cout << "Too few arguments supplied " << vars << " " << vals << "\n";
+//    return baseEnv;
+    return cons(makeFrame(vars, vals), baseEnv);
 }
 
 const Env setupEnvironment() {

Modified: tuscany/cpp/sca/modules/eval/eval-test
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/eval-test?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
Files tuscany/cpp/sca/modules/eval/eval-test (original) and tuscany/cpp/sca/modules/eval/eval-test Sat Oct  3 21:50:33 2009 differ

Modified: tuscany/cpp/sca/modules/eval/eval-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/eval-test.cpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/modules/eval/eval-test.cpp (original)
+++ tuscany/cpp/sca/modules/eval/eval-test.cpp Sat Oct  3 21:50:33 2009
@@ -41,13 +41,16 @@
 }
 
 bool testEnvGC() {
-    resetValueCounters();
     resetLambdaCounters();
-    resetlistCounters();
+    resetListCounters();
+    resetValueCounters();
     testEnv();
     assert(countValues == 0);
     assert(countLambdas == 0);
     assert(countlists == 0);
+    printLambdaCounters();
+    printListCounters();
+    printValueCounters();
     return true;
 }
 
@@ -138,13 +141,16 @@
 }
 
 bool testEvalGC() {
-    resetValueCounters();
     resetLambdaCounters();
-    resetlistCounters();
+    resetListCounters();
+    resetValueCounters();
     testEval();
     assert(countValues == 0);
     assert(countLambdas == 0);
     assert(countlists == 0);
+    printLambdaCounters();
+    printListCounters();
+    printValueCounters();
     return true;
 }
 

Modified: tuscany/cpp/sca/modules/eval/eval.hpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/eval.hpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/modules/eval/eval.hpp (original)
+++ tuscany/cpp/sca/modules/eval/eval.hpp Sat Oct  3 21:50:33 2009
@@ -23,10 +23,10 @@
 #define tuscany_eval_eval_hpp
 
 /**
- * Script evaluator core evaluation logic.
+ * Core script evaluation logic.
  */
 
-#include <string>
+#include <string.h>
 #include "list.hpp"
 #include "value.hpp"
 #include "primitive.hpp"
@@ -36,8 +36,11 @@
 namespace tuscany
 {
 
+const value eval(const value& exp, Env& env);
+
 const value compoundProcedureSymbol("compound-procedure");
 const value procedureSymbol("procedure");
+const value applySymbol("apply");
 const value beginSymbol("begin");
 const value condSymbol("cond");
 const value elseSymbol("else");
@@ -67,6 +70,10 @@
     return value(makeList(procedureSymbol, value(parameters), body, value(env)));
 }
 
+const bool isApply(const value& exp) {
+    return isTaggedList(exp, applySymbol);
+}
+
 const bool isApplication(const value& exp) {
     return isList(exp);
 }
@@ -79,6 +86,20 @@
     return cdr((list<value> )exp);
 }
 
+const list<value> listOfValues(const list<value> exps, Env& env) {
+    if(exps == list<value> ())
+        return list<value> ();
+    return cons(eval(car(exps), env), listOfValues(cdr(exps), env));
+}
+
+const value applyOperat(const value& exp) {
+    return cadr((list<value> )exp);
+}
+
+const value applyOperand(const value& exp) {
+    return caddr((list<value> )exp);
+}
+
 const bool isCompoundProcedure(const value& procedure) {
     return isTaggedList(procedure, procedureSymbol);
 }
@@ -103,10 +124,32 @@
     return car(seq);
 }
 
+const list<value> restExp(const list<value>& seq) {
+    return cdr(seq);
+}
+
 const value makeBegin(const list<value> seq) {
     return value(cons(beginSymbol, seq));
 }
 
+const value evalSequence(const list<value>& exps, Env& env) {
+    if(isLastExp(exps))
+        return eval(firstExp(exps), env);
+    eval(firstExp(exps), env);
+    return evalSequence(restExp(exps), env);
+}
+
+const value applyProcedure(const value& procedure, list<value>& arguments) {
+    if(isPrimitiveProcedure(procedure))
+        return applyPrimitiveProcedure(procedure, arguments);
+    if(isCompoundProcedure(procedure)) {
+        Env env = extendEnvironment(procedureParameters(procedure), arguments, procedureEnvironment(procedure));
+        return evalSequence(procedureBody(procedure), env);
+    }
+    std::cout << "Unknown procedure type " << procedure << "\n";
+    return value();
+}
+
 const value sequenceToExp(const list<value> exps) {
     if(exps == list<value> ())
         return value(list<value>());
@@ -175,208 +218,44 @@
     return expandClauses(condClauses(exp));
 }
 
-const lambda<value(Env&)> analyze(const value exp);
-
-struct evalUndefinedLambda {
-    evalUndefinedLambda() {
-    }
-
-    const value operator()(Env& env) const {
-        return value();
-    }
-};
-
-struct evalSelfEvaluatingLambda {
-    const value exp;
-    evalSelfEvaluatingLambda(const value& exp) : exp(exp) {
-    }
-    const value operator()(Env& env) const {
-        return exp;
-    }
-};
-
-const lambda<value(Env&)> analyzeSelfEvaluating(value exp) {
-    return lambda<value(Env&)>(evalSelfEvaluatingLambda(exp));
-}
-
-struct evalQuotedLambda {
-    const value qval;
-    evalQuotedLambda(const value& qval) : qval(qval) {
-    }
-    const value operator()(Env& env) const {
-        return qval;
-    }
-};
-
-const lambda<value(Env&)> analyzeQuoted(const value& exp) {
-    return lambda<value(Env&)>(evalQuotedLambda(textOfQuotation(exp)));
+value evalIf(const value& exp, Env& env) {
+    if(isTrue(eval(ifPredicate(exp), env)))
+        return eval(ifConsequent(exp), env);
+    return eval(ifAlternative(exp), env);
 }
 
-struct evalVariableLambda {
-    const value var;
-    evalVariableLambda(const value& var) : var(var) {
-    }
-    const value operator()(Env& env) const {
-        return lookupVariableValue(var, env);
-    }
-};
-
-const lambda<value(Env&)> analyzeVariable(const value& exp) {
-    return lambda<value(Env&)>(evalVariableLambda(exp));
+const value evalDefinition(const value& exp, Env& env) {
+    env = defineVariable(definitionVariable(exp), eval(definitionValue(exp), env), env);
+    return definitionVariable(exp);
 }
 
-struct evalDefinitionLambda {
-    const value var;
-    const lambda<value(Env&)> vproc;
-    evalDefinitionLambda(const value& var, const lambda<value(Env&)>& vproc) : var(var), vproc(vproc) {
-    }
-    const value operator()(Env& env) const {
-        env = defineVariable(var, vproc(env), env);
-        return var;
-    }
-};
-
-const lambda<value(Env&)> analyzeDefinition(const value& exp) {
-    return lambda<value(Env&)>(evalDefinitionLambda(definitionVariable(exp), analyze(definitionValue(exp))));
-}
-
-struct evalIfLambda {
-    const lambda<value(Env&)> pproc;
-    const lambda<value(Env&)> cproc;
-    const lambda<value(Env&)> aproc;
-    evalIfLambda(const lambda<value(Env&)> pproc, const lambda<value(Env&)>& cproc, const lambda<value(Env&)>& aproc) :
-        pproc(pproc), cproc(cproc), aproc(aproc) {
-    }
-    const value operator()(Env& env) const {
-        if(pproc(env))
-            return cproc(env);
-        return aproc(env);
-    }
-};
-
-const lambda<value(Env&)> analyzeIf(const value& exp) {
-    const lambda<value(Env&)> pproc = analyze(ifPredicate(exp));
-    const lambda<value(Env&)> cproc = analyze(ifConsequent(exp));
-    const lambda<value(Env&)> aproc = analyze(ifAlternative(exp));
-    return lambda<value(Env&)>(evalIfLambda(pproc, cproc, aproc));
-}
-
-struct evalSequenceLambda {
-    const lambda<value(Env&)> proc1;
-    const lambda<value(Env&)> proc2;
-    evalSequenceLambda(const lambda<value(Env&)>& proc1, const lambda<value(Env&)>& proc2) :
-        proc1(proc1), proc2(proc2) {
-    }
-    const value operator()(Env& env) const {
-        proc1(env);
-        return proc2(env);
-    }
-};
-
-const lambda<value(Env&)> analyzeSequenceSequentially(const lambda<value(Env&)>& proc1, const lambda<value(Env&)>& proc2) {
-    return lambda<value(Env&)>(evalSequenceLambda(proc1, proc2));
-}
-
-const lambda<value(Env&)> analyzeSequenceLoop(const lambda<value(Env&)>& firstProc, const list<lambda<value(Env&)> >& restProcs) {
-    if(restProcs == list<lambda<value(Env&)> >())
-        return firstProc;
-    return analyzeSequenceLoop(analyzeSequenceSequentially(firstProc, car(restProcs)), cdr(restProcs));
-}
-
-const lambda<value(Env&)> analyzeSequence(const list<value>& exps) {
-    lambda<lambda<value(Env&)>(value exp)> a(analyze);
-    const list<lambda<value(Env&)> > procs = map(a, exps);
-    if(procs == list<lambda<value(Env&)> >()) {
-        std::cout << "Empty sequence" << "\n";
-        return lambda<value(Env&)>(evalUndefinedLambda());
-    }
-    return analyzeSequenceLoop(car(procs), cdr(procs));
-}
-
-struct lambdaLambda {
-    const list<value> vars;
-    const lambda<value(Env&)> bproc;
-    lambdaLambda(const list<value> vars, const lambda<value(Env&)>& bproc)
-        : vars(vars), bproc(bproc) {
-    }
-
-    const value operator()(Env& env) const {
-        return makeProcedure(vars, value(bproc), env);
-    }
-};
-
-const lambda<value(Env&)> analyzeLambda(const value& exp) {
-    const list<value> vars = lambdaParameters(exp);
-    const lambda<value(Env&)> bproc = analyzeSequence(lambdaBody(exp));
-    return lambda<value(Env&)>(lambdaLambda(vars, bproc));
-}
-
-const value executeApplication(const value& proc, const list<value>& args) {
-    if(isPrimitiveProcedure(proc)) {
-        list<value> ncargs = args;
-        return applyPrimitiveProcedure(proc, ncargs);
-    }
-    if(isCompoundProcedure(proc)) {
-        lambda<value(Env&) > bproc(procedureBody(proc));
-        Env env = extendEnvironment(procedureParameters(proc), args, procedureEnvironment(proc));
-        return bproc(env);
-    }
-    std::cout << "Unknown procedure type " << proc << "\n";
-    return value();
-}
-
-struct evalApplicationArgLambda {
-    Env& env;
-    evalApplicationArgLambda(Env& env) : env(env) {
-    }
-    const value operator()(const lambda<value(Env&)>& aproc) const {
-        return aproc(env);
-    }
-};
-
-struct evalApplicationLambda {
-    const lambda<value(Env&)> fproc;
-    const list<lambda<value(Env&)> > aprocs;
-    evalApplicationLambda(const lambda<value(Env&)>& fproc, const list<lambda<value(Env&)> >& aprocs) :
-        fproc(fproc), aprocs(aprocs) {
-    }
-    const value operator()(Env& env) const {
-        return executeApplication(fproc(env), map(lambda<value(lambda<value(Env&)>)>(evalApplicationArgLambda(env)), aprocs));
-    }
-};
-
-const lambda<value(Env&)> analyzeApplication(const value& exp) {
-    const lambda<value(Env&)> fproc = analyze(operat(exp));
-    lambda<lambda<value(Env&)>(value exp)> a(analyze);
-    const list<lambda<value(Env&)> > aprocs = map(a, operands(exp));
-    return lambda<value(Env&)>(evalApplicationLambda(fproc, aprocs));
-}
-
-const lambda<value(Env&)> analyze(const value exp) {
+const value eval(const value& exp, Env& env) {
     if(isSelfEvaluating(exp))
-        return analyzeSelfEvaluating(exp);
+        return exp;
     if(isQuoted(exp))
-        return analyzeQuoted(exp);
+        return textOfQuotation(exp);
     if(isDefinition(exp))
-        return analyzeDefinition(exp);
+        return evalDefinition(exp, env);
     if(isIf(exp))
-        return analyzeIf(exp);
+        return evalIf(exp, env);
     if(isBegin(exp))
-        return analyzeSequence(beginActions(exp));
+        return evalSequence(beginActions(exp), env);
     if(isCond(exp))
-        return analyze(condToIf(exp));
+        return eval(condToIf(exp), env);
     if(isLambda(exp))
-        return analyzeLambda(exp);
+        return makeProcedure(lambdaParameters(exp), value(lambdaBody(exp)), env);
     if(isVariable(exp))
-        return analyzeVariable(exp);
-    if(isApplication(exp))
-        return analyzeApplication(exp);
+        return lookupVariableValue(exp, env);
+    if(isApply(exp)) {
+        list<value> applyOperandValues = eval(applyOperand(exp), env);
+        return applyProcedure(eval(applyOperat(exp), env), applyOperandValues);
+    }
+    if(isApplication(exp)) {
+        list<value> operandValues = listOfValues(operands(exp), env);
+        return applyProcedure(eval(operat(exp), env), operandValues);
+    }
     std::cout << "Unknown expression type " << exp << "\n";
-    return lambda<value(Env&)>(evalUndefinedLambda());
-}
-
-    const value eval(const value& exp, Env& env) {
-    return analyze(exp)(env);
+    return value();
 }
 
 }

Modified: tuscany/cpp/sca/modules/eval/primitive.hpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/primitive.hpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/modules/eval/primitive.hpp (original)
+++ tuscany/cpp/sca/modules/eval/primitive.hpp Sat Oct  3 21:50:33 2009
@@ -57,6 +57,10 @@
     return value(cons(car(args), (list<value> )cadr(args)));
 }
 
+const value valueList(list<value>& args) {
+    return value(args);
+}
+
 const value valueNul(list<value>& args) {
     return value((bool)isNil(car(args)));
 }
@@ -66,10 +70,14 @@
 }
 
 const value valueAdd(list<value>& args) {
+    if (cdr(args) == list<value>())
+        return value((double)car(args));
     return value((double)car(args) + (double)cadr(args));
 }
 
 const value valueSub(list<value>& args) {
+    if (cdr(args) == list<value>())
+        return value(0 - (double)car(args));
     return value((double)car(args) - (double)cadr(args));
 }
 
@@ -126,12 +134,14 @@
     list<value> l = makeList(value("car"));
     l = cons(value("cdr"), l);
     l = cons(value("cons"), l);
+    l = cons(value("list"), l);
     l = cons(value("nul"), l);
     l = cons(value("="), l);
     l = cons(value("+"), l);
     l = cons(value("-"), l);
     l = cons(value("*"), l);
     l = cons(value("/"), l);
+    l = cons(value("equal?"), l);
     l = cons(value("display"), l);
     return l;
 }
@@ -140,12 +150,14 @@
     list<value> l = makeList(primitiveProcedure(valueCar));
     l = cons(primitiveProcedure(valueCdr), l);
     l = cons(primitiveProcedure(valueCons), l);
+    l = cons(primitiveProcedure(valueList), l);
     l = cons(primitiveProcedure(valueNul), l);
     l = cons(primitiveProcedure(valueEqual), l);
     l = cons(primitiveProcedure(valueAdd), l);
     l = cons(primitiveProcedure(valueSub), l);
     l = cons(primitiveProcedure(valueMul), l);
     l = cons(primitiveProcedure(valueDiv), l);
+    l = cons(primitiveProcedure(valueEqual), l);
     l = cons(primitiveProcedure(valueDisplay), l);
     return l;
 }

Modified: tuscany/cpp/sca/modules/eval/read.hpp
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/modules/eval/read.hpp?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/modules/eval/read.hpp (original)
+++ tuscany/cpp/sca/modules/eval/read.hpp Sat Oct  3 21:50:33 2009
@@ -61,7 +61,7 @@
 }
 
 const bool isDigit(const char ch) {
-    return isdigit(ch);
+    return isdigit(ch) || ch == '.';
 }
 
 const bool isLeftParenthesis(const value& token) {

Modified: tuscany/cpp/sca/samples/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/samples/Makefile.am?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/Makefile.am (original)
+++ tuscany/cpp/sca/samples/Makefile.am Sat Oct  3 21:50:33 2009
@@ -16,13 +16,13 @@
 #  under the License.
 
 if WANT_ALL_SAMPLES
-  CPP_SAMPLES = CppCalculator CppBigBank store store2
+  CPP_SAMPLES = CppCalculator CppBigBank
   PYTHON_SAMPLES = PythonCalculator PythonWeatherForecast RestCustomer AlertAggregator
   RUBY_SAMPLES = RubyCalculator RubyBigBank HttpdBigBank RestCalculator
   PYTHON_RUBY_SAMPLES = RestYahoo
 else
 if WANT_CPP_SAMPLES
-    CPP_SAMPLES = CppCalculator CppBigBank store
+    CPP_SAMPLES = CppCalculator CppBigBank
 endif
 if WANT_PYTHON_SAMPLES
     PYTHON_SAMPLES = PythonCalculator PythonWeatherForecast RestCustomer AlertAggregator

Modified: tuscany/cpp/sca/samples/configure.ac
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/samples/configure.ac?rev=821425&r1=821424&r2=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/configure.ac (original)
+++ tuscany/cpp/sca/samples/configure.ac Sat Oct  3 21:50:33 2009
@@ -162,8 +162,6 @@
 AM_CONDITIONAL([WANT_RUBY_SAMPLES], [test x$want_ruby_samples = xtrue])
 
 AC_CONFIG_FILES([Makefile  
-                 store/Makefile
-                 store2/Makefile
                  AlertAggregator/Makefile
                  AlertAggregator/sample.alerter/Makefile
                  AlertAggregator/sample.display/Makefile

Copied: tuscany/cpp/sca/test/Makefile.am (from r819394, tuscany/cpp/sca/samples/store/Makefile.am)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/Makefile.am?p2=tuscany/cpp/sca/test/Makefile.am&p1=tuscany/cpp/sca/samples/store/Makefile.am&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store/Makefile.am (original)
+++ tuscany/cpp/sca/test/Makefile.am Sat Oct  3 21:50:33 2009
@@ -15,13 +15,5 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-store_PROGRAMS = store-test
-storedir=$(prefix)/store/deploy
+SUBDIRS = store-object store-function store-script
 
-store_test_SOURCES = store-test.cpp
-
-INCLUDES = -I. -I${TUSCANY_SCACPP}/include
-store_test_LDADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca -L${LIBXML2_LIB} -lxml2
-	
-EXTRA_DIST = *.composite
-store_DATA = *.composite

Copied: tuscany/cpp/sca/test/store-function/Makefile.am (from r819394, tuscany/cpp/sca/samples/store/Makefile.am)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/Makefile.am?p2=tuscany/cpp/sca/test/store-function/Makefile.am&p1=tuscany/cpp/sca/samples/store/Makefile.am&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store/Makefile.am (original)
+++ tuscany/cpp/sca/test/store-function/Makefile.am Sat Oct  3 21:50:33 2009
@@ -15,13 +15,14 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-store_PROGRAMS = store-test
-storedir=$(prefix)/store/deploy
+store_function_PROGRAMS = store-function-test
+store_functiondir=$(prefix)/test/store-function/deploy
 
-store_test_SOURCES = store-test.cpp
+INCLUDES = -I. -I$(top_builddir)/kernel -I${LIBXML2_INCLUDE}
 
-INCLUDES = -I. -I${TUSCANY_SCACPP}/include
-store_test_LDADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca -L${LIBXML2_LIB} -lxml2
+store_function_test_SOURCES = store-function-test.cpp
+store_function_test_LDADD = -L${LIBXML2_LIB} -lxml2 -lpthread
 	
 EXTRA_DIST = *.composite
-store_DATA = *.composite
+store_function_DATA = *.composite
+

Copied: tuscany/cpp/sca/test/store-function/cart.hpp (from r819394, tuscany/cpp/sca/samples/store2/cart.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/cart.hpp?p2=tuscany/cpp/sca/test/store-function/cart.hpp&p1=tuscany/cpp/sca/samples/store2/cart.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store2/cart.hpp (original)
+++ tuscany/cpp/sca/test/store-function/cart.hpp Sat Oct  3 21:50:33 2009
@@ -55,14 +55,14 @@
 }
 
 const tuscany::value shoppingCart_service(const tuscany::list<tuscany::value>& args) {
-    if (car(args) == "getAll")
-        return shoppingCart_getAll();
-    if (car(args) == "post")
-        return shoppingCart_post(cadr(args));
-    if (car(args) == "deleteAll")
-        return shoppingCart_deleteAll();
-    if (car(args) == "getTotal")
-        return shoppingCart_getTotal();
+    if (car(args) == tuscany::value("getAll"))
+        return tuscany::value(shoppingCart_getAll());
+    if (car(args) == tuscany::value("post"))
+        return tuscany::value(shoppingCart_post(cadr(args)));
+    if (car(args) == tuscany::value("deleteAll"))
+        return tuscany::value(shoppingCart_deleteAll());
+    if (car(args) == tuscany::value("getTotal"))
+        return tuscany::value(shoppingCart_getTotal());
     return tuscany::value();
 }
 

Copied: tuscany/cpp/sca/test/store-function/catalog.hpp (from r819394, tuscany/cpp/sca/samples/store2/catalog.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/catalog.hpp?p2=tuscany/cpp/sca/test/store-function/catalog.hpp&p1=tuscany/cpp/sca/samples/store2/catalog.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store2/catalog.hpp (original)
+++ tuscany/cpp/sca/test/store-function/catalog.hpp Sat Oct  3 21:50:33 2009
@@ -45,8 +45,8 @@
 }
 
 const tuscany::value catalog_service(const service& currencyConverter, const tuscany::list<tuscany::value>& args) {
-    if (car(args) == "get")
-        return catalog_get(currencyConverter);
+    if (car(args) == tuscany::value("get"))
+        return tuscany::value(catalog_get(currencyConverter));
     return tuscany::value();
 }
 

Copied: tuscany/cpp/sca/test/store-function/catalogs.composite (from r819394, tuscany/cpp/sca/samples/store/catalogs.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/catalogs.composite?p2=tuscany/cpp/sca/test/store-function/catalogs.composite&p1=tuscany/cpp/sca/samples/store/catalogs.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/currency-composite.hpp (from r819394, tuscany/cpp/sca/samples/store2/currency-composite.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/currency-composite.hpp?p2=tuscany/cpp/sca/test/store-function/currency-composite.hpp&p1=tuscany/cpp/sca/samples/store2/currency-composite.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/currency.composite (from r819394, tuscany/cpp/sca/samples/store/currency.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/currency.composite?p2=tuscany/cpp/sca/test/store-function/currency.composite&p1=tuscany/cpp/sca/samples/store/currency.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/currency.hpp (from r819394, tuscany/cpp/sca/samples/store2/currency.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/currency.hpp?p2=tuscany/cpp/sca/test/store-function/currency.hpp&p1=tuscany/cpp/sca/samples/store2/currency.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store2/currency.hpp (original)
+++ tuscany/cpp/sca/test/store-function/currency.hpp Sat Oct  3 21:50:33 2009
@@ -47,10 +47,10 @@
 }
 
 const tuscany::value currencyConverter_service(const tuscany::list<tuscany::value>& args) {
-    if (car(args) == "convert")
-        return currencyConverter_convert(cadr(args), car(cdr(cdr(args))), car(cdr(cdr(cdr(args)))));
-    if (car(args) == "getSymbol")
-        return currencyConverter_getSymbol(cadr(args));
+    if (car(args) == tuscany::value("convert"))
+        return tuscany::value(currencyConverter_convert(cadr(args), car(cdr(cdr(args))), car(cdr(cdr(cdr(args))))));
+    if (car(args) == tuscany::value("getSymbol"))
+        return tuscany::value(currencyConverter_getSymbol(cadr(args)));
     return tuscany::value();
 }
 

Copied: tuscany/cpp/sca/test/store-function/item.hpp (from r819394, tuscany/cpp/sca/samples/store2/item.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/item.hpp?p2=tuscany/cpp/sca/test/store-function/item.hpp&p1=tuscany/cpp/sca/samples/store2/item.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/service.hpp (from r819394, tuscany/cpp/sca/samples/store2/service.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/service.hpp?p2=tuscany/cpp/sca/test/store-function/service.hpp&p1=tuscany/cpp/sca/samples/store2/service.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/store-composite.hpp (from r819394, tuscany/cpp/sca/samples/store2/store-composite.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/store-composite.hpp?p2=tuscany/cpp/sca/test/store-function/store-composite.hpp&p1=tuscany/cpp/sca/samples/store2/store-composite.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/store-function-test.cpp (from r819394, tuscany/cpp/sca/samples/store2/store2-test.cpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/store-function-test.cpp?p2=tuscany/cpp/sca/test/store-function/store-function-test.cpp&p1=tuscany/cpp/sca/samples/store2/store2-test.cpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/store-solution.hpp (from r819394, tuscany/cpp/sca/samples/store2/store-solution.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/store-solution.hpp?p2=tuscany/cpp/sca/test/store-function/store-solution.hpp&p1=tuscany/cpp/sca/samples/store2/store-solution.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-function/store-ui.hpp (from r819394, tuscany/cpp/sca/samples/store2/store-ui.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/store-ui.hpp?p2=tuscany/cpp/sca/test/store-function/store-ui.hpp&p1=tuscany/cpp/sca/samples/store2/store-ui.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store2/store-ui.hpp (original)
+++ tuscany/cpp/sca/test/store-function/store-ui.hpp Sat Oct  3 21:50:33 2009
@@ -49,14 +49,14 @@
 }
 
 const tuscany::value storeUI_service(const service& catalog, const service& cart, const tuscany::list<tuscany::value>& args) {
-    if (car(args) == "getCatalog")
-        return storeUI_getCatalog(catalog);
-    if (car(args) == "getCart")
-        return storeUI_getCart(cart);
-    if (car(args) == "getTotal")
-        return storeUI_getTotal(cart);
-    if (car(args) == "post")
-        return storeUI_post(cart, cadr(args));
+    if (car(args) == tuscany::value("getCatalog"))
+        return tuscany::value(storeUI_getCatalog(catalog));
+    if (car(args) == tuscany::value("getCart"))
+        return tuscany::value(storeUI_getCart(cart));
+    if (car(args) == tuscany::value("getTotal"))
+        return tuscany::value(storeUI_getTotal(cart));
+    if (car(args) == tuscany::value("post"))
+        return tuscany::value(storeUI_post(cart, cadr(args)));
     return tuscany::value();
 }
 

Copied: tuscany/cpp/sca/test/store-function/store.composite (from r819394, tuscany/cpp/sca/samples/store/store.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-function/store.composite?p2=tuscany/cpp/sca/test/store-function/store.composite&p1=tuscany/cpp/sca/samples/store/store.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/Makefile.am (from r819394, tuscany/cpp/sca/samples/store2/Makefile.am)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/Makefile.am?p2=tuscany/cpp/sca/test/store-object/Makefile.am&p1=tuscany/cpp/sca/samples/store2/Makefile.am&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store2/Makefile.am (original)
+++ tuscany/cpp/sca/test/store-object/Makefile.am Sat Oct  3 21:50:33 2009
@@ -15,13 +15,14 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-store2_PROGRAMS = store2-test
-store2dir=$(prefix)/store2/deploy
+store_object_PROGRAMS = store-object-test
+store_objectdir=$(prefix)/test/store-object/deploy
 
-store2_test_SOURCES = store2-test.cpp
+INCLUDES = -I. -I$(top_builddir)/kernel -I${LIBXML2_INCLUDE}
 
-INCLUDES = -I. -I${TUSCANY_SCACPP}/include
-store2_test_LDADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca -L${LIBXML2_LIB} -lxml2
+store_object_test_SOURCES = store-object-test.cpp
+store_object_test_LDADD = -L${LIBXML2_LIB} -lxml2 -lpthread
 	
 EXTRA_DIST = *.composite
-store2_DATA = *.composite
+store_object_DATA = *.composite
+

Copied: tuscany/cpp/sca/test/store-object/cart.hpp (from r819394, tuscany/cpp/sca/samples/store/cart.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/cart.hpp?p2=tuscany/cpp/sca/test/store-object/cart.hpp&p1=tuscany/cpp/sca/samples/store/cart.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/catalog.hpp (from r819394, tuscany/cpp/sca/samples/store/catalog.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/catalog.hpp?p2=tuscany/cpp/sca/test/store-object/catalog.hpp&p1=tuscany/cpp/sca/samples/store/catalog.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/catalogs.composite (from r819394, tuscany/cpp/sca/samples/store2/catalogs.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/catalogs.composite?p2=tuscany/cpp/sca/test/store-object/catalogs.composite&p1=tuscany/cpp/sca/samples/store2/catalogs.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/currency-composite.hpp (from r819394, tuscany/cpp/sca/samples/store/currency-composite.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/currency-composite.hpp?p2=tuscany/cpp/sca/test/store-object/currency-composite.hpp&p1=tuscany/cpp/sca/samples/store/currency-composite.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/currency.composite (from r819394, tuscany/cpp/sca/samples/store2/currency.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/currency.composite?p2=tuscany/cpp/sca/test/store-object/currency.composite&p1=tuscany/cpp/sca/samples/store2/currency.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/currency.hpp (from r819394, tuscany/cpp/sca/samples/store/currency.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/currency.hpp?p2=tuscany/cpp/sca/test/store-object/currency.hpp&p1=tuscany/cpp/sca/samples/store/currency.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/item.hpp (from r819394, tuscany/cpp/sca/samples/store/item.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/item.hpp?p2=tuscany/cpp/sca/test/store-object/item.hpp&p1=tuscany/cpp/sca/samples/store/item.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/store-composite.hpp (from r819394, tuscany/cpp/sca/samples/store/store-composite.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/store-composite.hpp?p2=tuscany/cpp/sca/test/store-object/store-composite.hpp&p1=tuscany/cpp/sca/samples/store/store-composite.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/store-object-test.cpp (from r819394, tuscany/cpp/sca/samples/store/store-test.cpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/store-object-test.cpp?p2=tuscany/cpp/sca/test/store-object/store-object-test.cpp&p1=tuscany/cpp/sca/samples/store/store-test.cpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/store-solution.hpp (from r819394, tuscany/cpp/sca/samples/store/store-solution.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/store-solution.hpp?p2=tuscany/cpp/sca/test/store-object/store-solution.hpp&p1=tuscany/cpp/sca/samples/store/store-solution.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/store-ui.hpp (from r819394, tuscany/cpp/sca/samples/store/store-ui.hpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/store-ui.hpp?p2=tuscany/cpp/sca/test/store-object/store-ui.hpp&p1=tuscany/cpp/sca/samples/store/store-ui.hpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-object/store.composite (from r819394, tuscany/cpp/sca/samples/store2/store.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-object/store.composite?p2=tuscany/cpp/sca/test/store-object/store.composite&p1=tuscany/cpp/sca/samples/store2/store.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-script/Makefile.am (from r819394, tuscany/cpp/sca/samples/store/Makefile.am)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-script/Makefile.am?p2=tuscany/cpp/sca/test/store-script/Makefile.am&p1=tuscany/cpp/sca/samples/store/Makefile.am&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store/Makefile.am (original)
+++ tuscany/cpp/sca/test/store-script/Makefile.am Sat Oct  3 21:50:33 2009
@@ -15,13 +15,14 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-store_PROGRAMS = store-test
-storedir=$(prefix)/store/deploy
+store_script_PROGRAMS = store-script-test
+store_scriptdir=$(prefix)/test/store-script/deploy
 
-store_test_SOURCES = store-test.cpp
+INCLUDES = -I. -I$(top_builddir)/kernel -I$(top_builddir)/modules/eval -I${LIBXML2_INCLUDE}
 
-INCLUDES = -I. -I${TUSCANY_SCACPP}/include
-store_test_LDADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca -L${LIBXML2_LIB} -lxml2
+store_script_test_SOURCES = store-script-test.cpp
+store_script_test_LDADD = -L${LIBXML2_LIB} -lxml2 -lpthread
 	
 EXTRA_DIST = *.composite
-store_DATA = *.composite
+store_script_DATA = *.composite
+

Copied: tuscany/cpp/sca/test/store-script/catalogs.composite (from r819394, tuscany/cpp/sca/samples/store/catalogs.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-script/catalogs.composite?p2=tuscany/cpp/sca/test/store-script/catalogs.composite&p1=tuscany/cpp/sca/samples/store/catalogs.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-script/currency.composite (from r819394, tuscany/cpp/sca/samples/store/currency.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-script/currency.composite?p2=tuscany/cpp/sca/test/store-script/currency.composite&p1=tuscany/cpp/sca/samples/store/currency.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)

Copied: tuscany/cpp/sca/test/store-script/store-script-test.cpp (from r819394, tuscany/cpp/sca/samples/store2/store2-test.cpp)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-script/store-script-test.cpp?p2=tuscany/cpp/sca/test/store-script/store-script-test.cpp&p1=tuscany/cpp/sca/samples/store2/store2-test.cpp&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
--- tuscany/cpp/sca/samples/store2/store2-test.cpp (original)
+++ tuscany/cpp/sca/test/store-script/store-script-test.cpp Sat Oct  3 21:50:33 2009
@@ -25,15 +25,22 @@
 
 #include <assert.h>
 #include <iostream>
+#include <fstream>
 #include <string>
-#include "store-solution.hpp"
+#include "driver.hpp"
 
 namespace store
 {
 
-bool testComponentAssembly() {
-    const service store(storeSolution_service);
-    assert(length((tuscany::list<tuscany::value>)store(makeList(tuscany::value("getCatalog")))) == 3);
+bool contains(const std::string& str, const std::string& pattern) {
+    return str.find(pattern) != str.npos;
+}
+
+bool testScript() {
+    std::ifstream is("store-script.scm", std::ios_base::in);
+    std::ostringstream os;
+    tuscany::evalDriverRun(is, os);
+    assert(contains(os.str(), "List::(List::(String::'apple', (String::'USD', (String::'$', (Number::2.99, ())))), ())"));
     return true;
 }
 
@@ -43,7 +50,8 @@
 
     std::cout << "Testing..." << std::endl;
 
-    store::testComponentAssembly();
+    store::testScript();
+
     std::cout << "OK" << std::endl;
 
     return 0;

Added: tuscany/cpp/sca/test/store-script/store-script.scm
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-script/store-script.scm?rev=821425&view=auto
==============================================================================
--- tuscany/cpp/sca/test/store-script/store-script.scm (added)
+++ tuscany/cpp/sca/test/store-script/store-script.scm Sat Oct  3 21:50:33 2009
@@ -0,0 +1,99 @@
+
+(display "Currency implementation")
+
+(define (currency_convert from to amount) 
+  (if (equal? to "EUR") (* amount 0.70) amount)
+)
+
+(define (currency_symbol currency) 
+  (if (equal? currency "EUR") "E" "$")
+)
+
+(define (currency_impl op args)
+  (cond
+    ((equal? op "convert") (apply currency_convert args))
+    ((equal? op "symbol") (apply currency_symbol args))
+  )
+)
+
+(display "Currency composite")
+
+(define (currency_service op . args) (currency_impl op args))
+
+(display "Catalog implementation")
+
+(define (catalog_get converter)
+  (define (convert price) (converter "convert" "USD" "USD" price))
+
+  (define code "USD")
+  (define symbol (converter "symbol" code))
+
+  (list (list "apple" code symbol (convert 2.99))
+    (list "orange" code symbol (convert 3.55))
+    (list "pear" code symbol (convert 1.55))
+   )
+)
+
+(define (catalog_impl converter op args)
+  (cond
+    ((equal? op "get") (apply catalog_get (cons converter args)))
+  )
+)
+
+(display "Catalog composite")
+
+(define (catalog_service op . args) (catalog_impl currency_service op args))
+
+(display "Cart implementation")
+
+(define (cart_post content item)
+  (cons item content)
+)
+
+(define (cart_getall content)
+  content
+)
+
+(define (cart_impl op args)
+  (cond
+    ((equal? op "post") (apply cart_post args))
+    ((equal? op "getall") (apply cart_getall args))
+  )
+)
+
+(display "Store UI implementation")
+
+(define (storeui_post cart content item)
+  (cart "post" content item)
+)
+
+(define (storeui_getcart cart content)
+  (cart "getall" content)
+)
+
+(define (storeui_getcatalog catalog)
+  (catalog "get")
+)
+
+(define (storeui_impl cart catalog op args)
+  (cond
+    ((equal? op "post") (apply storeui_post (cons cart args)))
+    ((equal? op "getall") (apply storeui_getcart (cons cart args)))
+    ((equal? op "getcatalog") (apply storeui_getcatalog (cons catalog args)))
+  )
+)
+
+(display "Store UI composite")
+
+(define (cart_service op . args) (cart_impl op args))
+
+(define (storeui_service op . args) (storeui_impl cart_service catalog_service op args))
+
+(display "Store UI test case")
+
+(define catalog (storeui_service "getcatalog"))
+(define empty (list))
+(define apple (car catalog))
+(define full (storeui_service "post" empty apple))
+(display (storeui_service "getall" full))
+

Copied: tuscany/cpp/sca/test/store-script/store.composite (from r819394, tuscany/cpp/sca/samples/store/store.composite)
URL: http://svn.apache.org/viewvc/tuscany/cpp/sca/test/store-script/store.composite?p2=tuscany/cpp/sca/test/store-script/store.composite&p1=tuscany/cpp/sca/samples/store/store.composite&r1=819394&r2=821425&rev=821425&view=diff
==============================================================================
    (empty)