Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrong test in haspmaps3.rs exercise #1361

Closed
cscherrNT opened this issue Feb 10, 2023 · 4 comments
Closed

Wrong test in haspmaps3.rs exercise #1361

cscherrNT opened this issue Feb 10, 2023 · 4 comments

Comments

@cscherrNT
Copy link

While solving the rustlings to learn the Language, I think i found a wrongly configured test in exercises/hashmaps/hashmaps3.rs

    fn get_results() -> String {                                                                    
        let results = "".to_string()                                                                
            + "England,France,4,2\n"                                                                
            + "France,Italy,3,1\n"                                                                  
            + "Poland,Spain,2,0\n"                                                                  
            + "Germany,England,2,1\n";  // <---- This line says England scored 1 and conceided 2.                                                            
        results                                                                                     
    }
// some other test ...
    #[test]
    fn validate_team_score_1() {
        let scores = build_scores_table(get_results());
        let team = scores.get("England").unwrap();
        assert_eq!(team.goals_scored, 5); // <---- Yet this and the following lines say that England should have scored 5 and conceded 4.
        assert_eq!(team.goals_conceded, 4); // ( affected aswell )
    }

This of course makes solving the challenge with logical code impossible.

Proposed fix:

    fn get_results() -> String {                                                                    
        let results = "".to_string()                                                                
            + "England,France,4,2\n"                                                                
            + "France,Italy,3,1\n"                                                                  
            + "Poland,Spain,2,0\n"                                                                  
            + "Germany,England,2,1\n";  // <---- This line says England scored 1 and conceided 2.                                                            
        results                                                                                     
    }
// some other test ...
    #[test]
    fn validate_team_score_1() {
        let scores = build_scores_table(get_results());
        let team = scores.get("England").unwrap();
        assert_eq!(team.goals_scored, 1); // This line says England scored 1 now
        assert_eq!(team.goals_conceded, 2); // This line says England conceded 2 now
    }

Appendix: This is my complete and solved hashmap3.rs file, i have tweaked the test as shown in the proposed fix:

// A list of scores (one per line) of a soccer match is given. Each line
// is of the form :
// <team_1_name>,<team_2_name>,<team_1_goals>,<team_2_goals>
// Example: England,France,4,2 (England scored 4 goals, France 2).

// You have to build a scores table containing the name of the team, goals
// the team scored, and goals the team conceded. One approach to build
// the scores table is to use a Hashmap. The solution is partially
// written to use a Hashmap, complete it to pass the test.

// Make me pass the tests!

// Execute `rustlings hint hashmaps3` or use the `hint` watch subcommand for a hint.

// I AM NOT DONE

use std::collections::HashMap;

// A structure to store team name and its goal details.
struct Team {
    name: String,
    goals_scored: u8,
    goals_conceded: u8,
}

fn build_scores_table(results: String) -> HashMap<String, Team> {
    // The name of the team is the key and its associated struct is the value.
    let mut scores: HashMap<String, Team> = HashMap::new();

    for r in results.lines() {
        let v: Vec<&str> = r.split(',').collect();
        let team_1_name = v[0].to_string();
        let team_1_score: u8 = v[2].parse().unwrap();
        let team_2_name = v[1].to_string();
        let team_2_score: u8 = v[3].parse().unwrap();
        // TODO: Populate the scores table with details extracted from the
        // current line. Keep in mind that goals scored by team_1
        // will be the number of goals conceded from team_2, and similarly
        // goals scored by team_2 will be the number of goals conceded by
        // team_1.
        let team1 = Team {
            name: team_1_name, 
            goals_scored: team_1_score, 
            goals_conceded: team_2_score
        };
        let team2 = Team {
            name: team_2_name, 
            goals_scored: team_2_score, 
            goals_conceded: team_1_score
        };
        scores.insert(team1.name.clone(), team1);
        scores.insert(team2.name.clone(), team2);
    }
    scores
}

#[cfg(test)]
mod tests {
    use super::*;

    fn get_results() -> String {
        let results = "".to_string()
            + "England,France,4,2\n"
            + "France,Italy,3,1\n"
            + "Poland,Spain,2,0\n"
            + "Germany,England,2,1\n";
        results
    }

    #[test]
    fn build_scores() {
        let scores = build_scores_table(get_results());

        let mut keys: Vec<&String> = scores.keys().collect();
        keys.sort();
        assert_eq!(
            keys,
            vec!["England", "France", "Germany", "Italy", "Poland", "Spain"]
        );
    }

