Skip to content

Add subtract to math.js #5

Mergedsyntaqx merged into mainrequested by syntaqx

Approved by g1t

4 files+7−880/4 viewed
+0−50
1−# Checks Docker on g1t's hosted runners: a service container reached by
2−# name, a step run in an image, a build, and a job inside a container.
3−name: Docker
4−
5−on:
6− workflow_dispatch:
7−
8−permissions:
9− contents: read
10−
11−jobs:
12− services:
13− name: Services and docker run
14− runs-on: ubuntu-latest
15− timeout-minutes: 15
16− services:
17− redis:
18− image: redis:7-alpine
19− options: >-
20− --health-cmd "redis-cli ping"
21− --health-interval 2s
22− --health-timeout 2s
23− --health-retries 15
24− ports:
25− - 6379:6379
26− steps:
27− - uses: actions/checkout@v5
28− - name: Docker is there
29− run: docker version
30− - name: Reach the service by name
31− run: docker run --rm redis:7-alpine redis-cli -h redis ping
32− - name: Build an image
33− run: |
34− printf 'FROM alpine:3.20\nRUN echo built > /built\nCMD cat /built\n' > Dockerfile.smoke
35− docker build -t smoke:latest -f Dockerfile.smoke .
36− docker run --rm smoke:latest
37− - name: A step in an image
38− uses: docker://alpine:3.20
39− with:
40− args: echo hello from a docker step
41−
42− container:
43− name: Job in a container
44− runs-on: ubuntu-latest
45− timeout-minutes: 15
46− container:
47− image: node:24-bookworm-slim
48− steps:
49− - uses: actions/checkout@v5
50− - run: node --version && cat /etc/os-release | head -2
+0−34
11 # automation lab
2−
3−## Functions
4−
5−All functions are exported from `math.js`.
6−
7−```js
8−const { add, multiply, power, mean, median, standard_deviation } = require("./math");
9−```
10−
11−- `add(a, b)`: returns the sum of `a` and `b`.
12− ```js
13− add(2, 3); // 5
14− ```
15−- `multiply(a, b)`: returns the product of `a` and `b`.
16− ```js
17− multiply(4, 5); // 20
18− ```
19−- `power(base, exponent)`: returns `base` raised to a whole-number `exponent`; throws a `RangeError` if `exponent` is negative.
20− ```js
21− power(2, 3); // 8
22− ```
23−- `mean(numbers)`: returns the average of an array of numbers; throws a `TypeError` if the array is empty.
24− ```js
25− mean([1, 2, 3, 4]); // 2.5
26− ```
27−- `median(numbers)`: returns the middle value (the average of the two middle values when the length is even); throws a `TypeError` if the array is empty.
28− ```js
29− median([3, 1, 2]); // 2
30− median([1, 2, 3, 4]); // 2.5
31− ```
32−- `standard_deviation(numbers)`: returns the population standard deviation; throws a `TypeError` if the array is empty.
33− ```js
34− standard_deviation([2, 4, 4, 4, 5, 5, 7, 9]); // 2
35− ```
+6−1
99 return a * b;
1010 }
1111
12+/** Returns a minus b. */
13+function subtract(a, b) {
14+ return a - b;
15+}
16+
1217 /** Returns base raised to the whole-number exponent; throws a RangeError if exponent is negative. */
1318 function power(base, exponent) {
1419 if (exponent < 0) {
4651 return Math.sqrt(variance);
4752 }
4853
49−module.exports = { add, multiply, power, mean, median, standard_deviation };
54+module.exports = { add, multiply, subtract, power, mean, median, standard_deviation };
+1−3
11 const assert = require("node:assert");
22 const math = require("./math");
3+assert.strictEqual(math.subtract(5, 3), 2);
34
45 assert.strictEqual(math.add(2, 3), 5);
56 assert.strictEqual(math.multiply(4, 5), 20);
67 assert.strictEqual(math.power(2, 10), 1024);
78 assert.strictEqual(math.power(5, 0), 1);
89 assert.throws(() => math.power(2, -1), RangeError);
9−assert.strictEqual(math.mean([1, 2, 3]), 2);
1010 assert.strictEqual(math.mean([1, 2, 3, 4]), 2.5);
11−assert.strictEqual(math.median([1, 2, 3]), 2);
1211 assert.strictEqual(math.median([3, 1, 2]), 2);
1312 assert.strictEqual(math.median([4, 1, 3, 2]), 2.5);
14−assert.strictEqual(math.standard_deviation([1, 2, 3]), Math.sqrt(2 / 3));
1513 assert.strictEqual(math.standard_deviation([2, 4, 4, 4, 5, 5, 7, 9]), 2);
1614 for (const fn of [math.mean, math.median, math.standard_deviation]) {
1715 assert.throws(() => fn([]), TypeError);