storage.rs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // SPDX-License-Identifier: Apache-2.0
  2. use crate::build_solidity;
  3. use soroban_sdk::{IntoVal, Val};
  4. #[test]
  5. fn counter() {
  6. let src = build_solidity(
  7. r#"contract counter {
  8. uint64 public count = 10;
  9. function increment() public returns (uint64){
  10. count += 1;
  11. return count;
  12. }
  13. function decrement() public returns (uint64){
  14. count -= 1;
  15. return count;
  16. }
  17. }"#,
  18. |_| {},
  19. );
  20. let addr = src.contracts.last().unwrap();
  21. let res = src.invoke_contract(addr, "count", vec![]);
  22. let expected: Val = 10_u64.into_val(&src.env);
  23. assert!(expected.shallow_eq(&res));
  24. src.invoke_contract(addr, "increment", vec![]);
  25. let res = src.invoke_contract(addr, "count", vec![]);
  26. let expected: Val = 11_u64.into_val(&src.env);
  27. assert!(expected.shallow_eq(&res));
  28. src.invoke_contract(addr, "decrement", vec![]);
  29. let res = src.invoke_contract(addr, "count", vec![]);
  30. let expected: Val = 10_u64.into_val(&src.env);
  31. assert!(expected.shallow_eq(&res));
  32. }
  33. #[test]
  34. fn different_storage_types() {
  35. let src = build_solidity(
  36. r#"contract sesa {
  37. uint64 public temporary sesa = 1;
  38. uint64 public instance sesa1 = 1;
  39. uint64 public persistent sesa2 = 2;
  40. uint64 public sesa3 = 2;
  41. function inc() public {
  42. sesa++;
  43. sesa1++;
  44. sesa2++;
  45. sesa3++;
  46. }
  47. function dec() public {
  48. sesa--;
  49. sesa1--;
  50. sesa2--;
  51. sesa3--;
  52. }
  53. }"#,
  54. |_| {},
  55. );
  56. let addr = src.contracts.last().unwrap();
  57. let res = src.invoke_contract(addr, "sesa", vec![]);
  58. let expected: Val = 1_u64.into_val(&src.env);
  59. assert!(expected.shallow_eq(&res));
  60. let res = src.invoke_contract(addr, "sesa1", vec![]);
  61. let expected: Val = 1_u64.into_val(&src.env);
  62. assert!(expected.shallow_eq(&res));
  63. let res = src.invoke_contract(addr, "sesa2", vec![]);
  64. let expected: Val = 2_u64.into_val(&src.env);
  65. assert!(expected.shallow_eq(&res));
  66. let res = src.invoke_contract(addr, "sesa3", vec![]);
  67. let expected: Val = 2_u64.into_val(&src.env);
  68. assert!(expected.shallow_eq(&res));
  69. src.invoke_contract(addr, "inc", vec![]);
  70. let res = src.invoke_contract(addr, "sesa", vec![]);
  71. let expected: Val = 2_u64.into_val(&src.env);
  72. assert!(expected.shallow_eq(&res));
  73. let res = src.invoke_contract(addr, "sesa1", vec![]);
  74. let expected: Val = 2_u64.into_val(&src.env);
  75. assert!(expected.shallow_eq(&res));
  76. let res = src.invoke_contract(addr, "sesa2", vec![]);
  77. let expected: Val = 3_u64.into_val(&src.env);
  78. assert!(expected.shallow_eq(&res));
  79. let res = src.invoke_contract(addr, "sesa3", vec![]);
  80. let expected: Val = 3_u64.into_val(&src.env);
  81. assert!(expected.shallow_eq(&res));
  82. src.invoke_contract(addr, "dec", vec![]);
  83. let res = src.invoke_contract(addr, "sesa", vec![]);
  84. let expected: Val = 1_u64.into_val(&src.env);
  85. assert!(expected.shallow_eq(&res));
  86. let res = src.invoke_contract(addr, "sesa1", vec![]);
  87. let expected: Val = 1_u64.into_val(&src.env);
  88. assert!(expected.shallow_eq(&res));
  89. let res = src.invoke_contract(addr, "sesa2", vec![]);
  90. let expected: Val = 2_u64.into_val(&src.env);
  91. assert!(expected.shallow_eq(&res));
  92. let res = src.invoke_contract(addr, "sesa3", vec![]);
  93. let expected: Val = 2_u64.into_val(&src.env);
  94. assert!(expected.shallow_eq(&res));
  95. let diags = src.compiler_diagnostics;
  96. assert!(diags
  97. .contains_message("storage type not specified for `sesa3`, defaulting to `persistent`"));
  98. }