catala/tests/array/good/aggregation_3.catala_en

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

101 lines
2.8 KiB
Plaintext
Raw Normal View History

2022-12-12 18:20:48 +03:00
```catala
declaration scope S:
output x content integer
scope S:
definition x equals 0
# Map
assertion (i + 2) for i among [1; 2; 3] = [3; 4; 5]
2022-12-12 18:20:48 +03:00
# Filter
assertion (list of i among [1; 2; 3] such that i >= 2) = [2; 3]
assertion ((i + 2) for i among [1; 2; 3] such that i > 2) = [5]
2022-12-12 18:20:48 +03:00
# Sum
assertion sum integer of [1; 2; 3] = 6
assertion sum integer of (i + 2) for i among [1; 2; 3] = 12
2022-12-12 18:20:48 +03:00
# Count
assertion number of [1; 2; 3] = 3
assertion (number of list of i among [1; 2; 3] such that i >= 2) = 2
2022-12-12 18:20:48 +03:00
# Extremum
assertion maximum of [1; 2; 3] or if list empty then 10 = 3
assertion maximum of (decimal of i) for i among [1; 2; 3] or if list empty then 10. = 3.
2022-12-12 18:20:48 +03:00
# Arg extremum
assertion (content of i among [1; 2; 3]
such that decimal of ((2 - i) * (2 - i)) is minimum
or if list empty then 42)
2022-12-12 18:20:48 +03:00
= 2
```
```catala-test-inline
$ catala Typecheck --check-invariants
┌─[RESULT]─
│ All invariant checks passed
└─
┌─[RESULT]─
│ Typechecking successful!
└─
```
2022-12-12 18:20:48 +03:00
```catala-test-inline
$ catala scopelang -s S
let scope S (x: integer|internal|output) =
let x : integer = error_empty ⟨ ⟨true ⊢ ⟨0⟩⟩ | false ⊢ ∅ ⟩;
2023-11-28 15:37:08 +03:00
assert (map (λ (i: integer) → i + 2) [1; 2; 3]) = [3; 4; 5];
assert (filter (λ (i: integer) → i >= 2) [1; 2; 3]) = [2; 3];
assert (map (λ (i: integer) → i + 2)
2023-11-28 15:37:08 +03:00
filter (λ (i: integer) → i > 2) [1; 2; 3])
= [5];
2023-04-17 16:10:47 +03:00
assert (reduce
2023-06-12 16:21:06 +03:00
(λ (sum1: integer) (sum2: integer) → sum1 + sum2)
0
2023-11-28 15:37:08 +03:00
[1; 2; 3])
2023-05-02 11:58:45 +03:00
= 6;
2023-04-17 16:10:47 +03:00
assert (reduce
2023-06-12 16:21:06 +03:00
(λ (sum1: integer) (sum2: integer) → sum1 + sum2)
0
2023-11-28 15:37:08 +03:00
map (λ (i: integer) → i + 2) [1; 2; 3])
2023-05-02 11:58:45 +03:00
= 12;
2023-11-28 15:37:08 +03:00
assert (length [1; 2; 3]) = 3;
assert (length filter (λ (i: integer) → i >= 2) [1; 2; 3]) = 2;
2023-04-17 16:10:47 +03:00
assert (reduce
(λ (max1: integer) (max2: integer) →
2023-06-12 16:21:06 +03:00
if max1 > max2 then max1 else max2)
10
2023-11-28 15:37:08 +03:00
[1; 2; 3])
= 3;
2023-04-17 16:10:47 +03:00
assert (reduce
(λ (max1: decimal) (max2: decimal) →
2023-06-12 16:21:06 +03:00
if max1 > max2 then max1 else max2)
10.
2023-11-28 15:37:08 +03:00
map (λ (i: integer) → to_rat i) [1; 2; 3])
2023-05-02 11:58:45 +03:00
= 3.;
assert (let weights : list of (integer, decimal) =
map (λ (i: integer) →
(i, let i1 : integer = i in
to_rat ((2 - i1) * (2 - i1))))
[1; 2; 3]
in
reduce
(λ (x1: (integer, decimal)) (x2: (integer, decimal)) →
if x1.1 < x2.1 then x1 else x2)
let i : integer = 42 in
(i, let i1 : integer = i in
to_rat ((2 - i1) * (2 - i1)))
weights).0
2023-05-02 11:58:45 +03:00
= 2
2022-12-12 18:20:48 +03:00
```
```catala-test-inline
$ catala test-scope S
┌─[RESULT]─
│ x = 0
└─
2022-12-12 18:20:48 +03:00
```