Skip to content

Commit

Permalink
fix: prevent duplicate sway unit test execution (FuelLabs#3986)
Browse files Browse the repository at this point in the history
## Description
This PR adds a step to execution of unit tests so that duplicate unit
tests are omitted. Duplicate tests are generated from dependencies
declared with `dep` keyword in a duplicate manner (see FuelLabs#3947). Until
that is fixed this PR de-duplicates sway unit tests based on their
`span`. Once the fix for FuelLabs#3947 is ready we can remove the changes from
this PR. This is also commented in the code.

closes FuelLabs#3813.

## Checklist

- [x] I have linked to any relevant issues.
- [x] I have commented my code, particularly in hard-to-understand
areas.
- [x] I have updated the documentation where relevant (API docs, the
reference, and the Sway book).
- [x] I have added tests that prove my fix is effective or that my
feature works.
- [x] I have added (or requested a maintainer to add) the necessary
`Breaking*` or `New Feature` labels where relevant.
- [x] I have done my best to ensure that my PR adheres to [the Fuel Labs
Code Review
Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md).
- [x] I have requested a review from the relevant team or maintainers.
  • Loading branch information
kayagokalp authored Feb 5, 2023
1 parent 9fbad50 commit 685a92b
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions forc-test/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::collections::HashSet;
use std::{collections::HashMap, fs, path::PathBuf, sync::Arc};

use forc_pkg as pkg;
Expand Down Expand Up @@ -189,12 +190,15 @@ impl<'a> PackageTests {

/// Run all tests for this package and collect their results.
pub(crate) fn run_tests(&self) -> anyhow::Result<TestedPackage> {
// TODO: Remove this once https://github.com/FuelLabs/sway/issues/3947 is solved.
let mut visited_tests = HashSet::new();
let pkg_with_tests = self.built_pkg_with_tests();
// TODO: We can easily parallelise this, but let's wait until testing is stable first.
let tests = pkg_with_tests
.entries
.iter()
.filter_map(|entry| entry.kind.test().map(|test| (entry, test)))
.filter(|(_, test_entry)| visited_tests.insert(&test_entry.span))
.map(|(entry, test_entry)| {
let offset = u32::try_from(entry.finalized.imm)
.expect("test instruction offset out of range");
Expand Down

0 comments on commit 685a92b

Please sign in to comment.