OSDN Git Service

[REFACTOR]test abc
authormzp <mzpppp@gmail.com>
Sun, 9 Nov 2008 13:45:25 +0000 (22:45 +0900)
committermzp <mzpppp@gmail.com>
Sun, 9 Nov 2008 13:45:25 +0000 (22:45 +0900)
src/codegen.ml
test/test_abc.ml
test/test_xmlserialize.ml [deleted file]
util/instruction.txt

index 7f1d80c..5c5e9e4 100644 (file)
@@ -153,6 +153,7 @@ let builtin = ["+",(Add_i,2);
               "*.",(Multiply,2);
               "/",(Divide,2);
               "=",(Equals,2);
+              "remainder",(Modulo,2);
               ">",(GreaterThan,2);
               ">=",(GreaterEquals,2);
               "<",(LessThan,2);
index acb17fe..7f24ae5 100644 (file)
@@ -1,5 +1,6 @@
 open Base
 open Abc
+open OUnit
 open Util
 open Bytes
 
@@ -28,133 +29,156 @@ let body =
 let script =
   {init=0x7F; trait_s=[]}
 
-test script =
-  assert_equal [u30 0x7F; u30 0] @@ of_script script
-
-test trait =
-  assert_equal ([u30 1;u8 0; u30 1; u30 2; u30 3; u8 4; ]) (of_trait {t_name=1; data=SlotTrait (1,2,3,4)});
-  assert_equal ([u30 1;u8 0; u30 1; u30 2; u30 0]) (of_trait {t_name=1; data=SlotTrait (1,2,0,4)});
-  assert_equal ([u30 1;u8 1; u30 1; u30 2]) (of_trait {t_name=1; data=MethodTrait (1,2)});
-  assert_equal ([u30 1;u8 2; u30 1; u30 2]) (of_trait {t_name=1; data=GetterTrait (1,2)});
-  assert_equal ([u30 1;u8 3; u30 1; u30 2]) (of_trait {t_name=1; data=SetterTrait (1,2)});
-  assert_equal ([u30 1;u8 4; u30 1; u30 2]) (of_trait {t_name=1; data=ClassTrait (1,2)});
-  assert_equal ([u30 1;u8 5; u30 1; u30 2]) (of_trait {t_name=1; data=FunctionTrait (1,2)});
-  assert_equal ([u30 1;u8 6; u30 1; u30 2; u30 3; u8 4]) (of_trait {t_name=1; data=ConstTrait (1,2,3,4)});
-  assert_equal ([u30 1;u8 6; u30 1; u30 2; u30 0;]) (of_trait {t_name=1; data=ConstTrait (1,2,0,4)});
-
-test method_info =
-  assert_equal [u30 0; u30 1; u30 2; u8 3] @@ 
-    of_method_info info
-
-test method_body =
-  let expect = [u30 1;
-               u30 2;
-               u30 3;
-               u30 4;
-               u30 5;
-               block [u8 1; u8 2; u8 3;s24 1];
-               u30 0;
-               u30 0] in
-  assert_equal expect @@ of_method_body body
-
-test cpool =
-  assert_equal [u30 1;(* int *)
-               u30 1;(* uint *)
-               u30 1;(* double*)
-               u30 1;(* string *)
-               u30 1;(* ns *)
-               u30 1;(* ns_set *)
-               u30 1 (* mname *)] @@ of_cpool empty_cpool;
-  assert_equal [u30 3; s32 ~-1; s32 42; (* int *)
-               u30 2; u32 42; (* uint *)
-               u30 1;(* double*)
-               u30 2; u30 3; u8 0x61; u8 0x62; u8 0x63; (* string *)
-               u30 2; u8 0x08; u30 1; (* ns *)
-               u30 2; u30 2; u30 1; u30 2; (* ns_set *)
-               u30 3; u8 0x07; u30 0; u30 1; u8 0x09; u30 2; u30 3; (* mname *)] @@ 
-    of_cpool cpool
-
-test of_class =
-  assert_equal [u30 10; u30 0;] @@ of_class {cinit=10; trait_c=[]}
-
-test of_instance =
-  let abc = [
-    u30 1; (* name *)
-    u30 2; (* super name *)
-    u8  3; (* flags *)
-    u30 4; (* interface count *)
-    u30 1; u30 2; u30 3; u30 4; (* interface *)
-    u30 5; (* iinit *)
-    u30 0; (* traits count *) ] in
-  let instance = {
-    name_i=1;
-    super_name=2;
-    flags_i=[Sealed;Final];
-    interface=[1;2;3;4];
-    iinit=5;
-    trait_i=[]} in
-    assert_equal abc (of_instance instance)
-
-test of_instance_protected =
-  let abc = [
-    u30 1; (* name *)
-    u30 2; (* super name *)
-    u8  8; (* flags *)
-    u30 1; (* protected ns *)
-    u30 4; (* interface count *)
-    u30 1; u30 2; u30 3; u30 4; (* interface *)
-    u30 5; (* iinit *)
-    u30 0; (* traits count *) ] in
-  let instance = {
-    name_i=1;
-    super_name=2;
-    flags_i=[ProtectedNs 1];
-    interface=[1;2;3;4];
-    iinit=5;
-    trait_i=[]} in
-    assert_equal abc (of_instance instance)
-
-test of_abc =
-  let abc =
-    {cpool=empty_cpool; method_info=[]; metadata=[]; classes=[]; instances=[]; 
-     script=[]; method_body=[]} in
-    assert_equal [
-      (* version *)
-      u16 16; u16 46;
-      (* cpool *)
-      u30 1; u30 1; u30 1; u30 1; u30 1; u30 1;        u30 1;
-      u30 0; (* info *)
-      u30 0; (* meta *)
-      u30 0; (* class *)
-      u30 0; (* script *)
-      u30 0; (* body *)
-    ] @@ to_bytes abc
-
-test complex_abc = 
-  let abc =
-    {cpool=empty_cpool; method_info=[]; metadata=[]; classes=[]; instances=[]; 
-     script=[]; method_body=[]} in
-  let cpool =
-    {empty_cpool with string=["foo"]; } in
-  let expect = [u30 1;
-               u30 2;
-               u30 3;
-               u30 4;
-               u30 5;
-               block [u8 1; u8 2; u8 3;s24 1];
-               u30 0;
-               u30 0] in
-    assert_equal (List.concat [
-      (* version *)
-      [ u16 16; u16 46];
-      (* cpool *)
-      of_cpool cpool;
-      [u30 1]; of_method_info info; (* info *)
-      [u30 0;  (* meta *) u30 0; (* class *)];
-      [u30 1]; of_script script; (* script *)
-      [u30 1]; expect; (* body *)
-    ]) @@ to_bytes {abc with 
-                     cpool=cpool;
-                     method_info=[info];
-                     method_body=[body];
-                     script=[script]}
+let _ =
+  ("ABC Module unittest" >:::
+     ["of_script test" >::
+       (fun () ->
+          assert_equal [u30 0x7F; u30 0] @@ of_script script);
+      "of_trait test" >::
+       (fun () ->
+          assert_equal
+            [u30 1;u8 0; u30 1; u30 2; u30 3; u8 4; ] @@
+            of_trait {t_name=1; data=SlotTrait (1,2,3,4)};
+          assert_equal 
+            [u30 1;u8 0; u30 1; u30 2; u30 0] @@ 
+            of_trait {t_name=1; data=SlotTrait (1,2,0,4)};
+          assert_equal 
+            [u30 1;u8 1; u30 1; u30 2] @@ 
+            of_trait {t_name=1; data=MethodTrait (1,2)};
+          assert_equal
+            [u30 1;u8 2; u30 1; u30 2] @@
+            of_trait {t_name=1; data=GetterTrait (1,2)};
+          assert_equal
+            [u30 1;u8 3; u30 1; u30 2] @@
+            of_trait {t_name=1; data=SetterTrait (1,2)};
+          assert_equal
+            [u30 1;u8 4; u30 1; u30 2] @@
+            of_trait {t_name=1; data=ClassTrait (1,2)};
+          assert_equal 
+            [u30 1;u8 5; u30 1; u30 2] @@
+            of_trait {t_name=1; data=FunctionTrait (1,2)};
+          assert_equal 
+            [u30 1;u8 6; u30 1; u30 2; u30 3; u8 4] @@
+            of_trait {t_name=1; data=ConstTrait (1,2,3,4)};
+          assert_equal 
+            [u30 1;u8 6; u30 1; u30 2; u30 0] @@
+            of_trait {t_name=1; data=ConstTrait (1,2,0,4)});
+      "of_method_info test" >::
+       (fun () ->
+          assert_equal
+            [u30 0; u30 1; u30 2; u8 3] @@ 
+            of_method_info info);
+      "of_method_body test" >::
+       (fun () ->
+          assert_equal [u30 1;
+                        u30 2;
+                        u30 3;
+                        u30 4;
+                        u30 5;
+                        block [u8 1; u8 2; u8 3;s24 1];
+                        u30 0;
+                        u30 0] @@
+            of_method_body body);
+      "of_cpool test" >::
+       (fun () ->
+          assert_equal 
+            [u30 1;(* int    *)
+             u30 1;(* uint   *)
+             u30 1;(* double *)
+             u30 1;(* string *)
+             u30 1;(* ns     *)
+             u30 1;(* ns_set *)
+             u30 1 (* mname  *)] @@ 
+            of_cpool empty_cpool;
+          assert_equal 
+            [u30 3; s32 ~-1; s32 42;                  (* int    *)
+             u30 2; u32 42;                           (* uint   *)
+             u30 1;                                   (* double *)
+             u30 2; u30 3; u8 0x61; u8 0x62; u8 0x63; (* string *)
+             u30 2; u8 0x08; u30 1;                   (* ns     *)
+             u30 2; u30 2; u30 1; u30 2;              (* ns_set *)
+             u30 3; u8 0x07; u30 0; u30 1; 
+                    u8 0x09; u30 2; u30 3;            (* mname *)] @@ 
+            of_cpool cpool);
+      "of_class test" >::
+       (fun () ->
+          assert_equal [u30 10; u30 0] @@ 
+            of_class {cinit=10; trait_c=[]});
+      "of_instance test" >::
+       (fun () ->
+          assert_equal [u30 1; (* name *)
+                        u30 2; (* super name *)
+                        u8  3; (* flags *)
+                        u30 4; (* interface count *)
+                        u30 1; u30 2; u30 3; u30 4; (* interface *)
+                        u30 5; (* iinit *)
+                        u30 0; (* traits count *) ] @@
+            of_instance { 
+              name_i=1;
+              super_name=2;
+              flags_i=[Sealed;Final];
+              interface=[1;2;3;4];
+              iinit=5;
+              trait_i=[]});
+      "of_instance protected ns" >::
+       (fun () ->
+          assert_equal [u30 1; (* name *)
+                        u30 2; (* super name *)
+                        u8  8; (* flags *)
+                        u30 1; (* protected ns *)
+                        u30 4; (* interface count *)
+                        u30 1; u30 2; u30 3; u30 4; (* interface *)
+                        u30 5; (* iinit *)
+                        u30 0; (* traits count *) ] @@
+            of_instance {
+              name_i=1;
+              super_name=2;
+              flags_i=[ProtectedNs 1];
+              interface=[1;2;3;4];
+              iinit=5;
+              trait_i=[]});
+      "spimle abc" >::
+       (fun () ->
+          assert_equal [u16 16; u16 46;(* version *)
+                        u30 1; u30 1; u30 1; u30 1; u30 1; u30 1; u30 1;
+                        (* cpool *)
+                        u30 0; (* info *)
+                        u30 0; (* meta *)
+                        u30 0; (* class *)
+                        u30 0; (* script *)
+                        u30 0; (* body *)
+                       ] @@ 
+            to_bytes {
+              cpool       = empty_cpool; 
+              method_info = []; 
+              metadata    = []; 
+              classes     = [];
+              instances   = [];
+              script      = [];
+              method_body = []});
+      "complex abc" >::
+       (fun () ->
+          assert_equal (List.concat [
+            (* version *) [ u16 16; u16 46]; 
+            (* cpool   *) of_cpool {empty_cpool with string=["foo"] }; 
+            (* info    *) [ u30 1]; of_method_info info;
+            (* meta    *) [u30 0];
+            (* class   *) [u30 0];
+            (* script  *) [u30 1]; of_script script; 
+            (* body    *) [u30 1]; [u30 1;
+                                    u30 2;
+                                    u30 3;
+                                    u30 4;
+                                    u30 5;
+                                    block [u8 1; u8 2; u8 3;s24 1];
+                                    u30 0;
+                                    u30 0] ]) @@
+            Abc.to_bytes {
+              cpool       = {empty_cpool with string=["foo"] } ;
+              method_info = [info];
+              metadata    = [];
+              classes     = []; 
+              instances   = []; 
+              script      = [script];
+              method_body = [body]}) 
+     ] ) +> run_test_tt
diff --git a/test/test_xmlserialize.ml b/test/test_xmlserialize.ml
deleted file mode 100644 (file)
index e2ddb91..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-open Base
-open Xml
-open XmlSerialize
-
-let assert_equal lhs rhs =
-  OUnit.assert_equal ~printer:Xml.to_string_fmt lhs rhs;;
-
-let u30 n =
-  Element ("U30",["value",n],[])
-
-let u30i =
-  u30 $ string_of_int
-
-let string2 n =
-  Element ("String2",["value",n],[])
-
-test empty_cpool =
-    assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[]);
-                 Element ("uints",[],[]);
-                 Element ("doubles",[],[]);
-                 Element ("strings",[],[]);
-                 Element ("namespaces",[],[]);
-                 Element ("namespaceSets",[],[]);
-                 Element ("multinames",[],[])])) @@
-      of_cpool Abc.empty_cpool
-
-test int =
-  assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[u30i 1;u30i 2;u30i 3]);
-                 Element ("uints",[],[]);
-                 Element ("doubles",[],[]);
-                 Element ("strings",[],[]);
-                 Element ("namespaces",[],[]);
-                 Element ("namespaceSets",[],[]);
-                 Element ("multinames",[],[])])) @@
-    of_cpool {Abc.empty_cpool  with Abc.int = [1;2;3] }
-
-test uint =
-    assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[]);
-                 Element ("uints",[],[u30i 4;u30i 5;u30i 6]);
-                 Element ("doubles",[],[]);
-                 Element ("strings",[],[]);
-                 Element ("namespaces",[],[]);
-                 Element ("namespaceSets",[],[]);
-                 Element ("multinames",[],[])]))
-      (of_cpool { Abc.empty_cpool with Abc.uint = [4;5;6] })
-
-test doubles =
-    assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[]);
-                 Element ("uints",[],[]);
-                 Element ("doubles",[],List.map (u30 $ string_of_float) [7.;8.;9.]);
-                 Element ("strings",[],[]);
-                 Element ("namespaces",[],[]);
-                 Element ("namespaceSets",[],[]);
-                 Element ("multinames",[],[]);])) @@
-      of_cpool {
-       Abc.empty_cpool with
-         Abc.double = [7.;8.;9.];
-      }
-
-test strings = 
-    assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[]);
-                 Element ("uints",[],[]);
-                 Element ("doubles",[],[]);
-                 Element ("strings",[],List.map string2 ["foo";"bar";"baz"]);
-                 Element ("namespaces",[],[]);
-                 Element ("namespaceSets",[],[]);
-                 Element ("multinames",[],[]);])) @@
-      of_cpool {
-       Abc.empty_cpool with Abc.string = ["foo";"bar";"baz"];
-      }
-
-
-test namespace_cpool =
-    assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[]);
-                 Element ("uints",[],[]);
-                 Element ("doubles",[],[]);
-                 Element ("strings",[],[]);
-                 Element ("namespaces",[],List.map 
-                            (fun i->Element ("Namespace",["index",string_of_int i],[])) [1;2]);
-                 Element ("namespaceSets",[],[]);
-                 Element ("multinames",[],[])])) @@
-      of_cpool {Abc.empty_cpool with
-                 Abc.namespace = [{Abc.kind=0;ns_name=1};{Abc.kind=0;ns_name=2}]}
-
-test namespace_set_cpool =
-    assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[]);
-                 Element ("uints",[],[]);
-                 Element ("doubles",[],[]);
-                 Element ("strings",[],[]);
-                 Element ("namespaces",[],[]);
-                 Element ("namespaceSets",[],
-                          [Element ("NamespaceSet",[],[u30i 1;u30i 2;u30i 3])]);
-                 Element ("multinames",[],[])])) @@
-      of_cpool {Abc.empty_cpool with
-                 Abc.namespace_set = [[1;2;3]]}
-
-test multiname_cpool =
-    assert_equal
-      (Element ("Constants",[],[
-                 Element ("ints", [],[]);
-                 Element ("uints",[],[]);
-                 Element ("doubles",[],[]);
-                 Element ("strings",[],[]);
-                 Element ("namespaces",[],[]);
-                 Element ("namespaceSets",[],[]);
-                 Element ("multinames",[],[
-                            Element ("QName",["namespaceIndex","1";"nameIndex","2"],[]);
-                            Element ("Multiname",["nameIndex","3";"namespaceSetIndex","4"],[]);
-                          ]);])) @@
-      of_cpool {Abc.empty_cpool with
-                 Abc.multiname = [Abc.QName (1,2);Abc.Multiname (3,4)]}
-
-test method_info =
-  assert_equal
-    (Element ("MethodInfo",
-            ["retType"       ,"0";
-             "nameIndex"     ,"1";
-             "hasParamNames" ,"0";
-             "setSDXNs"      ,"0";
-             "isExplicit"    ,"0";
-             "ignoreRest"    ,"0";
-             "hasOptional"   ,"0";
-             "needRest"      ,"0";
-             "needActivation","0";
-             "needArguments" ,"0";],
-            [Element ("paramTypes",[],[])])) @@
-    of_method_info {
-      Abc.params = [];
-      return     = 0;
-      name       = 1;
-      flags      = 0;
-    }
-
-test method_info =
-  assert_equal
-    (Element ("MethodInfo",
-            ["retType"       ,"0";
-             "nameIndex"     ,"1";
-             "hasParamNames" ,"0";
-             "setSDXNs"      ,"0";
-             "isExplicit"    ,"0";
-             "ignoreRest"    ,"0";
-             "hasOptional"   ,"0";
-             "needRest"      ,"0";
-             "needActivation","0";
-             "needArguments" ,"0";],
-             [Element ("paramTypes",[],[u30 "1";u30 "2";u30 "3"])])) @@
-    of_method_info {
-      Abc.params = [1;2;3];
-      return     = 0;
-      name       = 1;
-      flags      = 0;
-    }
index 6f0a0a6..8290427 100644 (file)
@@ -6,6 +6,7 @@ Add:        op=0xa0; stack= ~-1
 Subtract:   op=0xa1; stack= ~-1
 Multiply:   op=0xa2; stack= ~-1
 Divide:     op=0xa3; stack= ~-1
+Modulo:     op=0xa4; stack= ~-1
 
 # Predicator
 Equals: op=0xab; stack= ~-1