diff --git a/test/clj/coffi/mem_test.clj b/test/clj/coffi/mem_test.clj index e453c24..25a7f72 100644 --- a/test/clj/coffi/mem_test.clj +++ b/test/clj/coffi/mem_test.clj @@ -76,7 +76,6 @@ (= {:a 5 :b 10 :c 15} (mem/deserialize (mem/serialize (TestType. 5 10 15) ::TestType) ::TestType)))) - (t/deftest can-define-nested-structs (t/is (eval @@ -92,9 +91,39 @@ (eval `(mem/defstruct ~'ArrayTestType [::mem/int ~'x ::mem/byte ~'y [::mem/array ::mem/int 4] ~'z])))) +(mem/defstruct ArrayTestType [::mem/int x ::mem/byte y [::mem/array ::mem/int 4] z]) + (t/deftest can-instantiated-array-member-structs (t/are [x y z] (z x (y (ArrayTestType. 5 6 (int-array [1 2 3 4])))) - {:x 5 :y 6} #(dissoc % :z) = - (int-array [1 2 3 4]) :z java.util.Arrays/equals)) + {:x 5 :y 6} #(dissoc % :z) = + (int-array [1 2 3 4]) :z java.util.Arrays/equals)) +(t/deftest can-serialize-array-struct + (t/is + (= [5 6 1 2 3 4] + (vec (filter #(not= 0 %) (vec (.toArray (mem/serialize (ArrayTestType. 5 6 (int-array [1 2 3 4])) ::ArrayTestType) mem/byte-layout))))))) + +(t/deftest can-serialize-deserialize-array-struct + (t/is + (java.util.Arrays/equals + (int-array [1 2 3 4]) + (.z (mem/deserialize (mem/serialize (ArrayTestType. 5 6 (int-array [1 2 3 4])) ::ArrayTestType) ::ArrayTestType))))) + +(t/deftest can-define-complex-structs + (t/is + (eval + `(mem/defstruct ~'ComplexTestType [[::mem/array ::ArrayTestType 4] ~'x ::mem/byte ~'y [::mem/array ::mem/int 4] ~'z ::NestedTestType ~'w])))) + +(mem/defstruct ComplexTestType [[::mem/array ::ArrayTestType 4] x ::mem/byte y [::mem/array ::mem/int 4] z ::NestedTestType w]) + +(t/deftest can-serialize-deserialize-complex-struct-type + (t/is + (let [x (object-array (map #(ArrayTestType. % % (int-array (range 4))) (range 4))) + y 12 + z (int-array (range 4)) + w (NestedTestType. 5 6 (TestType. 5 10 15))] + (-> + (ComplexTestType. x y z w) + (mem/serialize ::ComplexTestType) + (mem/deserialize ::ComplexTestType)))))