-
Notifications
You must be signed in to change notification settings - Fork 519
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
580 additions
and
39 deletions.
There are no files selected for viewing
182 changes: 182 additions & 0 deletions
182
exercises/practice/protein-translation/.meta/additional-tests.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
[ | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "methionine", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "AUG" | ||
}, | ||
"expected": "Some(\"methionine\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "cysteine tgt", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "UGU" | ||
}, | ||
"expected": "Some(\"cysteine\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "stop", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "UAA" | ||
}, | ||
"expected": "Some(\"stop codon\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "valine", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "GUU" | ||
}, | ||
"expected": "Some(\"valine\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "isoleucine", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "AUU" | ||
}, | ||
"expected": "Some(\"isoleucine\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "arginine cga", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "CGA" | ||
}, | ||
"expected": "Some(\"arginine\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "arginine aga", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "AGA" | ||
}, | ||
"expected": "Some(\"arginine\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "arginine agg", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "AGG" | ||
}, | ||
"expected": "Some(\"arginine\")" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "empty is invalid", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "" | ||
}, | ||
"expected": "None" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "x is not shorthand so is invalid", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "VWX" | ||
}, | ||
"expected": "None" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "too short is invalid", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "AU" | ||
}, | ||
"expected": "None" | ||
}, | ||
{ | ||
"uuid": "ecafab60-89f2-4680-9286-56b423e8a7b9", | ||
"description": "too long is invalid", | ||
"comments": [ | ||
"The original design of the exercise deviates from problem-specifications", | ||
"by having a name_for function for individual codons.", | ||
"Upstreaming is impossible as it would change the design of the exercise.", | ||
"Omitting them would leave the function untested, which would be confusing." | ||
], | ||
"property": "name_for", | ||
"input": { | ||
"name": "ATTA" | ||
}, | ||
"expected": "None" | ||
} | ||
] |
76 changes: 76 additions & 0 deletions
76
exercises/practice/protein-translation/.meta/test_template.tera
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
use protein_translation::*; | ||
|
||
{% for test in cases %} | ||
{# custom name_for tests are first, of_rna is supposed to build on it #} | ||
{% if test.property != "name_for" %}{% continue %}{% endif %} | ||
#[test] | ||
#[ignore] | ||
fn {{ test.description | snake_case }}() { | ||
let info = parse(make_pairs()); | ||
assert_eq!(info.name_for({{ test.input.name | json_encode() }}), {{ test.expected }}); | ||
} | ||
{% endfor -%} | ||
|
||
{% for test in cases %} | ||
{% if test.property != "proteins" %}{% continue %}{% endif %} | ||
#[test] | ||
#[ignore] | ||
fn {{ test.description | snake_case }}() { | ||
let info = parse(make_pairs()); | ||
assert_eq!( | ||
info.of_rna({{ test.input.strand | json_encode() }}), | ||
{% if test.expected is object %} | ||
None | ||
{% else %} | ||
Some(vec![ | ||
{% for s in test.expected %} | ||
"{{ s | lower }}" {% if not loop.last %} , {% endif %} | ||
{% endfor %} | ||
]) | ||
{% endif %}, | ||
); | ||
} | ||
{% endfor -%} | ||
|
||
// The input data constructor. Returns a list of codon, name pairs. | ||
fn make_pairs() -> Vec<(&'static str, &'static str)> { | ||
let grouped = vec![ | ||
("isoleucine", vec!["AUU", "AUC", "AUA"]), | ||
("valine", vec!["GUU", "GUC", "GUA", "GUG"]), | ||
("phenylalanine", vec!["UUU", "UUC"]), | ||
("methionine", vec!["AUG"]), | ||
("cysteine", vec!["UGU", "UGC"]), | ||
("alanine", vec!["GCU", "GCC", "GCA", "GCG"]), | ||
("glycine", vec!["GGU", "GGC", "GGA", "GGG"]), | ||
("proline", vec!["CCU", "CCC", "CCA", "CCG"]), | ||
("threonine", vec!["ACU", "ACC", "ACA", "ACG"]), | ||
("serine", vec!["UCU", "UCC", "UCA", "UCG"]), | ||
("tyrosine", vec!["UAU", "UAC"]), | ||
("tryptophan", vec!["UGG"]), | ||
("glutamine", vec!["CAA", "CAG"]), | ||
("asparagine", vec!["AAU", "AAC"]), | ||
("histidine", vec!["CAU", "CAC"]), | ||
("glutamic acid", vec!["GAA", "GAG"]), | ||
("aspartic acid", vec!["GAU", "GAC"]), | ||
{# | ||
("lysine", vec!["AAA", "AAG"]), | ||
Lysine is not listed in the canonical description | ||
and there are no tests for it. | ||
Unfortunately, problem-specifications has a test against | ||
"invalid" codons, where "AAA" is the invalid input. | ||
This technically maps to lysine, so we have to exclude it here | ||
to pass the test from upstream. | ||
#} | ||
("arginine", vec!["CGU", "CGC", "CGA", "CGG", "AGA", "AGG"]), | ||
("leucine", vec!["UUA", "UUG"]), | ||
("stop codon", vec!["UAA", "UAG", "UGA"]), | ||
]; | ||
let mut pairs = Vec::<(&'static str, &'static str)>::new(); | ||
for (name, codons) in grouped.into_iter() { | ||
for codon in codons { | ||
pairs.push((codon, name)); | ||
} | ||
} | ||
pairs.sort_by(|&(_, a), &(_, b)| a.cmp(b)); | ||
pairs | ||
} |
103 changes: 100 additions & 3 deletions
103
exercises/practice/protein-translation/.meta/tests.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,100 @@ | ||
# This is an auto-generated file. Regular comments will be removed when this | ||
# file is regenerated. Regenerating will not touch any manually added keys, | ||
# so comments can be added in a "comment" key. | ||
# This is an auto-generated file. | ||
# | ||
# Regenerating this file via `configlet sync` will: | ||
# - Recreate every `description` key/value pair | ||
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications | ||
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) | ||
# - Preserve any other key/value pair | ||
# | ||
# As user-added comments (using the # character) will be removed when this file | ||
# is regenerated, comments can be added via a `comment` key. | ||
|
||
[2c44f7bf-ba20-43f7-a3bf-f2219c0c3f98] | ||
description = "Empty RNA sequence results in no proteins" | ||
|
||
[96d3d44f-34a2-4db4-84cd-fff523e069be] | ||
description = "Methionine RNA sequence" | ||
|
||
[1b4c56d8-d69f-44eb-be0e-7b17546143d9] | ||
description = "Phenylalanine RNA sequence 1" | ||
|
||
[81b53646-bd57-4732-b2cb-6b1880e36d11] | ||
description = "Phenylalanine RNA sequence 2" | ||
|
||
[42f69d4f-19d2-4d2c-a8b0-f0ae9ee1b6b4] | ||
description = "Leucine RNA sequence 1" | ||
|
||
[ac5edadd-08ed-40a3-b2b9-d82bb50424c4] | ||
description = "Leucine RNA sequence 2" | ||
|
||
[8bc36e22-f984-44c3-9f6b-ee5d4e73f120] | ||
description = "Serine RNA sequence 1" | ||
|
||
[5c3fa5da-4268-44e5-9f4b-f016ccf90131] | ||
description = "Serine RNA sequence 2" | ||
|
||
[00579891-b594-42b4-96dc-7ff8bf519606] | ||
description = "Serine RNA sequence 3" | ||
|
||
[08c61c3b-fa34-4950-8c4a-133945570ef6] | ||
description = "Serine RNA sequence 4" | ||
|
||
[54e1e7d8-63c0-456d-91d2-062c72f8eef5] | ||
description = "Tyrosine RNA sequence 1" | ||
|
||
[47bcfba2-9d72-46ad-bbce-22f7666b7eb1] | ||
description = "Tyrosine RNA sequence 2" | ||
|
||
[3a691829-fe72-43a7-8c8e-1bd083163f72] | ||
description = "Cysteine RNA sequence 1" | ||
|
||
[1b6f8a26-ca2f-43b8-8262-3ee446021767] | ||
description = "Cysteine RNA sequence 2" | ||
|
||
[1e91c1eb-02c0-48a0-9e35-168ad0cb5f39] | ||
description = "Tryptophan RNA sequence" | ||
|
||
[e547af0b-aeab-49c7-9f13-801773a73557] | ||
description = "STOP codon RNA sequence 1" | ||
|
||
[67640947-ff02-4f23-a2ef-816f8a2ba72e] | ||
description = "STOP codon RNA sequence 2" | ||
|
||
[9c2ad527-ebc9-4ace-808b-2b6447cb54cb] | ||
description = "STOP codon RNA sequence 3" | ||
|
||
[f4d9d8ee-00a8-47bf-a1e3-1641d4428e54] | ||
description = "Sequence of two protein codons translates into proteins" | ||
|
||
[dd22eef3-b4f1-4ad6-bb0b-27093c090a9d] | ||
description = "Sequence of two different protein codons translates into proteins" | ||
|
||
[d0f295df-fb70-425c-946c-ec2ec185388e] | ||
description = "Translate RNA strand into correct protein list" | ||
|
||
[e30e8505-97ec-4e5f-a73e-5726a1faa1f4] | ||
description = "Translation stops if STOP codon at beginning of sequence" | ||
|
||
[5358a20b-6f4c-4893-bce4-f929001710f3] | ||
description = "Translation stops if STOP codon at end of two-codon sequence" | ||
|
||
[ba16703a-1a55-482f-bb07-b21eef5093a3] | ||
description = "Translation stops if STOP codon at end of three-codon sequence" | ||
|
||
[4089bb5a-d5b4-4e71-b79e-b8d1f14a2911] | ||
description = "Translation stops if STOP codon in middle of three-codon sequence" | ||
|
||
[2c2a2a60-401f-4a80-b977-e0715b23b93d] | ||
description = "Translation stops if STOP codon in middle of six-codon sequence" | ||
|
||
[1e75ea2a-f907-4994-ae5c-118632a1cb0f] | ||
description = "Non-existing codon can't translate" | ||
|
||
[9eac93f3-627a-4c90-8653-6d0a0595bc6f] | ||
description = "Unknown amino acids, not part of a codon, can't translate" | ||
|
||
[9d73899f-e68e-4291-b1e2-7bf87c00f024] | ||
description = "Incomplete RNA sequence can't translate" | ||
|
||
[43945cf7-9968-402d-ab9f-b8a28750b050] | ||
description = "Incomplete RNA sequence can translate if valid until a STOP codon" |
Oops, something went wrong.