alloc.rs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // SPDX-License-Identifier: Apache-2.0
  2. use crate::build_solidity;
  3. use soroban_sdk::{IntoVal, Val};
  4. #[test]
  5. fn arrays_basic_ops_test() {
  6. let runtime = build_solidity(
  7. r#"
  8. contract array {
  9. function push_pop() public returns (uint64) {
  10. uint64[] mylist;
  11. mylist.push(5);
  12. mylist.push(10);
  13. mylist.pop();
  14. uint64 len = mylist.length;
  15. return len + mylist[0];
  16. }
  17. function loop() public returns (uint64) {
  18. uint64[] mylist;
  19. uint64 sum = 0;
  20. mylist.push(5);
  21. mylist.push(10);
  22. mylist.push(15);
  23. for (uint64 i = 0; i < mylist.length; i++) {
  24. sum += mylist[i];
  25. }
  26. return sum;
  27. }
  28. function random_access(uint64 index) public returns (uint64) {
  29. uint64[] mylist;
  30. uint64 sum = 0;
  31. mylist.push(5);
  32. mylist.push(10);
  33. mylist.push(15);
  34. sum += mylist[index];
  35. sum += mylist[index + 1];
  36. return sum;
  37. }
  38. }
  39. "#,
  40. |_| {},
  41. );
  42. let addr = runtime.contracts.last().unwrap();
  43. // push_pop(): [5,10] -> pop -> [5]; len(=1) + mylist[0](=5) = 6
  44. let expected: Val = 6_u64.into_val(&runtime.env);
  45. let res = runtime.invoke_contract(addr, "push_pop", vec![]);
  46. println!("Result of push_pop: {res:?}");
  47. assert!(expected.shallow_eq(&res));
  48. // loop(): 5 + 10 + 15 = 30
  49. let expected: Val = 30_u64.into_val(&runtime.env);
  50. let res = runtime.invoke_contract(addr, "loop", vec![]);
  51. assert!(expected.shallow_eq(&res));
  52. // random_access(0): mylist[0] + mylist[1] = 5 + 10 = 15
  53. let expected: Val = 15_u64.into_val(&runtime.env);
  54. let args = vec![0_u64.into_val(&runtime.env)];
  55. let res = runtime.invoke_contract(addr, "random_access", args);
  56. assert!(expected.shallow_eq(&res));
  57. // random_access(1): mylist[1] + mylist[2] = 10 + 15 = 25
  58. let expected: Val = 25_u64.into_val(&runtime.env);
  59. let args = vec![1_u64.into_val(&runtime.env)];
  60. let res = runtime.invoke_contract(addr, "random_access", args);
  61. assert!(expected.shallow_eq(&res));
  62. }