Test that TF_VERSION_STRING follows semantic versioning.
| 46 | |
| 47 | // Test that TF_VERSION_STRING follows semantic versioning. |
| 48 | TEST(SemverTest, VersionStringFollowsSemver) { |
| 49 | // Poor approximation of the semver 2.0 specification at www.semver.org. Feel |
| 50 | // free to refine further (for example, check for leading 0s in numbers), but |
| 51 | // avoid adding dependencies. |
| 52 | uint64 major, minor, patch; |
| 53 | StringPiece prerelease, metadata; |
| 54 | StringPiece semver(TF_VERSION_STRING); |
| 55 | |
| 56 | ASSERT_TRUE(str_util::ConsumeLeadingDigits(&semver, &major)); |
| 57 | ASSERT_TRUE(absl::ConsumePrefix(&semver, ".")); |
| 58 | ASSERT_TRUE(str_util::ConsumeLeadingDigits(&semver, &minor)); |
| 59 | ASSERT_TRUE(absl::ConsumePrefix(&semver, ".")); |
| 60 | // Till 0.11.0rc2, the prerelease version was (incorrectly) not separated from |
| 61 | // the patch version number. Let that slide. |
| 62 | // Remove this when TF_VERSION_STRING moves beyond 0.11.0rc2. |
| 63 | if (major == 0 && minor <= 11) { |
| 64 | return; |
| 65 | } |
| 66 | if (absl::ConsumePrefix(&semver, "head")) { |
| 67 | ASSERT_TRUE(semver.empty()); |
| 68 | return; |
| 69 | } |
| 70 | ASSERT_TRUE(str_util::ConsumeLeadingDigits(&semver, &patch)); |
| 71 | if (semver.empty()) return; |
| 72 | if (semver[0] == '-') { |
| 73 | ASSERT_TRUE(ConsumeDotSeparatedIdentifiers(&semver, "-", &prerelease)); |
| 74 | } |
| 75 | if (semver.empty()) return; |
| 76 | if (semver[0] == '+') { |
| 77 | ASSERT_TRUE(ConsumeDotSeparatedIdentifiers(&semver, "+", &metadata)); |
| 78 | } |
| 79 | ASSERT_TRUE(semver.empty()); |
| 80 | } |
| 81 | } // namespace |
| 82 | } // namespace tensorflow |
nothing calls this directly
no test coverage detected