Index: sources/test_regression/15042009/Makefile
===================================================================
--- sources/test_regression/15042009/Makefile	(revision 18)
+++ sources/test_regression/15042009/Makefile	(revision 18)
@@ -0,0 +1,59 @@
+include ../env.mk
+
+SYSTEM    = system.cpp
+EXE_SCASS = $(SYSTEM:.cpp=_systemcass.x)
+EXE_SC    = $(SYSTEM:.cpp=_systemc.x)
+EXE       = ${EXE_SCASS} ${EXE_SC}
+LOG       = $(SYSTEM:.cpp=.log)
+OBJECTS   = $(EXE:.x=.o)
+LINKS     = $(OBJECTS:.o=.cpp)
+
+.SECONDARY:
+
+main : $(EXE) 
+
+test : ${EXE_SCASS} ${EXE_SC}
+	@for i in ${EXE_SC} ; do \
+    echo Testing $$i... ; \
+    $$i || eval ${failcom} ; \
+  done
+	echo Testing system_systemcass.x ; system_systemcass.x || eval ${failcom} ; \
+	#
+
+%.gif : %.dot
+	dot -Tgif -o $*.gif $*.dot
+
+%_systemc.x : %_systemc.o $(SYSTEMC_LIB)
+	$(CXX) -o $@ $*_systemc.o $(LFLAGS_SYSTEMC) 2>&1 | $(CPPFILT)
+
+%_systemcass.x : %_systemcass.o  $(SYSTEMCASS_LIB)
+	$(CXX) -o $@ $*_systemcass.o $(LFLAGS_SYSTEMCASS) 2>&1 | $(CPPFILT)
+
+-include Makefile.deps
+
+%_systemc.cpp : %.cpp 
+	ln -s $*.cpp $*_systemc.cpp
+
+%_systemcass.cpp : %.cpp 
+	ln -s $*.cpp $*_systemcass.cpp
+
+%_systemc.o : %_systemc.cpp 
+	$(CXX) $(CFLAGS_SYSTEMC) -MM $*_systemc.cpp >> Makefile.deps
+	$(CXX) $(CFLAGS_SYSTEMC) -c $*_systemc.cpp -o $*_systemc.o
+
+%_systemcass.o : %_systemcass.cpp
+	$(CXX) $(CFLAGS_SYSTEMCASS) -MM $*_systemcass.cpp >> Makefile.deps
+	$(CXX) $(CFLAGS_SYSTEMCASS) -c $*_systemcass.cpp -o $*_systemcass.o
+
+clean :
+	rm -f Makefile.deps
+	-rm -f *.o gmon.out *~
+	-rm -f ${LOG}
+	-rm -f signal_order.txt module_order.dot signal_graph.dot
+	-rm -f module_order.gif signal_graph.gif
+	-rm -f $(EXE) $(OBJECTS) 
+	-for i in $(LINKS) ; do unlink $$i ; done 2> /dev/null
+	-rm -f core*
+	-rm -rf generated_by_systemcass
+	-rm -rf system_systemcass.x.vcd system_systemc.x.vcd
+	
Index: sources/test_regression/15042009/system.cpp
===================================================================
--- sources/test_regression/15042009/system.cpp	(revision 18)
+++ sources/test_regression/15042009/system.cpp	(revision 18)
@@ -0,0 +1,155 @@
+#include "systemc.h"
+#include <iostream>
+
+using namespace std;
+
+#define ASSERT(x) \
+  { errnum++; \
+    if (!(x)) \
+    { \
+    cerr << "ASSERT : " #x "\n"; \
+    exit (errnum); \
+    } \
+  }
+
+using namespace std;
+
+#define MASK 0x0000000FFFFFFFFF
+typedef sc_uint<36> data_type; 
+
+struct observer : sc_module
+{
+  sc_in_clk    clk;
+
+  sc_in<data_type>   i;
+
+  void f ()
+  {
+    cout << "0x" << hex << i.read() << endl;
+    data_type t = i.read();
+    if (t == 7)
+      cout << "(== 0x7)\n";
+    t <<= 1;
+    if (t == 14)
+      cout << "((t << 1) == 0xe)\n";
+    t += 1;
+    if (t == 15)
+      cout << "(((t << 1) + 1) == 0xf)\n";
+    t = t >> 1;
+    if (t == 7)
+      cout << "((((t << 1) + 1) >> 1) == 0x7)\n";
+  }
+
+  SC_HAS_PROCESS(observer);
+  observer(sc_module_name) : clk ("clk"),
+                             i   ("i")
+
+  {
+    SC_METHOD(f);
+    dont_initialize();
+    sensitive << clk.pos();
+#ifdef SYSTEMCASS_SPECIFIC
+#endif
+  }
+};
+
+struct generator : sc_module
+{
+  sc_in_clk    clk;
+
+  sc_out<data_type>   o;
+  sc_in<data_type>    i;
+
+  long long int t;
+
+  void f ()
+  {
+    t <<= 1;
+    t++;
+#if 0
+    cout << "0x" << hex << (MASK & t) << " ; ";
+#endif
+    o.write(t);
+  }
+
+  SC_HAS_PROCESS(generator);
+  generator(sc_module_name) : clk ("clk"),
+                              o   ("o")
+  {
+    t = 1;
+    SC_METHOD(f);
+    dont_initialize();
+    sensitive << clk.neg() << i;
+#ifdef SYSTEMCASS_SPECIFIC
+    o(i);
+#endif
+  }
+};
+
+struct top_level : sc_module
+{
+  sc_in_clk    clk;
+  
+  sc_out<data_type>    o;
+  sc_in <data_type>    i;
+//  sc_out<int>  io;
+//  sc_signal<int> s;
+//  sc_signal<int> s2;
+
+  generator g;
+  observer  obs1, obs2;
+  
+  SC_HAS_PROCESS(top_level);
+  top_level(sc_module_name) : g   ("generator"), 
+                              obs1("observer1"),
+                              obs2("observer2"),
+                              clk ("clk"),
+                              o   ("o"),
+                              i   ("i")/*,
+                              s   ("s")*/
+  {
+    g.clk    (clk);
+    obs1.clk (clk);
+    obs2.clk (clk);
+
+    g.i   (i);
+    g.o   (o);
+    obs1.i(o);
+    obs2.i(o);
+ 
+#ifdef SYSTEMCASS_SPECIFIC
+    o     (i); // wrong declaration that needs detection (no sc_method)
+#endif
+  }
+};
+
+int
+sc_main (int argc, char ** argv)
+{
+  int errnum = 0;
+  sc_clock             clk("top_clk");
+  sc_signal<data_type> out("top_out");
+  sc_signal<data_type> in ("top_in");
+
+  top_level t("top_level");
+
+  t.clk (clk);
+  t.o   (out);
+  t.i   (in);
+
+  /* initilization */
+  sc_initialize ();
+
+  /* simulation */
+  int i = 0;
+  while (i++ < 40)
+  {
+   sc_start (1);
+   ASSERT(out.read() == t.obs1.i.read())
+   ASSERT(out.read() == t.obs2.i.read())
+   ASSERT(out.read() == (t.g.t & MASK) )
+  }
+
+  return 0;
+}
+
Index: sources/test_regression/16122005/system.cpp
===================================================================
--- sources/test_regression/16122005/system.cpp	(revision 17)
+++ sources/test_regression/16122005/system.cpp	(revision 18)
@@ -3,4 +3,5 @@
 #include <fstream>
 #include <vector>
