@@ -2,36 +2,68 @@ import { describe, expect, test, xtest } from '@jest/globals';
22import { translate } from './protein-translation' ;
33
44describe ( 'ProteinTranslation' , ( ) => {
5- test ( 'Empty RNA has no proteins' , ( ) => {
5+ test ( 'Empty RNA sequence results in no proteins' , ( ) => {
66 expect ( translate ( ) ) . toEqual ( [ ] ) ;
77 } ) ;
88
99 describe ( 'Single codons' , ( ) => {
10- const mapping = [
11- [ 'Methionine' , [ 'AUG' ] ] ,
12- [ 'Phenylalanine' , [ 'UUU' , 'UUC' ] ] ,
13- [ 'Leucine' , [ 'UUA' , 'UUG' ] ] ,
14- [ 'Serine' , [ 'UCU' , 'UCC' , 'UCA' , 'UCG' ] ] ,
15- [ 'Tyrosine' , [ 'UAU' , 'UAC' ] ] ,
16- [ 'Cysteine' , [ 'UGU' , 'UGC' ] ] ,
17- [ 'Tryptophan' , [ 'UGG' ] ] ,
18- ] ;
19-
20- mapping . forEach ( ( [ protein , codons ] ) => {
21- codons . forEach ( ( codon , index ) => {
22- const seq = index + 1 ;
23- xtest ( `${ protein } RNA sequence ${ seq } translates into ${ protein } ` , ( ) => {
24- expect ( translate ( codon ) ) . toEqual ( [ protein ] ) ;
25- } ) ;
26- } ) ;
27- } ) ;
28-
29- const stopCodons = [ 'UAA' , 'UAG' , 'UGA' ] ;
30-
31- stopCodons . forEach ( ( codon , index ) => {
32- xtest ( `STOP codon RNA sequence ${ index + 1 } ` , ( ) => {
33- expect ( translate ( codon ) ) . toEqual ( [ ] ) ;
34- } ) ;
10+ xtest ( 'Methionine RNA sequence' , ( ) => {
11+ expect ( translate ( 'AUG' ) ) . toEqual ( [ 'Methionine' ] ) ;
12+ } ) ;
13+
14+ xtest ( 'Phenylalanine RNA sequence 1' , ( ) => {
15+ expect ( translate ( 'UUU' ) ) . toEqual ( [ 'Phenylalanine' ] ) ;
16+ } ) ;
17+ xtest ( 'Phenylalanine RNA sequence 2' , ( ) => {
18+ expect ( translate ( 'UUC' ) ) . toEqual ( [ 'Phenylalanine' ] ) ;
19+ } ) ;
20+
21+ xtest ( 'Leucine RNA sequence 1' , ( ) => {
22+ expect ( translate ( 'UUA' ) ) . toEqual ( [ 'Leucine' ] ) ;
23+ } ) ;
24+ xtest ( 'Leucine RNA sequence 2' , ( ) => {
25+ expect ( translate ( 'UUG' ) ) . toEqual ( [ 'Leucine' ] ) ;
26+ } ) ;
27+
28+ xtest ( 'Serine RNA sequence 1' , ( ) => {
29+ expect ( translate ( 'UCU' ) ) . toEqual ( [ 'Serine' ] ) ;
30+ } ) ;
31+ xtest ( 'Serine RNA sequence 2' , ( ) => {
32+ expect ( translate ( 'UCC' ) ) . toEqual ( [ 'Serine' ] ) ;
33+ } ) ;
34+ xtest ( 'Serine RNA sequence 3' , ( ) => {
35+ expect ( translate ( 'UCA' ) ) . toEqual ( [ 'Serine' ] ) ;
36+ } ) ;
37+ xtest ( 'Serine RNA sequence 4' , ( ) => {
38+ expect ( translate ( 'UCG' ) ) . toEqual ( [ 'Serine' ] ) ;
39+ } ) ;
40+
41+ xtest ( 'Tyrosine RNA sequence 1' , ( ) => {
42+ expect ( translate ( 'UAU' ) ) . toEqual ( [ 'Tyrosine' ] ) ;
43+ } ) ;
44+ xtest ( 'Tyrosine RNA sequence 2' , ( ) => {
45+ expect ( translate ( 'UAC' ) ) . toEqual ( [ 'Tyrosine' ] ) ;
46+ } ) ;
47+
48+ xtest ( 'Cysteine RNA sequence 1' , ( ) => {
49+ expect ( translate ( 'UGU' ) ) . toEqual ( [ 'Cysteine' ] ) ;
50+ } ) ;
51+ xtest ( 'Cysteine RNA sequence 2' , ( ) => {
52+ expect ( translate ( 'UGC' ) ) . toEqual ( [ 'Cysteine' ] ) ;
53+ } ) ;
54+
55+ xtest ( 'Tryptophan RNA sequence' , ( ) => {
56+ expect ( translate ( 'UGG' ) ) . toEqual ( [ 'Tryptophan' ] ) ;
57+ } ) ;
58+
59+ xtest ( 'STOP codon RNA sequence 1' , ( ) => {
60+ expect ( translate ( 'UAA' ) ) . toEqual ( [ ] ) ;
61+ } ) ;
62+ xtest ( 'STOP codon RNA sequence 2' , ( ) => {
63+ expect ( translate ( 'UAG' ) ) . toEqual ( [ ] ) ;
64+ } ) ;
65+ xtest ( 'STOP codon RNA sequence 3' , ( ) => {
66+ expect ( translate ( 'UGA' ) ) . toEqual ( [ ] ) ;
3567 } ) ;
3668 } ) ;
3769
@@ -71,13 +103,13 @@ describe('ProteinTranslation', () => {
71103 'Tyrosine' ,
72104 ] ) ;
73105 } ) ;
74- } ) ;
75106
76- describe ( 'Unexpected strands' , ( ) => {
77- xtest ( "Non-existing codon can't translate" , ( ) => {
78- expect ( ( ) => translate ( 'AAA' ) ) . toThrow ( new Error ( 'Invalid codon' ) ) ;
107+ xtest ( 'Sequence of two non-STOP codons does not translate to a STOP codon' , ( ) => {
108+ expect ( translate ( 'AUGAUG' ) ) . toEqual ( [ 'Methionine' , 'Methionine' ] ) ;
79109 } ) ;
110+ } ) ;
80111
112+ describe ( 'Unexpected strands' , ( ) => {
81113 xtest ( "Unknown amino acids, not part of a codon, can't translate" , ( ) => {
82114 expect ( ( ) => translate ( 'XYZ' ) ) . toThrow ( new Error ( 'Invalid codon' ) ) ;
83115 } ) ;
0 commit comments