diff --git a/exercises/practice/strain/.meta/tests.toml b/exercises/practice/strain/.meta/tests.toml new file mode 100644 index 000000000..3a617b4a9 --- /dev/null +++ b/exercises/practice/strain/.meta/tests.toml @@ -0,0 +1,52 @@ +# 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. + +[26af8c32-ba6a-4eb3-aa0a-ebd8f136e003] +description = "keep on empty list returns empty list" + +[f535cb4d-e99b-472a-bd52-9fa0ffccf454] +description = "keeps everything" + +[950b8e8e-f628-42a8-85e2-9b30f09cde38] +description = "keeps nothing" + +[92694259-6e76-470c-af87-156bdf75018a] +description = "keeps first and last" + +[938f7867-bfc7-449e-a21b-7b00cbb56994] +description = "keeps neither first nor last" + +[8908e351-4437-4d2b-a0f7-770811e48816] +description = "keeps strings" + +[2728036b-102a-4f1e-a3ef-eac6160d876a] +description = "keeps lists" + +[ef16beb9-8d84-451a-996a-14e80607fce6] +description = "discard on empty list returns empty list" + +[2f42f9bc-8e06-4afe-a222-051b5d8cd12a] +description = "discards everything" + +[ca990fdd-08c2-4f95-aa50-e0f5e1d6802b] +description = "discards nothing" + +[71595dae-d283-48ca-a52b-45fa96819d2f] +description = "discards first and last" + +[ae141f79-f86d-4567-b407-919eaca0f3dd] +description = "discards neither first nor last" + +[daf25b36-a59f-4f29-bcfe-302eb4e43609] +description = "discards strings" + +[a38d03f9-95ad-4459-80d1-48e937e4acaf] +description = "discards lists" diff --git a/exercises/practice/strain/strain.test.ts b/exercises/practice/strain/strain.test.ts index 20eb49d08..fc9ca1d2d 100644 --- a/exercises/practice/strain/strain.test.ts +++ b/exercises/practice/strain/strain.test.ts @@ -3,30 +3,35 @@ import { keep, discard } from './strain.ts' describe('strain', () => { it('keeps on empty array returns empty array', () => { - expect(keep([], (e: number) => e < 10)).toEqual([]) + const predicate = (_: number): boolean => true + expect(keep([], predicate)).toEqual([]) }) xit('keeps everything', () => { - expect(keep([1, 2, 3], (e: number) => e < 10)).toEqual([1, 2, 3]) + const predicate = (_: number): boolean => true + expect(keep([1, 3, 5], predicate)).toEqual([1, 3, 5]) + }) + + xit('keeps nothing', () => { + const predicate = (_: number): boolean => false + expect(keep([1, 3, 5], predicate)).toEqual([]) }) xit('keeps first and last', () => { - expect(keep([1, 2, 3], (e: number) => e % 2 === 1)).toEqual([1, 3]) + const predicate = (e: number): boolean => e % 2 === 1 + expect(keep([1, 2, 3], predicate)).toEqual([1, 3]) }) xit('keeps neither first nor last', () => { - expect(keep([1, 2, 3, 4, 5], (e: number) => e % 2 === 0)).toEqual([ - 2, 4, - ]) + const predicate = (e: number): boolean => e % 2 === 0 + expect(keep([1, 2, 3], predicate)).toEqual([2]) }) xit('keeps strings', () => { - const words = 'apple zebra banana zombies cherimoya zelot'.split(' ') - const result = keep( - words, - (word: string) => word.indexOf('z') === 0 - ) - expect(result).toEqual('zebra zombies zelot'.split(' ')) + const words = ['apple', 'zebra', 'banana', 'zombies', 'cherimoya', 'zealot'] + const predicate = (word: string): boolean => word.indexOf('z') === 0 + const result = keep(words, predicate) + expect(result).toEqual(['zebra', 'zombies', 'zealot']) }) xit('keeps arrays', () => { @@ -39,7 +44,8 @@ describe('strain', () => { [2, 2, 1], [1, 2, 5], ] - const result = keep(rows, (row: number[]) => row.indexOf(5) > -1) + const predicate = (row: number[]): boolean => row.indexOf(5) > -1 + const result = keep(rows, predicate) expect(result).toEqual([ [5, 5, 5], [5, 1, 2], @@ -49,29 +55,36 @@ describe('strain', () => { }) xit('empty discard', () => { - expect(discard([], (e: number) => e < 10)).toEqual([]) + const predicate = (_: number): boolean => true + expect(discard([], predicate)).toEqual([]) + }) + + xit('discards everything', () => { + const predicate = (_: number): boolean => true + expect(discard([1, 3, 5], predicate)).toEqual([]) }) it('discards nothing', () => { - expect(discard([1, 2, 3], (e: number) => e > 10)).toEqual([1, 2, 3]) + const predicate = (_: number): boolean => false + expect(discard([1, 3, 5], predicate)).toEqual([1, 3, 5]) }) xit('discards first and last', () => { - expect(discard([1, 2, 3], (e: number) => e % 2 === 1)).toEqual([2]) + const predicate = (e: number): boolean => e % 2 === 1 + expect(discard([1, 2, 3], predicate)).toEqual([2]) }) xit('discards neither first nor last', () => { - const result = discard([1, 2, 3, 4, 5], (e: number) => e % 2 === 0) - expect(result).toEqual([1, 3, 5]) + const predicate = (e: number): boolean => e % 2 === 0 + const result = discard([1, 2, 3], predicate) + expect(result).toEqual([1, 3]) }) xit('discards strings', () => { - const words = 'apple zebra banana zombies cherimoya zelot'.split(' ') - const result = discard( - words, - (word: string) => word.indexOf('z') === 0 - ) - expect(result).toEqual('apple banana cherimoya'.split(' ')) + const words = ['apple', 'zebra', 'banana', 'zombies', 'cherimoya', 'zealot'] + const predicate = (word: string): boolean => word.indexOf('z') === 0 + const result = discard(words, predicate) + expect(result).toEqual(['apple', 'banana', 'cherimoya']) }) xit('discards arrays', () => { @@ -84,10 +97,9 @@ describe('strain', () => { [2, 2, 1], [1, 2, 5], ] - const result = discard( - rows, - (row: number[]) => row.indexOf(5) > -1 - ) + + const predicate = (row: number[]): boolean => row.indexOf(5) > -1 + const result = discard(rows, predicate) expect(result).toEqual([ [1, 2, 3], [2, 1, 2],