Skip to content

Commit ecf27ea

Browse files
committed
04/03: add solution
1 parent 010aa13 commit ecf27ea

File tree

14 files changed

+59
-121
lines changed

14 files changed

+59
-121
lines changed
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Custom equality testers
22

33
- [docs](https://vitest.dev/api/expect.html#expect-addequalitytesters)
4+
- Unlike matchers, equality testers are _applied recursively_! This is extremely useful if your custom data structure is nested in some other data structure.
5+
- Gotcha: Equality testers must be _synchronous_.
46

5-
Really neat way to define equality testers to compare otherwise incomparable objects, like `Response`.
7+
Really neat way to define equality testers to compare otherwise incomparable objects, like `Response`. - `Response` isn't the best example because equality testers _must be synchronous_.
8+
9+
## TODO
10+
11+
- [ ] Better name for the test. We aren't testing the `Measurement` class but something that uses it.

exercises/04.assertions/03.solution.custom-equality-testers/index.html

Lines changed: 0 additions & 15 deletions
This file was deleted.

exercises/04.assertions/03.solution.custom-equality-testers/public/vite.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

exercises/04.assertions/03.solution.custom-equality-testers/src/app.tsx

Lines changed: 0 additions & 38 deletions
This file was deleted.

exercises/04.assertions/03.solution.custom-equality-testers/src/file-preview.test.tsx

Lines changed: 0 additions & 9 deletions
This file was deleted.

exercises/04.assertions/03.solution.custom-equality-testers/src/file-preview.tsx

Lines changed: 0 additions & 20 deletions
This file was deleted.

exercises/04.assertions/03.solution.custom-equality-testers/src/index.css

Lines changed: 0 additions & 13 deletions
This file was deleted.

exercises/04.assertions/03.solution.custom-equality-testers/src/main.tsx

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Measurement } from './measurement'
2+
3+
test('compares measurements', () => {
4+
expect(new Measurement(10, 'in')).toEqual(new Measurement(25.4, 'cm'))
5+
})
6+
7+
test('compares nested measurements', () => {
8+
expect({
9+
id: 1,
10+
name: 'fabric',
11+
length: new Measurement(10, 'in'),
12+
}).toEqual({
13+
id: 1,
14+
name: 'fabric',
15+
length: new Measurement(25.4, 'cm'),
16+
})
17+
})
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
type MeasurementUnit = 'in' | 'cm'
2+
3+
export class Measurement {
4+
constructor(
5+
public readonly value: number,
6+
public readonly unit: MeasurementUnit,
7+
) {}
8+
9+
public equals(other: Measurement): boolean {
10+
if (this.unit === other.unit) {
11+
return this.value === other.value
12+
}
13+
14+
const thisValue = this.unit === 'in' ? this.value * 2.54 : this.value
15+
const otherValue = other.unit === 'in' ? other.value * 2.54 : other.value
16+
17+
return thisValue === otherValue
18+
}
19+
}

0 commit comments

Comments
 (0)