mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-17 00:47:13 +00:00
Regex fuzzer: region deletion and duplication
Adds two transformations, one that deletes a random region enclosed by a given delimiter and another one that duplicates a region by inserting it at a position of the WGSL code after a delimiter. Fixes: tint:1072. Fixes: tint:1073. Change-Id: Icb10a7f16a783d5eb8f75a48c4015eb87ea1d174 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/60200 Reviewed-by: Alastair Donaldson <afdx@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Alastair Donaldson <afdx@google.com>
This commit is contained in:
@@ -31,7 +31,7 @@ TEST(SwapRegionsTest, SwapIntervalsEdgeNonConsecutive) {
|
||||
|
||||
// this call should swap R1 with R3.
|
||||
SwapIntervals(0, R1.length() - 1, R1.length() + R2.length(),
|
||||
all_regions.length() - 1, &all_regions);
|
||||
all_regions.length() - 1, all_regions);
|
||||
|
||||
ASSERT_EQ(R3 + R2 + R1, all_regions);
|
||||
}
|
||||
@@ -47,7 +47,7 @@ TEST(SwapRegionsTest, SwapIntervalsNonConsecutiveNonEdge) {
|
||||
SwapIntervals(R1.length(), R1.length() + R2.length() - 1,
|
||||
R1.length() + R2.length() + R3.length(),
|
||||
R1.length() + R2.length() + R3.length() + R4.length() - 1,
|
||||
&all_regions);
|
||||
all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R4 + R3 + R2 + R5, all_regions);
|
||||
}
|
||||
@@ -61,7 +61,7 @@ TEST(SwapRegionsTest, SwapIntervalsConsecutiveEdge) {
|
||||
// this call should swap R2 with R3.
|
||||
SwapIntervals(R1.length(), R1.length() + R2.length() - 1,
|
||||
R1.length() + R2.length(),
|
||||
R1.length() + R2.length() + R3.length() - 1, &all_regions);
|
||||
R1.length() + R2.length() + R3.length() - 1, all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R3 + R2 + R4, all_regions);
|
||||
}
|
||||
@@ -80,11 +80,93 @@ TEST(SwapRegionsTest, SwapIntervalsConsecutiveNonEdge) {
|
||||
R1.length() + R2.length() + R3.length() + R4.length() - 1,
|
||||
R1.length() + R2.length() + R3.length() + R4.length(),
|
||||
R1.length() + R2.length() + R3.length() + R4.length() + R5.length() - 1,
|
||||
&all_regions);
|
||||
all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R2 + R3 + R5 + R4, all_regions);
|
||||
}
|
||||
|
||||
// Deletes the first region.
|
||||
TEST(DeleteRegionTest, DeleteFirstRegion) {
|
||||
std::string R1 = "|region1|", R2 = "; region2;",
|
||||
R3 = "---------region3---------", R4 = "++region4++",
|
||||
R5 = "***region5***";
|
||||
std::string all_regions = R1 + R2 + R3 + R4 + R5;
|
||||
|
||||
// This call should delete R1.
|
||||
DeleteInterval(0, R1.length() - 1, all_regions);
|
||||
|
||||
ASSERT_EQ(R2 + R3 + R4 + R5, all_regions);
|
||||
}
|
||||
|
||||
// Deletes the last region.
|
||||
TEST(DeleteRegionTest, DeleteLastRegion) {
|
||||
std::string R1 = "|region1|", R2 = "; region2;",
|
||||
R3 = "---------region3---------", R4 = "++region4++",
|
||||
R5 = "***region5***";
|
||||
std::string all_regions = R1 + R2 + R3 + R4 + R5;
|
||||
|
||||
// This call should delete R5.
|
||||
DeleteInterval(R1.length() + R2.length() + R3.length() + R4.length(),
|
||||
all_regions.length() - 1, all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R2 + R3 + R4, all_regions);
|
||||
}
|
||||
|
||||
// Deletes the middle region.
|
||||
TEST(DeleteRegionTest, DeleteMiddleRegion) {
|
||||
std::string R1 = "|region1|", R2 = "; region2;",
|
||||
R3 = "---------region3---------", R4 = "++region4++",
|
||||
R5 = "***region5***";
|
||||
std::string all_regions = R1 + R2 + R3 + R4 + R5;
|
||||
|
||||
// This call should delete R3.
|
||||
DeleteInterval(R1.length() + R2.length(),
|
||||
R1.length() + R2.length() + R3.length() - 1, all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R2 + R4 + R5, all_regions);
|
||||
}
|
||||
|
||||
TEST(InsertRegionTest, InsertRegionTest1) {
|
||||
std::string R1 = "|region1|", R2 = "; region2;",
|
||||
R3 = "---------region3---------", R4 = "++region4++",
|
||||
R5 = "***region5***";
|
||||
std::string all_regions = R1 + R2 + R3 + R4 + R5;
|
||||
|
||||
// This call should insert R2 after R4.
|
||||
DuplicateInterval(R1.length(), R1.length() + R2.length() - 1,
|
||||
R1.length() + R2.length() + R3.length() + R4.length() - 1,
|
||||
all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R2 + R3 + R4 + R2 + R5, all_regions);
|
||||
}
|
||||
|
||||
TEST(InsertRegionTest, InsertRegionTest2) {
|
||||
std::string R1 = "|region1|", R2 = "; region2;",
|
||||
R3 = "---------region3---------", R4 = "++region4++",
|
||||
R5 = "***region5***";
|
||||
std::string all_regions = R1 + R2 + R3 + R4 + R5;
|
||||
|
||||
// This call should insert R3 after R1.
|
||||
DuplicateInterval(R1.length() + R2.length(),
|
||||
R1.length() + R2.length() + R3.length() - 1,
|
||||
R1.length() - 1, all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R3 + R2 + R3 + R4 + R5, all_regions);
|
||||
}
|
||||
|
||||
TEST(InsertRegionTest, InsertRegionTest3) {
|
||||
std::string R1 = "|region1|", R2 = "; region2;",
|
||||
R3 = "---------region3---------", R4 = "++region4++",
|
||||
R5 = "***region5***";
|
||||
std::string all_regions = R1 + R2 + R3 + R4 + R5;
|
||||
|
||||
// This call should insert R2 after R5.
|
||||
DuplicateInterval(R1.length(), R1.length() + R2.length() - 1,
|
||||
all_regions.length() - 1, all_regions);
|
||||
|
||||
ASSERT_EQ(R1 + R2 + R3 + R4 + R5 + R2, all_regions);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace regex_fuzzer
|
||||
} // namespace fuzzers
|
||||
|
||||
Reference in New Issue
Block a user