Skip to content

Commit b3363f1

Browse files
authored
Sync strain tests (#1609)
* Update existing tests to match problem-specs * Add missing tests * Add `predicate` variables * Add missing return types for some predicates * Fix unused predicate parameters
1 parent 1c82c54 commit b3363f1

2 files changed

Lines changed: 92 additions & 28 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# This is an auto-generated file.
2+
#
3+
# Regenerating this file via `configlet sync` will:
4+
# - Recreate every `description` key/value pair
5+
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+
# - Preserve any other key/value pair
8+
#
9+
# As user-added comments (using the # character) will be removed when this file
10+
# is regenerated, comments can be added via a `comment` key.
11+
12+
[26af8c32-ba6a-4eb3-aa0a-ebd8f136e003]
13+
description = "keep on empty list returns empty list"
14+
15+
[f535cb4d-e99b-472a-bd52-9fa0ffccf454]
16+
description = "keeps everything"
17+
18+
[950b8e8e-f628-42a8-85e2-9b30f09cde38]
19+
description = "keeps nothing"
20+
21+
[92694259-6e76-470c-af87-156bdf75018a]
22+
description = "keeps first and last"
23+
24+
[938f7867-bfc7-449e-a21b-7b00cbb56994]
25+
description = "keeps neither first nor last"
26+
27+
[8908e351-4437-4d2b-a0f7-770811e48816]
28+
description = "keeps strings"
29+
30+
[2728036b-102a-4f1e-a3ef-eac6160d876a]
31+
description = "keeps lists"
32+
33+
[ef16beb9-8d84-451a-996a-14e80607fce6]
34+
description = "discard on empty list returns empty list"
35+
36+
[2f42f9bc-8e06-4afe-a222-051b5d8cd12a]
37+
description = "discards everything"
38+
39+
[ca990fdd-08c2-4f95-aa50-e0f5e1d6802b]
40+
description = "discards nothing"
41+
42+
[71595dae-d283-48ca-a52b-45fa96819d2f]
43+
description = "discards first and last"
44+
45+
[ae141f79-f86d-4567-b407-919eaca0f3dd]
46+
description = "discards neither first nor last"
47+
48+
[daf25b36-a59f-4f29-bcfe-302eb4e43609]
49+
description = "discards strings"
50+
51+
[a38d03f9-95ad-4459-80d1-48e937e4acaf]
52+
description = "discards lists"

exercises/practice/strain/strain.test.ts

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,35 @@ import { keep, discard } from './strain.ts'
33

44
describe('strain', () => {
55
it('keeps on empty array returns empty array', () => {
6-
expect(keep<number>([], (e: number) => e < 10)).toEqual([])
6+
const predicate = (_: number): boolean => true
7+
expect(keep<number>([], predicate)).toEqual([])
78
})
89

910
xit('keeps everything', () => {
10-
expect(keep<number>([1, 2, 3], (e: number) => e < 10)).toEqual([1, 2, 3])
11+
const predicate = (_: number): boolean => true
12+
expect(keep<number>([1, 3, 5], predicate)).toEqual([1, 3, 5])
13+
})
14+
15+
xit('keeps nothing', () => {
16+
const predicate = (_: number): boolean => false
17+
expect(keep<number>([1, 3, 5], predicate)).toEqual([])
1118
})
1219

1320
xit('keeps first and last', () => {
14-
expect(keep<number>([1, 2, 3], (e: number) => e % 2 === 1)).toEqual([1, 3])
21+
const predicate = (e: number): boolean => e % 2 === 1
22+
expect(keep<number>([1, 2, 3], predicate)).toEqual([1, 3])
1523
})
1624

1725
xit('keeps neither first nor last', () => {
18-
expect(keep<number>([1, 2, 3, 4, 5], (e: number) => e % 2 === 0)).toEqual([
19-
2, 4,
20-
])
26+
const predicate = (e: number): boolean => e % 2 === 0
27+
expect(keep<number>([1, 2, 3], predicate)).toEqual([2])
2128
})
2229

2330
xit('keeps strings', () => {
24-
const words = 'apple zebra banana zombies cherimoya zelot'.split(' ')
25-
const result = keep<string>(
26-
words,
27-
(word: string) => word.indexOf('z') === 0
28-
)
29-
expect(result).toEqual('zebra zombies zelot'.split(' '))
31+
const words = ['apple', 'zebra', 'banana', 'zombies', 'cherimoya', 'zealot']
32+
const predicate = (word: string): boolean => word.indexOf('z') === 0
33+
const result = keep<string>(words, predicate)
34+
expect(result).toEqual(['zebra', 'zombies', 'zealot'])
3035
})
3136

3237
xit('keeps arrays', () => {
@@ -39,7 +44,8 @@ describe('strain', () => {
3944
[2, 2, 1],
4045
[1, 2, 5],
4146
]
42-
const result = keep<number[]>(rows, (row: number[]) => row.indexOf(5) > -1)
47+
const predicate = (row: number[]): boolean => row.indexOf(5) > -1
48+
const result = keep<number[]>(rows, predicate)
4349
expect(result).toEqual([
4450
[5, 5, 5],
4551
[5, 1, 2],
@@ -49,29 +55,36 @@ describe('strain', () => {
4955
})
5056

5157
xit('empty discard', () => {
52-
expect(discard<number>([], (e: number) => e < 10)).toEqual([])
58+
const predicate = (_: number): boolean => true
59+
expect(discard<number>([], predicate)).toEqual([])
60+
})
61+
62+
xit('discards everything', () => {
63+
const predicate = (_: number): boolean => true
64+
expect(discard<number>([1, 3, 5], predicate)).toEqual([])
5365
})
5466

5567
it('discards nothing', () => {
56-
expect(discard<number>([1, 2, 3], (e: number) => e > 10)).toEqual([1, 2, 3])
68+
const predicate = (_: number): boolean => false
69+
expect(discard<number>([1, 3, 5], predicate)).toEqual([1, 3, 5])
5770
})
5871

5972
xit('discards first and last', () => {
60-
expect(discard<number>([1, 2, 3], (e: number) => e % 2 === 1)).toEqual([2])
73+
const predicate = (e: number): boolean => e % 2 === 1
74+
expect(discard<number>([1, 2, 3], predicate)).toEqual([2])
6175
})
6276

6377
xit('discards neither first nor last', () => {
64-
const result = discard<number>([1, 2, 3, 4, 5], (e: number) => e % 2 === 0)
65-
expect(result).toEqual([1, 3, 5])
78+
const predicate = (e: number): boolean => e % 2 === 0
79+
const result = discard<number>([1, 2, 3], predicate)
80+
expect(result).toEqual([1, 3])
6681
})
6782

6883
xit('discards strings', () => {
69-
const words = 'apple zebra banana zombies cherimoya zelot'.split(' ')
70-
const result = discard<string>(
71-
words,
72-
(word: string) => word.indexOf('z') === 0
73-
)
74-
expect(result).toEqual('apple banana cherimoya'.split(' '))
84+
const words = ['apple', 'zebra', 'banana', 'zombies', 'cherimoya', 'zealot']
85+
const predicate = (word: string): boolean => word.indexOf('z') === 0
86+
const result = discard<string>(words, predicate)
87+
expect(result).toEqual(['apple', 'banana', 'cherimoya'])
7588
})
7689

7790
xit('discards arrays', () => {
@@ -84,10 +97,9 @@ describe('strain', () => {
8497
[2, 2, 1],
8598
[1, 2, 5],
8699
]
87-
const result = discard<number[]>(
88-
rows,
89-
(row: number[]) => row.indexOf(5) > -1
90-
)
100+
101+
const predicate = (row: number[]): boolean => row.indexOf(5) > -1
102+
const result = discard<number[]>(rows, predicate)
91103
expect(result).toEqual([
92104
[1, 2, 3],
93105
[2, 1, 2],

0 commit comments

Comments
 (0)