+#include <cstring> //strcmp
 
 #define ASSERT(x) { if (!(x)) { \
Index: sources/test_regression/17032005/system.cpp
===================================================================
--- sources/test_regression/17032005/system.cpp	(revision 17)
+++ sources/test_regression/17032005/system.cpp	(revision 18)
@@ -3,4 +3,5 @@
 #include <iostream>
 #include <fstream>
+#include <cstdlib> //exit
 
 #define ASSERT(x) \
Index: sources/test_regression/25032005/Makefile
===================================================================
--- sources/test_regression/25032005/Makefile	(revision 17)
+++ sources/test_regression/25032005/Makefile	(revision 18)
@@ -14,8 +14,5 @@
 	./system_systemc.x ; \
 	./system_systemcass.x --p --t || eval ${failcom} ; \
-	((tail --lines=+3 signal_graph.dot  | diff signal_graph_reference.dot -)\
-        || (tail -n +3 signal_graph.dot | diff signal_graph_reference2.dot -)) \
-        || eval ${failcom} ; \
-        
+	((tail --lines=+3 signal_graph.dot  | diff signal_graph_reference.dot -) || (tail -n +3 signal_graph.dot | diff signal_graph_reference2.dot -)) || eval ${failcom}
 	tail --lines=+3 process_order.dot | diff process_order_reference.dot -
 	diff signal_order_reference.txt signal_order.txt
