pragma.rs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. // SPDX-License-Identifier: Apache-2.0
  2. use crate::test_solidity;
  3. use solang::sema::ast;
  4. #[test]
  5. fn version_match() {
  6. let ns = test_solidity("pragma solidity 0.5.16; pragma solidity 0.5;");
  7. assert_eq!(
  8. ns.highest_solidity_version(0),
  9. Some(ast::Version {
  10. major: 0,
  11. minor: Some(5),
  12. patch: Some(16)
  13. })
  14. );
  15. let ns = test_solidity("pragma solidity 0.5; pragma solidity 0.5.16 <1 >0;");
  16. assert_eq!(
  17. ns.highest_solidity_version(0),
  18. Some(ast::Version {
  19. major: 0,
  20. minor: Some(5),
  21. patch: Some(16)
  22. })
  23. );
  24. let ns = test_solidity("pragma solidity 0.5 || 0.5.16 || <1 || >0;");
  25. assert_eq!(
  26. ns.highest_solidity_version(0),
  27. Some(ast::Version {
  28. major: 0,
  29. minor: Some(5),
  30. patch: Some(16)
  31. })
  32. );
  33. let ns = test_solidity("pragma solidity =0.5; pragma solidity <=0.5.16 >= 0;");
  34. assert_eq!(
  35. ns.highest_solidity_version(0),
  36. Some(ast::Version {
  37. major: 0,
  38. minor: Some(5),
  39. patch: Some(16)
  40. })
  41. );
  42. let ns = test_solidity("pragma solidity <0.5.17;");
  43. assert_eq!(
  44. ns.highest_solidity_version(0),
  45. Some(ast::Version {
  46. major: 0,
  47. minor: Some(5),
  48. patch: Some(16)
  49. })
  50. );
  51. let ns = test_solidity("pragma solidity <0.5;");
  52. assert_eq!(
  53. ns.highest_solidity_version(0),
  54. Some(ast::Version {
  55. major: 0,
  56. minor: Some(4),
  57. patch: None
  58. })
  59. );
  60. let ns = test_solidity("pragma solidity <0;");
  61. assert_eq!(ns.highest_solidity_version(0), None);
  62. let ns = test_solidity("pragma solidity ~0.0;");
  63. assert_eq!(ns.highest_solidity_version(0), None);
  64. let ns = test_solidity("pragma solidity <0.5.0;");
  65. assert_eq!(
  66. ns.highest_solidity_version(0),
  67. Some(ast::Version {
  68. major: 0,
  69. minor: Some(4),
  70. patch: None
  71. })
  72. );
  73. let ns = test_solidity("pragma solidity <1;");
  74. assert_eq!(
  75. ns.highest_solidity_version(0),
  76. Some(ast::Version {
  77. major: 0,
  78. minor: None,
  79. patch: None
  80. })
  81. );
  82. let ns = test_solidity("pragma solidity <1.0.0;");
  83. assert_eq!(
  84. ns.highest_solidity_version(0),
  85. Some(ast::Version {
  86. major: 0,
  87. minor: None,
  88. patch: None
  89. })
  90. );
  91. let ns = test_solidity("pragma solidity ^1.2.0;");
  92. assert_eq!(
  93. ns.highest_solidity_version(0),
  94. Some(ast::Version {
  95. major: 1,
  96. minor: None,
  97. patch: None
  98. })
  99. );
  100. let ns = test_solidity("pragma solidity ^0.5.16;");
  101. assert_eq!(
  102. ns.highest_solidity_version(0),
  103. Some(ast::Version {
  104. major: 0,
  105. minor: Some(5),
  106. patch: None
  107. })
  108. );
  109. let ns = test_solidity("pragma solidity ~0.5.16 *1.0.0;");
  110. assert_eq!(
  111. ns.highest_solidity_version(0),
  112. Some(ast::Version {
  113. major: 0,
  114. minor: Some(5),
  115. patch: None
  116. })
  117. );
  118. let ns = test_solidity("pragma solidity 0.5.0 - 0.5.18;");
  119. assert_eq!(
  120. ns.highest_solidity_version(0),
  121. Some(ast::Version {
  122. major: 0,
  123. minor: Some(5),
  124. patch: Some(18)
  125. })
  126. );
  127. assert!(ns.solidity_minor_version(0, 5));
  128. let ns = test_solidity("pragma solidity 0.4 - 0.5 ^0;");
  129. assert_eq!(
  130. ns.highest_solidity_version(0),
  131. Some(ast::Version {
  132. major: 0,
  133. minor: Some(5),
  134. patch: None
  135. })
  136. );
  137. assert!(ns.solidity_minor_version(0, 5));
  138. let ns = test_solidity("pragma solidity 0.4 - 0.5 ~0;");
  139. assert_eq!(
  140. ns.highest_solidity_version(0),
  141. Some(ast::Version {
  142. major: 0,
  143. minor: Some(5),
  144. patch: None
  145. })
  146. );
  147. assert!(ns.solidity_minor_version(0, 5));
  148. let ns = test_solidity("pragma solidity ~0;");
  149. assert_eq!(ns.highest_solidity_version(0), None);
  150. assert!(!ns.solidity_minor_version(0, 5));
  151. }