    #[test]
    fn validate_team_score_1() {
        let scores = build_scores_table(get_results());
        let team = scores.get("England").unwrap();
        assert_eq!(team.goals_scored, 1);
        assert_eq!(team.goals_conceded, 2);
    }

    #[test]
    fn validate_team_score_2() {
        let scores = build_scores_table(get_results());
        let team = scores.get("Spain").unwrap();
        assert_eq!(team.goals_scored, 0);
        assert_eq!(team.goals_conceded, 2);
    }
}
@shadows-withal
Copy link
Member

There's another match where England scored 4 and conceded 2. Add that up with the Germany game and you get 5 scored and 4 conceded total. I think your logic doesn't account for that, but the exericse tests are correct in this instance.

@mcheremnov
Copy link

@cscherrNT Hi there, have the same problem but I manage to solve it with .and_modify that takes the anonymous function |team| and updates values of scored and conceded values. I place .and_modify between .entry and .or_insert. In that way, before adding value we check if there are already value with the same key. Hope it would help

@plaes
Copy link

plaes commented Feb 19, 2023

While solving the rustlings to learn the Language, I think i found a wrongly configured test in exercises/hashmaps/hashmaps3.rs

Appendix: This is my complete and solved hashmap3.rs file, i have tweaked the test as shown in the proposed fix:

[...]