Index: sources/test_regression/28102005/system.cpp
===================================================================
--- sources/test_regression/28102005/system.cpp	(revision 17)
+++ sources/test_regression/28102005/system.cpp	(revision 18)
@@ -1,5 +1,5 @@
 #include "systemc.h"
 #include <iostream>
-#include <string>
+#include <cstring>
 
 #define ASSERT(x) \
Index: sources/test_regression/29032005/Makefile
===================================================================
--- sources/test_regression/29032005/Makefile	(revision 17)
+++ sources/test_regression/29032005/Makefile	(revision 18)
@@ -16,11 +16,14 @@
   (tail -n +3 port_graph.dot | diff port_graph_reference.dot -) || eval ${failcom} ; \
   ((tail -n +3 signal_graph.dot | diff signal_graph_reference.dot -) \
-  || (tail -n +3 signal_graph.dot | diff signal_graph_reference2.dot -)) \
+  || (tail -n +3 signal_graph.dot | diff signal_graph_reference2.dot -) \
+  || (tail -n +3 signal_graph.dot | diff signal_graph_reference3.dot -)) \
   || eval ${failcom} ; \
   ((tail -n +3 process_order.dot | diff process_order_reference.dot -) \
-  || (tail -n +3 process_order.dot | diff process_order_reference2.dot -)) \
+  || (tail -n +3 process_order.dot | diff process_order_reference2.dot -)  \
+  || (tail -n +3 process_order.dot | diff process_order_reference3.dot -)) \
   || eval ${failcom} ; \
   (diff signal_order_reference.txt signal_order.txt) \
   || (diff signal_order_reference2.txt signal_order.txt) \
+  || (diff signal_order_reference3.txt signal_order.txt) \
   || eval ${failcom} ; \
   done
Index: sources/test_regression/29032005/signal_order_reference3.txt
===================================================================
--- sources/test_regression/29032005/signal_order_reference3.txt	(revision 18)
+++ sources/test_regression/29032005/signal_order_reference3.txt	(revision 18)
@@ -0,0 +1,15 @@
+s04 
+s03 
+s02 
+s08 
+s07 
+s06 
+s01 
+s05 
+s15 
+s11 
+s10 
+s09 
+s13 
+s12 
+s14 
Index: sources/test_regression/Makefile
===================================================================
--- sources/test_regression/Makefile	(revision 17)
+++ sources/test_regression/Makefile	(revision 18)
@@ -45,4 +45,5 @@
 # 16022007  : check --nobanner option
 # 23032007  : check multiple execution on the same computer
+# 15042009  : check sc_uint operators (==, =, <<=, +=)
 
 ## Uncomment the following variable if you want to compile and run the 
@@ -81,4 +82,5 @@
       20122006 \
       16022007 \
+      15042009 \
       ${SOCVIEW_TEST} \
 #
Index: sources/test_regression/env.mk
===================================================================
--- sources/test_regression/env.mk	(revision 17)
+++ sources/test_regression/env.mk	(revision 18)
@@ -63,7 +63,7 @@
 $(error SYSTEMCASS is not defined.)
 endif
-ifndef SOCVIEW
-$(error SOCVIEW is not defined.)
-endif
+#ifndef SOCVIEW
+#$(error SOCVIEW is not defined. This environment variable is optional.)
+#endif
 
 failcom   = 'exit 1'
