Browse Source

address mapping test

Signed-off-by: Sean Young <sean@mess.org>
Sean Young 5 years ago
parent
commit
486d303646
1 changed files with 49 additions and 0 deletions
  1. 49 0
      tests/substrate_tests/mappings.rs

+ 49 - 0
tests/substrate_tests/mappings.rs

@@ -462,3 +462,52 @@ fn test_string_map() {
         assert_eq!(runtime.vm.output, GetRet(Vec::new()).encode());
         assert_eq!(runtime.vm.output, GetRet(Vec::new()).encode());
     }
     }
 }
 }
+
+#[test]
+fn test_address() {
+    type Address = [u8; 32];
+
+    #[derive(Debug, PartialEq, Encode, Decode)]
+    struct Val(i64);
+    #[derive(Debug, PartialEq, Encode, Decode)]
+    struct SetArg(Address, i64);
+    #[derive(Debug, PartialEq, Encode, Decode)]
+    struct GetArg(Address);
+
+    let mut runtime = build_solidity(
+        r##"
+        contract foo {
+            uint bvar1;
+            uint bvar2;
+            mapping(address => int64) v;
+
+            function set(address index, int64 val) public {
+                v[index] = val;
+            }
+
+            function get(address index) public returns (int64) {
+                return v[index];
+            }
+        }"##,
+    );
+
+    let mut rng = rand::thread_rng();
+
+    let mut vals = HashMap::new();
+    let mut index: Address = [0u8; 32];
+
+    for _ in 0..100 {
+        rng.fill(&mut index[..]);
+        let val = rng.gen::<i64>();
+
+        runtime.function("set", SetArg(index, val).encode());
+
+        vals.insert(index, val);
+    }
+
+    for val in vals {
+        runtime.function("get", GetArg(val.0).encode());
+
+        assert_eq!(runtime.vm.output, Val(val.1).encode());
+    }
+}