for r in results.lines() {
    let v: Vec<&str> = r.split(',').collect();
    let team_1_name = v[0].to_string();
    let team_1_score: u8 = v[2].parse().unwrap();
    let team_2_name = v[1].to_string();
    let team_2_score: u8 = v[3].parse().unwrap();
    // TODO: Populate the scores table with details extracted from the
    // current line. Keep in mind that goals scored by team_1
    // will be the number of goals conceded from team_2, and similarly
    // goals scored by team_2 will be the number of goals conceded by
    // team_1.
    let team1 = Team {
        name: team_1_name, 
        goals_scored: team_1_score, 
        goals_conceded: team_2_score
    };
    let team2 = Team {
        name: team_2_name, 
        goals_scored: team_2_score, 
        goals_conceded: team_1_score
    };
    scores.insert(team1.name.clone(), team1);
    scores.insert(team2.name.clone(), team2);

@cscherrNT - You are overwriting existing entries in the hashmap when just using .insert(..). That's why you end up with failing tests.

Although, existing tests should also include checks for France as well.

@cscherrNT
Copy link
Author

It seems this is not an issue but an oversight on my part. I still think this is confusing but it doesn't seem to be wrong, so i'm closing this issue as not planned for now.

@cscherrNT cscherrNT closed this as not planned Won't fix, can't repro, duplicate, stale Mar 21, 2023
evanmiller2112 added a commit to evanmiller2112/rustlings_hashmap3 that referenced this issue Mar 4, 2024
I struggled with this exercise and didn't understand that it was looking for a summary of goals scored/conceded per team, instead of per match.

My goal here is just to clarify the language, essentially saying "the total number of goals the team scored" to indicate that we are looking for a sum.

Updated the exercise description to clarify this point.

Relates loosely to closed issue rust-lang#1361
maladroitthief pushed a commit to maladroitthief/rustlings that referenced this issue Mar 27, 2024
I struggled with this exercise and didn't understand that it was looking for a summary of goals scored/conceded per team, instead of per match.

My goal here is just to clarify the language, essentially saying "the total number of goals the team scored" to indicate that we are looking for a sum.

Updated the exercise description to clarify this point.

Relates loosely to closed issue rust-lang#1361
jhrcook pushed a commit to jhrcook/rustlings that referenced this issue Apr 13, 2024
I struggled with this exercise and didn't understand that it was looking for a summary of goals scored/conceded per team, instead of per match.

My goal here is just to clarify the language, essentially saying "the total number of goals the team scored" to indicate that we are looking for a sum.

Updated the exercise description to clarify this point.

Relates loosely to closed issue rust-lang#1361
jhrcook added a commit to jhrcook/rustlings that referenced this issue Apr 13, 2024
* solutions: intro, variables, functions, if, quiz1

* solutions: primitive types, move semantics, vecs, structs, enums

* solutions: strings, hashmaps, modules, quiz 2

* solutions: options and error_handling

* solutions: generics, traits, and quiz 3

* solutions: lifetimes, tests

* solutions: iterators

* feat: smart pointers

* solutions: macros

* solutions: threads

* solutions: clippy

* solutions: conversions

* chore: make hints proper markdown

Also rewrapped some hints to 80 columns so that they also look good in a
terminal.

closes rust-lang#1698

* docs: use new fancy install aliases

* chore(errors1): fix grammar typo in hint for exercise errors1

This commit corrects a grammar typo in the hint of the errors1 exercise, changing from:
"`Ok` and `Err` are one of the variants of `Result`,"
to:
"`Ok` and `Err` are the two variants of `Result`,"

* chore(errors2): minor description wording change

This commit makes a minor change in the wording of the description of the errors2 exercise to avoid potential confusion, changing:

"A player of the game will type in how many items they want to buy, and the `total_cost` function will calculate the total cost of the tokens."
to
"A player of the game will type in how many items they want to buy, and the `total_cost` function will calculate the total cost of the items."

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Update Exercises Directory Names to Reflect Order

* Update install.sh

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix(watch): update the CLIPPY_CARGO_TOML_PATH

... to reflect the changes to the exercise directory names.

The path exercises/clippy replaced with exercises/22_clippy.

closes rust-lang#1726

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: fix windows installation instructions

Currently, the windows installation instructions download a script from the URL ps1.rustlings.cool. This URL isn't detected as a URL in some cases, which means that PowerShell tries to load the data from a local file called ps1.rustlings.cool.

This was breaking my install, and adding the https:// fixed it.

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix(intro1.rs): typo in the exercise body

* fix(intro2): changed intro2 to be a name error, not a format string error.

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix progress bar count

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix(traits3): grammar mistake in the hint for traits3

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Add CodeCrafters

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: revert fancy install aliases

* Revert "Add CodeCrafters"

This reverts commit dad2216.

* Revert "docs: add sarupbanskota as a contributor for doc"

* chore(watch): update notify dependency to v6

closes rust-lang#1640

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix(watch): Fix rendering of the finishing ferris

In commit 571bab2 ("Run clippy --fix"), the "" string was changed to
r"", even though it contains an intentional escape sequence, which now
looks wrong. My commit undoes this change:

Before:

	+----------------------------------------------------+
	|          You made it to the Fe-nish line!          |
	+--------------------------  ------------------------+
				  \\/
	     ▒▒          ▒▒▒▒▒▒▒▒      ▒▒▒▒▒▒▒▒          ▒▒
	   ▒▒▒▒  ▒▒    ▒▒        ▒▒  ▒▒        ▒▒    ▒▒  ▒▒▒▒
	   ▒▒▒▒  ▒▒  ▒▒            ▒▒            ▒▒  ▒▒  ▒▒▒▒
	 ░░▒▒▒▒░░▒▒  ▒▒            ▒▒            ▒▒  ▒▒░░▒▒▒▒
	   ▓▓▓▓▓▓▓▓  ▓▓      ▓▓██  ▓▓  ▓▓██      ▓▓  ▓▓▓▓▓▓▓▓
	     ▒▒▒▒    ▒▒      ████  ▒▒  ████      ▒▒░░  ▒▒▒▒
	       ▒▒  ▒▒▒▒▒▒        ▒▒▒▒▒▒        ▒▒▒▒▒▒  ▒▒
		 ▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▓▓▒▒▓▓▒▒▒▒▒▒▒▒
		   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
		     ▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒
		   ▒▒  ▒▒▒▒▒▒▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒  ▒▒
		 ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒
	       ▒▒    ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒    ▒▒
	       ▒▒  ▒▒    ▒▒                  ▒▒    ▒▒  ▒▒
		   ▒▒  ▒▒                      ▒▒  ▒▒


After:

	+----------------------------------------------------+
	|          You made it to the Fe-nish line!          |
	+--------------------------  ------------------------+
				   \/
	     ▒▒          ▒▒▒▒▒▒▒▒      ▒▒▒▒▒▒▒▒          ▒▒
	   ▒▒▒▒  ▒▒    ▒▒        ▒▒  ▒▒        ▒▒    ▒▒  ▒▒▒▒
	   ▒▒▒▒  ▒▒  ▒▒            ▒▒            ▒▒  ▒▒  ▒▒▒▒
	 ░░▒▒▒▒░░▒▒  ▒▒            ▒▒            ▒▒  ▒▒░░▒▒▒▒
	   ▓▓▓▓▓▓▓▓  ▓▓      ▓▓██  ▓▓  ▓▓██      ▓▓  ▓▓▓▓▓▓▓▓
	     ▒▒▒▒    ▒▒      ████  ▒▒  ████      ▒▒░░  ▒▒▒▒
	       ▒▒  ▒▒▒▒▒▒        ▒▒▒▒▒▒        ▒▒▒▒▒▒  ▒▒
		 ▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒▓▓▒▒▓▓▒▒▒▒▒▒▒▒
		   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
		     ▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒
		   ▒▒  ▒▒▒▒▒▒▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒  ▒▒
		 ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒
	       ▒▒    ▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒    ▒▒
	       ▒▒  ▒▒    ▒▒                  ▒▒    ▒▒  ▒▒
		   ▒▒  ▒▒                      ▒▒  ▒▒

Running `cargo clippy` (version 0.1.70) after this commit does not
reveal any new warnings.

Fixes: 571bab2 ("Run clippy --fix")

* feat(watch): Add red color to the finishing ferris

This adds some eye-candy for users who finish Rustlings. It is based on
ANSI terminal escape sequences and should work in most environments.

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Reword clippy1 exercise to be more readable

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Correct for more standard English

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* chore: fixed minor typo

* fix: revert from_into test change

* optimized the UI code (rust-lang#1830)

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* chore: update from_into.rs task description to fit the code

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix: Ensure scripts have LF line endings

Use gitattributes file to ensure script files have LF line endings. This solves a problem for users who wish to use DevContainers on Windows machines and the file has been cloned from the repository with CRLF line endings.

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Clarified hint text

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* chore(deps): bump mio from 0.8.9 to 0.8.11

Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.9 to 0.8.11.
- [Release notes](https://github.com/tokio-rs/mio/releases)
- [Changelog](https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md)
- [Commits](tokio-rs/mio@v0.8.9...v0.8.11)

---
updated-dependencies:
- dependency-name: mio
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Convert to lightweight dev container; simplify.

Instead of running `rustup` on a multi-gigabyte general-purpose Linux base, use the premade devcontainers/rust:1 which closely tracks the rust toolchain releases. Rip out excess setup steps since devcontainers come with the repo checked out; just compile/update the binary.

* Add target directory to $PATH

Makes the pre-built command work in the shell right away.

* Remove duplicate vscode extension list.

It's already in the vendor-specific .vscode files.

* Add back the post-attach watch.

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* chore: fix typo

Signed-off-by: pavedroad <qcqs@outlook.com>

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* chore: minor typo fix

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Update hashmaps3.rs description for clarity

I struggled with this exercise and didn't understand that it was looking for a summary of goals scored/conceded per team, instead of per match.

My goal here is just to clarify the language, essentially saying "the total number of goals the team scored" to indicate that we are looking for a sum.

Updated the exercise description to clarify this point.

Relates loosely to closed issue rust-lang#1361

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Added .git to end of Repo's https URL

The install.sh script didn't work for me, after I changed this locally it worked
URL needs to end in .git

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix(move_semantics): removed unused mut

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Update dependencies

* fix: clean up "return" wording in iterators4

* docs: Added comment for handling equal numbers in if/if1.rs `bigger` function

* Update exercises/03_if/if1.rs

Co-authored-by: liv <shadows@with.al>

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix(verify): show stdout of the last line

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Fix the sysroot path when it contains whitespaces

* Remove unneeded Arc

* options1: Update wording & fix grammar

Signed-off-by: Dan Bond <danbond@protonmail.com>

* verify: fix success message spacing

Signed-off-by: Dan Bond <danbond@protonmail.com>

* Use a custom capacity for the JSON buffer

* Add anyhow

* Merge get_sysroot_src into the constructor

* Avoid allocations on every call to Path::join

* Don't capture stderr

* Use the parsed exercises instead of glob

* Remove unneeded check if crates is empty

* RustAnalyzerProject is not deserialized

* Optimize the serialized data types

* Add write_project_json

* Add comment

* Cache filters

* Remove unneeded to_string call

* Optimize state

* Use to_string_lossy

* Call looks_done only once

* Replace regex with winnow

* Make "I AM NOT DONE" caseless

* Fix context of previous lines and improve readability

* Add comments

* Improvements to watch mode

* Initialize the input buffer with some capacity

* Move the const string to the bottom like others

* Replace toml with toml_edit

* Use the NotFound variant of the IO error

* Use `which` instead of running `rustc --version`

* Derive Eq when PartialEq is derived

* Only use arg instead of args AND arg

* Formatting

* Add missing semicolon

* Use == on simple enums

* Use == instead of eq

* Remove unneeded closure

* The string doesn't have to be a raw string

* Remove the home dependency since it is not used

* Pipe the output to null instead of capturing and ignoring it

* feat: ui format

* Update deps

* docs: sort exercise to book chapter mapping by exercise

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* chore: update the chapter of macros

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Remove confusing aside in 23_conversions/from_str.rs

The advice tell us how to return as String error message. Unless I missed something, we can't even return a String error message here, so this advice is more confusing than anything and should better be removed.

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Remove outdated info about the command line parser

* Update the link to conventionalcommits.org

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* threads2: simplify threads2

* Remove the reference to v1

* Fix gitignore for clippy exercise

* docs: add more info in threads

info.toml: 

```toml
[[exercises]]
name = "threads3"
path = "exercises/threads/threads3.rs"
mode = "test"
hint = """
An alternate way to handle concurrency between threads is to use
a mpsc (multiple producer, single consumer) channel to communicate.
With both a sending end and a receiving end, it's possible to
send values in one thread and receive them in another.
Multiple producers are possible by using clone() to create a duplicate
of the original sending end.
See https://doc.rust-lang.org/book/ch16-02-message-passing.html for more info.
"""
```

threads3'hint contains this link, so it should be placed in Further Information

* docs: update AUTHORS.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* solutions: intro, variables, functions, if, quiz1

* solutions: macros

* solutions: finish threads2 after syncing main

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: pavedroad <qcqs@outlook.com>
Signed-off-by: Dan Bond <danbond@protonmail.com>
Co-authored-by: Joshua Cook <jhrcook@Joshuas-MacBook-Pro.local>
Co-authored-by: Rogier 'DocWilco' Mulhuijzen <github@bsdchicks.com>
Co-authored-by: liv <mokou@fastmail.com>
Co-authored-by: Matt Nield <64328730+matthewjnield@users.noreply.github.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Adam Brewer <adamhb321@gmail.com>
Co-authored-by: The Bearodactyl <114454115+TheBearodactyl@users.noreply.github.com>
Co-authored-by: markgreene74 <markgreene74@users.noreply.github.com>
Co-authored-by: Versha Dhankar <45564258+VeeDeltaVee@users.noreply.github.com>
Co-authored-by: Tristram Oaten <tris@oat.sh>
Co-authored-by: danieltinazzi <Macbook@FengmingdeMacBook-Air.local>
Co-authored-by: Raymon Roos <raymon.roos@hotmail.com>
Co-authored-by: Sarup Banskota <sbanskota08@gmail.com>
Co-authored-by: liv <shadows_withal@fastmail.com>
Co-authored-by: Adwait Kumar Singh <adwsingh@amazon.com>
Co-authored-by: Dilshad <98999149+a-rustacean@users.noreply.github.com>
Co-authored-by: Matthias Richter <matthias.ri97@gmail.com>
Co-authored-by: J. Neuschäfer <j.neuschaefer@gmx.net>
Co-authored-by: Bastian Pedersen <bastian.tangedal@gmail.com>
Co-authored-by: Sergei Gerasenko <sgerasenko@conversantmedia.com>
Co-authored-by: LeverImmy <506503360@qq.com>
Co-authored-by: liv <shadows_withal@pm.me>
Co-authored-by: Luca Plian <98339220+AnonimAnonim2245@users.noreply.github.com>
Co-authored-by: reifenrath-dev <rene@reifenrath.dev>
Co-authored-by: Peter Neave <peter.neave@purple.telstra.com>
Co-authored-by: Jan <janbumer1@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Kyle VanderBeek <kylev@kylev.com>
Co-authored-by: pavedroad <qcqs@outlook.com>
Co-authored-by: luna <26529488+hyphena@users.noreply.github.com>
Co-authored-by: Evan Miller <evanmiller2112@gmail.com>
Co-authored-by: luvchurchill <46406654+luvchurchill@users.noreply.github.com>
Co-authored-by: parnavh <parnav100sach@gmail.com>
Co-authored-by: mo8it <mo8it@proton.me>
Co-authored-by: Guizoul <guizoul.abdellah@ine.inpt.ma>
Co-authored-by: guizo792 <95940388+guizo792@users.noreply.github.com>
Co-authored-by: liv <shadows@with.al>
Co-authored-by: Kazuki Matsuo <kazuki.matsuo.728@gmail.com>
Co-authored-by: Dan Bond <danbond@protonmail.com>
Co-authored-by: honeywest <honeywest@foxmail.com>
Co-authored-by: Paul Leydier <paul.leydier@compass-ft.com>
Co-authored-by: wznmickey <first@wznmickey.com>
Co-authored-by: NicolasRoelandt <NicolasRoelandt@users.noreply.github.com>
Co-authored-by: junderw <jonathan.underwood4649@gmail.com>
Co-authored-by: YunShu <im@yunshu.site>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants