trackler 2.2.1.85 → 2.2.1.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/alphametics/canonical-data.json +29 -11
- data/problem-specifications/exercises/binary-search-tree/canonical-data.json +177 -0
- data/problem-specifications/package.json +2 -2
- data/problem-specifications/yarn.lock +61 -51
- data/tracks/bash/CONTRIBUTING.md +10 -6
- data/tracks/bash/README.md +1 -0
- data/tracks/bash/exercises/acronym/README.md +1 -1
- data/tracks/bash/exercises/anagram/README.md +1 -1
- data/tracks/bash/exercises/anagram/{anagram_tests.sh → anagram_test.sh} +0 -0
- data/tracks/bash/exercises/armstrong-numbers/armstrong_numbers_test.sh +25 -17
- data/tracks/bash/exercises/armstrong-numbers/example.sh +18 -12
- data/tracks/bash/exercises/atbash-cipher/README.md +1 -1
- data/tracks/bash/exercises/atbash-cipher/{atbash_cipher_tests.sh → atbash_cipher_test.sh} +0 -0
- data/tracks/bash/exercises/difference-of-squares/README.md +1 -1
- data/tracks/bash/exercises/gigasecond/README.md +1 -1
- data/tracks/bash/exercises/hamming/README.md +1 -1
- data/tracks/bash/exercises/hello-world/README.md +1 -1
- data/tracks/bash/exercises/leap/README.md +1 -1
- data/tracks/bash/exercises/luhn/README.md +1 -1
- data/tracks/bash/exercises/nucleotide-count/README.md +1 -1
- data/tracks/bash/exercises/pangram/README.md +1 -1
- data/tracks/bash/exercises/pangram/{pangram_tests.sh → pangram_test.sh} +0 -0
- data/tracks/bash/exercises/phone-number/README.md +1 -1
- data/tracks/bash/exercises/phone-number/{phone_number_tests.sh → phone_number_test.sh} +0 -0
- data/tracks/bash/exercises/raindrops/README.md +1 -1
- data/tracks/bash/exercises/rna-transcription/README.md +1 -1
- data/tracks/bash/exercises/triangle/example.sh +23 -4
- data/tracks/bash/exercises/triangle/triangle_test.sh +17 -0
- data/tracks/bash/exercises/two-fer/README.md +1 -1
- data/tracks/bash/exercises/word-count/README.md +1 -1
- data/tracks/c/config.json +11 -0
- data/tracks/c/exercises/complex-numbers/README.md +67 -0
- data/tracks/c/exercises/complex-numbers/makefile +27 -0
- data/tracks/c/exercises/complex-numbers/src/complex_numbers.c +46 -0
- data/tracks/c/exercises/complex-numbers/src/complex_numbers.h +19 -0
- data/tracks/c/exercises/complex-numbers/src/example.c +80 -0
- data/tracks/c/exercises/complex-numbers/test/test_complex_numbers.c +397 -0
- data/tracks/c/exercises/complex-numbers/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/complex-numbers/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/complex-numbers/test/vendor/unity_internals.h +701 -0
- data/tracks/crystal/.github/stale.yml +18 -0
- data/tracks/csharp/exercises/bob/README.md +3 -2
- data/tracks/ecmascript/config.json +4 -4
- data/tracks/fsharp/exercises/bob/README.md +4 -2
- data/tracks/fsharp/exercises/react/ReactTest.fs +137 -74
- data/tracks/fsharp/generators/Generators.fs +76 -0
- data/tracks/go/exercises/tree-building/tree_test.go +15 -0
- data/tracks/haskell/.travis.yml +1 -1
- data/tracks/haskell/exercises/accumulate/stack.yaml +1 -1
- data/tracks/haskell/exercises/acronym/package.yaml +1 -1
- data/tracks/haskell/exercises/acronym/stack.yaml +1 -1
- data/tracks/haskell/exercises/all-your-base/package.yaml +1 -1
- data/tracks/haskell/exercises/all-your-base/stack.yaml +1 -1
- data/tracks/haskell/exercises/all-your-base/test/Tests.hs +6 -6
- data/tracks/haskell/exercises/allergies/package.yaml +1 -1
- data/tracks/haskell/exercises/allergies/stack.yaml +1 -1
- data/tracks/haskell/exercises/alphametics/stack.yaml +1 -1
- data/tracks/haskell/exercises/anagram/package.yaml +1 -1
- data/tracks/haskell/exercises/anagram/stack.yaml +1 -1
- data/tracks/haskell/exercises/atbash-cipher/package.yaml +1 -1
- data/tracks/haskell/exercises/atbash-cipher/stack.yaml +1 -1
- data/tracks/haskell/exercises/bank-account/stack.yaml +1 -1
- data/tracks/haskell/exercises/beer-song/stack.yaml +1 -1
- data/tracks/haskell/exercises/binary-search-tree/package.yaml +1 -1
- data/tracks/haskell/exercises/binary-search-tree/stack.yaml +1 -1
- data/tracks/haskell/exercises/binary-search-tree/test/Tests.hs +3 -0
- data/tracks/haskell/exercises/binary/stack.yaml +1 -1
- data/tracks/haskell/exercises/bob/package.yaml +1 -1
- data/tracks/haskell/exercises/bob/stack.yaml +1 -1
- data/tracks/haskell/exercises/bowling/stack.yaml +1 -1
- data/tracks/haskell/exercises/bracket-push/package.yaml +1 -1
- data/tracks/haskell/exercises/bracket-push/stack.yaml +1 -1
- data/tracks/haskell/exercises/change/package.yaml +1 -1
- data/tracks/haskell/exercises/change/stack.yaml +1 -1
- data/tracks/haskell/exercises/clock/stack.yaml +1 -1
- data/tracks/haskell/exercises/collatz-conjecture/package.yaml +1 -1
- data/tracks/haskell/exercises/collatz-conjecture/stack.yaml +1 -1
- data/tracks/haskell/exercises/complex-numbers/stack.yaml +1 -1
- data/tracks/haskell/exercises/connect/package.yaml +1 -1
- data/tracks/haskell/exercises/connect/stack.yaml +1 -1
- data/tracks/haskell/exercises/crypto-square/package.yaml +1 -1
- data/tracks/haskell/exercises/crypto-square/stack.yaml +1 -1
- data/tracks/haskell/exercises/custom-set/stack.yaml +1 -1
- data/tracks/haskell/exercises/diamond/package.yaml +1 -1
- data/tracks/haskell/exercises/diamond/stack.yaml +1 -1
- data/tracks/haskell/exercises/difference-of-squares/package.yaml +1 -1
- data/tracks/haskell/exercises/difference-of-squares/stack.yaml +1 -1
- data/tracks/haskell/exercises/dominoes/package.yaml +1 -1
- data/tracks/haskell/exercises/dominoes/stack.yaml +1 -1
- data/tracks/haskell/exercises/etl/stack.yaml +1 -1
- data/tracks/haskell/exercises/food-chain/stack.yaml +1 -1
- data/tracks/haskell/exercises/forth/stack.yaml +1 -1
- data/tracks/haskell/exercises/gigasecond/stack.yaml +1 -1
- data/tracks/haskell/exercises/go-counting/stack.yaml +1 -1
- data/tracks/haskell/exercises/grade-school/stack.yaml +1 -1
- data/tracks/haskell/exercises/grains/stack.yaml +1 -1
- data/tracks/haskell/exercises/hamming/stack.yaml +1 -1
- data/tracks/haskell/exercises/hello-world/stack.yaml +1 -1
- data/tracks/haskell/exercises/hexadecimal/stack.yaml +1 -1
- data/tracks/haskell/exercises/house/stack.yaml +1 -1
- data/tracks/haskell/exercises/isbn-verifier/examples/success-standard/src/IsbnVerifier.hs +1 -0
- data/tracks/haskell/exercises/isbn-verifier/package.yaml +1 -1
- data/tracks/haskell/exercises/isbn-verifier/stack.yaml +1 -1
- data/tracks/haskell/exercises/isbn-verifier/test/Tests.hs +4 -0
- data/tracks/haskell/exercises/isogram/stack.yaml +1 -1
- data/tracks/haskell/exercises/kindergarten-garden/stack.yaml +1 -1
- data/tracks/haskell/exercises/largest-series-product/stack.yaml +1 -1
- data/tracks/haskell/exercises/leap/stack.yaml +1 -1
- data/tracks/haskell/exercises/lens-person/stack.yaml +1 -1
- data/tracks/haskell/exercises/linked-list/stack.yaml +1 -1
- data/tracks/haskell/exercises/list-ops/stack.yaml +1 -1
- data/tracks/haskell/exercises/luhn/package.yaml +1 -1
- data/tracks/haskell/exercises/luhn/stack.yaml +1 -1
- data/tracks/haskell/exercises/luhn/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/matrix/stack.yaml +1 -1
- data/tracks/haskell/exercises/meetup/package.yaml +1 -1
- data/tracks/haskell/exercises/meetup/stack.yaml +1 -1
- data/tracks/haskell/exercises/minesweeper/stack.yaml +1 -1
- data/tracks/haskell/exercises/nth-prime/stack.yaml +1 -1
- data/tracks/haskell/exercises/nucleotide-count/stack.yaml +1 -1
- data/tracks/haskell/exercises/ocr-numbers/stack.yaml +1 -1
- data/tracks/haskell/exercises/octal/stack.yaml +1 -1
- data/tracks/haskell/exercises/palindrome-products/stack.yaml +1 -1
- data/tracks/haskell/exercises/pangram/stack.yaml +1 -1
- data/tracks/haskell/exercises/parallel-letter-frequency/stack.yaml +1 -1
- data/tracks/haskell/exercises/pascals-triangle/stack.yaml +1 -1
- data/tracks/haskell/exercises/perfect-numbers/stack.yaml +1 -1
- data/tracks/haskell/exercises/phone-number/stack.yaml +1 -1
- data/tracks/haskell/exercises/pig-latin/stack.yaml +1 -1
- data/tracks/haskell/exercises/pov/stack.yaml +1 -1
- data/tracks/haskell/exercises/prime-factors/stack.yaml +1 -1
- data/tracks/haskell/exercises/pythagorean-triplet/stack.yaml +1 -1
- data/tracks/haskell/exercises/queen-attack/stack.yaml +1 -1
- data/tracks/haskell/exercises/rail-fence-cipher/package.yaml +1 -1
- data/tracks/haskell/exercises/rail-fence-cipher/stack.yaml +1 -1
- data/tracks/haskell/exercises/raindrops/stack.yaml +1 -1
- data/tracks/haskell/exercises/rna-transcription/package.yaml +1 -1
- data/tracks/haskell/exercises/rna-transcription/stack.yaml +1 -1
- data/tracks/haskell/exercises/rna-transcription/test/Tests.hs +0 -12
- data/tracks/haskell/exercises/robot-name/stack.yaml +1 -1
- data/tracks/haskell/exercises/robot-simulator/stack.yaml +1 -1
- data/tracks/haskell/exercises/roman-numerals/stack.yaml +1 -1
- data/tracks/haskell/exercises/rotational-cipher/stack.yaml +1 -1
- data/tracks/haskell/exercises/run-length-encoding/stack.yaml +1 -1
- data/tracks/haskell/exercises/saddle-points/stack.yaml +1 -1
- data/tracks/haskell/exercises/say/stack.yaml +1 -1
- data/tracks/haskell/exercises/scrabble-score/stack.yaml +1 -1
- data/tracks/haskell/exercises/secret-handshake/stack.yaml +1 -1
- data/tracks/haskell/exercises/series/stack.yaml +1 -1
- data/tracks/haskell/exercises/sgf-parsing/stack.yaml +1 -1
- data/tracks/haskell/exercises/sieve/stack.yaml +1 -1
- data/tracks/haskell/exercises/simple-cipher/stack.yaml +1 -1
- data/tracks/haskell/exercises/simple-linked-list/stack.yaml +1 -1
- data/tracks/haskell/exercises/space-age/stack.yaml +1 -1
- data/tracks/haskell/exercises/spiral-matrix/stack.yaml +1 -1
- data/tracks/haskell/exercises/strain/stack.yaml +1 -1
- data/tracks/haskell/exercises/sublist/stack.yaml +1 -1
- data/tracks/haskell/exercises/sum-of-multiples/stack.yaml +1 -1
- data/tracks/haskell/exercises/triangle/stack.yaml +1 -1
- data/tracks/haskell/exercises/trinary/stack.yaml +1 -1
- data/tracks/haskell/exercises/twelve-days/stack.yaml +1 -1
- data/tracks/haskell/exercises/word-count/stack.yaml +1 -1
- data/tracks/haskell/exercises/wordy/stack.yaml +1 -1
- data/tracks/haskell/exercises/zebra-puzzle/stack.yaml +1 -1
- data/tracks/haskell/exercises/zipper/stack.yaml +1 -1
- data/tracks/java/config.json +12 -0
- data/tracks/java/exercises/alphametics/.meta/src/reference/java/Alphametics.java +125 -0
- data/tracks/java/exercises/alphametics/.meta/src/reference/java/UnsolvablePuzzleException.java +2 -0
- data/tracks/java/exercises/alphametics/.meta/src/version +1 -0
- data/tracks/java/exercises/alphametics/README.md +47 -0
- data/tracks/java/exercises/alphametics/build.gradle +18 -0
- data/tracks/java/exercises/alphametics/src/main/java/.keep +0 -0
- data/tracks/java/exercises/alphametics/src/main/java/UnsolvablePuzzleException.java +2 -0
- data/tracks/java/exercises/alphametics/src/test/java/AlphameticsTest.java +150 -0
- data/tracks/java/exercises/beer-song/.meta/src/reference/java/BeerSong.java +5 -4
- data/tracks/java/exercises/beer-song/.meta/version +1 -0
- data/tracks/java/exercises/beer-song/src/test/java/BeerSongTest.java +24 -16
- data/tracks/java/exercises/binary-search/.meta/version +1 -0
- data/tracks/java/exercises/book-store/.meta/version +1 -0
- data/tracks/java/exercises/book-store/src/test/java/BookStoreTest.java +15 -8
- data/tracks/java/exercises/circular-buffer/.meta/version +1 -0
- data/tracks/java/exercises/list-ops/.meta/version +1 -1
- data/tracks/java/exercises/list-ops/src/test/java/ListOpsTest.java +1 -1
- data/tracks/java/exercises/nth-prime/.meta/version +1 -0
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/tournament/.meta/version +1 -0
- data/tracks/java/exercises/transpose/.meta/version +1 -0
- data/tracks/java/exercises/transpose/src/test/java/TransposeTest.java +29 -74
- data/tracks/java/exercises/wordy/.meta/version +1 -0
- data/tracks/javascript/.eslintignore +0 -1
- data/tracks/javascript/config.json +13 -3
- data/tracks/javascript/exercises/bowling/example.js +24 -10
- data/tracks/javascript/exercises/forth/README.md +56 -0
- data/tracks/javascript/exercises/forth/example.js +66 -0
- data/tracks/javascript/exercises/forth/forth.spec.js +259 -0
- data/tracks/lua/config.json +92 -81
- data/tracks/lua/exercises/accumulate/README.md +42 -0
- data/tracks/lua/exercises/beer-song/README.md +1 -1
- data/tracks/lua/exercises/bob/README.md +2 -0
- data/tracks/lua/exercises/crypto-square/README.md +6 -4
- data/tracks/lua/exercises/house/README.md +1 -1
- data/tracks/lua/exercises/isbn-verifier/README.md +25 -20
- data/tracks/lua/exercises/kindergarten-garden/README.md +3 -3
- data/tracks/lua/exercises/meetup/README.md +16 -12
- data/tracks/lua/exercises/nucleotide-count/README.md +2 -2
- data/tracks/lua/exercises/phone-number/README.md +1 -1
- data/tracks/lua/exercises/pov/README.md +0 -2
- data/tracks/lua/exercises/queen-attack/README.md +22 -22
- data/tracks/lua/exercises/rectangles/README.md +9 -9
- data/tracks/lua/exercises/reverse-string/README.md +23 -0
- data/tracks/lua/exercises/reverse-string/example.lua +7 -0
- data/tracks/lua/exercises/reverse-string/reverse-string_spec.lua +24 -0
- data/tracks/lua/exercises/secret-handshake/README.md +1 -1
- data/tracks/lua/exercises/space-age/README.md +1 -2
- data/tracks/lua/exercises/sum-of-multiples/README.md +3 -3
- data/tracks/perl6/exercises/two-fer/README.md +1 -1
- data/tracks/python/exercises/luhn/luhn_test.py +1 -1
- metadata +39 -6
data/tracks/c/config.json
CHANGED
|
@@ -477,6 +477,17 @@
|
|
|
477
477
|
"enums"
|
|
478
478
|
],
|
|
479
479
|
"uuid": "b0a152e9-5a45-41f9-bda0-427111d9a56c"
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"core": false,
|
|
483
|
+
"difficulty": 2,
|
|
484
|
+
"slug": "complex-numbers",
|
|
485
|
+
"topics": [
|
|
486
|
+
"structs",
|
|
487
|
+
"performance_optimizations"
|
|
488
|
+
],
|
|
489
|
+
"unlocked_by": "difference-of-squares",
|
|
490
|
+
"uuid": "472b1a6b-2b7a-4609-a97d-4c2b6c941a1f"
|
|
480
491
|
}
|
|
481
492
|
],
|
|
482
493
|
"foregone": [],
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Complex Numbers
|
|
2
|
+
|
|
3
|
+
A complex number is a number in the form `a + b * i` where `a` and `b` are real and `i` satisfies `i^2 = -1`.
|
|
4
|
+
|
|
5
|
+
`a` is called the real part and `b` is called the imaginary part of `z`.
|
|
6
|
+
The conjugate of the number `a + b * i` is the number `a - b * i`.
|
|
7
|
+
The absolute value of a complex number `z = a + b * i` is a real number `|z| = sqrt(a^2 + b^2)`. The square of the absolute value `|z|^2` is the result of multiplication of `z` by its complex conjugate.
|
|
8
|
+
|
|
9
|
+
The sum/difference of two complex numbers involves adding/subtracting their real and imaginary parts separately:
|
|
10
|
+
`(a + i * b) + (c + i * d) = (a + c) + (b + d) * i`,
|
|
11
|
+
`(a + i * b) - (c + i * d) = (a - c) + (b - d) * i`.
|
|
12
|
+
|
|
13
|
+
Multiplication result is by definition
|
|
14
|
+
`(a + i * b) * (c + i * d) = (a * c - b * d) + (b * c + a * d) * i`.
|
|
15
|
+
|
|
16
|
+
The reciprocal of a non-zero complex number is
|
|
17
|
+
`1 / (a + i * b) = a/(a^2 + b^2) - b/(a^2 + b^2) * i`.
|
|
18
|
+
|
|
19
|
+
Dividing a complex number `a + i * b` by another `c + i * d` gives:
|
|
20
|
+
`(a + i * b) / (c + i * d) = (a * c + b * d)/(c^2 + d^2) + (b * c - a * d)/(c^2 + d^2) * i`.
|
|
21
|
+
|
|
22
|
+
Exponent of a complex number can be expressed as
|
|
23
|
+
`exp(a + i * b) = exp(a) * exp(i * b)`,
|
|
24
|
+
and the last term is given by Euler's formula `exp(i * b) = cos(b) + i * sin(b)`.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Implement the following operations:
|
|
28
|
+
- addition, subtraction, multiplication and division of two complex numbers,
|
|
29
|
+
- conjugate, absolute value, exponent of a given complex number.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
Assume the programming language you are using does not have an implementation of complex numbers.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
## Getting Started
|
|
36
|
+
|
|
37
|
+
For installation and learning resources, refer to the
|
|
38
|
+
[exercism help page](http://exercism.io/languages/c).
|
|
39
|
+
|
|
40
|
+
## Running the tests
|
|
41
|
+
|
|
42
|
+
To run the test suite, execute the following command:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
make test
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
To check for memory leaks using [Valgrind](http://valgrind.org/), execute the following command:
|
|
49
|
+
```bash
|
|
50
|
+
make memcheck
|
|
51
|
+
```
|
|
52
|
+
You will need Valgrind to do this. See your distribution documentation for how to install Valgrind.
|
|
53
|
+
|
|
54
|
+
## Feedback, Issues, Pull Requests
|
|
55
|
+
|
|
56
|
+
The [exercism/c](https://github.com/exercism/c) repository on
|
|
57
|
+
GitHub is the home for all of the C exercises.
|
|
58
|
+
|
|
59
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
60
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
61
|
+
|
|
62
|
+
## Source
|
|
63
|
+
|
|
64
|
+
Wikipedia [https://en.wikipedia.org/wiki/Complex_number](https://en.wikipedia.org/wiki/Complex_number)
|
|
65
|
+
|
|
66
|
+
## Submitting Incomplete Solutions
|
|
67
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
CFLAGS = -std=c99
|
|
2
|
+
CFLAGS += -g
|
|
3
|
+
CFLAGS += -Wall
|
|
4
|
+
CFLAGS += -Wextra
|
|
5
|
+
CFLAGS += -pedantic
|
|
6
|
+
CFLAGS += -Werror
|
|
7
|
+
|
|
8
|
+
VFLAGS = --quiet
|
|
9
|
+
VFLAGS += --tool=memcheck
|
|
10
|
+
VFLAGS += --leak-check=full
|
|
11
|
+
VFLAGS += --error-exitcode=1
|
|
12
|
+
|
|
13
|
+
LDFLAGS = -lm
|
|
14
|
+
|
|
15
|
+
test: tests.out
|
|
16
|
+
@./tests.out
|
|
17
|
+
|
|
18
|
+
memcheck: tests.out
|
|
19
|
+
@valgrind $(VFLAGS) ./tests.out
|
|
20
|
+
@echo "Memory check passed"
|
|
21
|
+
|
|
22
|
+
clean:
|
|
23
|
+
rm -rf *.o *.out *.out.dSYM
|
|
24
|
+
|
|
25
|
+
tests.out: test/test_complex_numbers.c src/complex_numbers.c src/complex_numbers.h
|
|
26
|
+
@echo Compiling $@
|
|
27
|
+
@cc $(CFLAGS) src/complex_numbers.c test/vendor/unity.c test/test_complex_numbers.c $(LDFLAGS) -o tests.out
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#include "complex_numbers.h"
|
|
2
|
+
|
|
3
|
+
complex_t c_add(complex_t a, complex_t b)
|
|
4
|
+
{
|
|
5
|
+
// TODO: implement
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
complex_t c_sub(complex_t a, complex_t b)
|
|
9
|
+
{
|
|
10
|
+
// TODO: implement
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
complex_t c_mul(complex_t a, complex_t b)
|
|
14
|
+
{
|
|
15
|
+
// TODO: implement
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
complex_t c_div(complex_t a, complex_t b)
|
|
19
|
+
{
|
|
20
|
+
// TODO: implement
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
double c_abs(complex_t x)
|
|
24
|
+
{
|
|
25
|
+
// TODO: implement
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
complex_t c_conjugate(complex_t x)
|
|
29
|
+
{
|
|
30
|
+
// TODO: implement
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
double c_real(complex_t x)
|
|
34
|
+
{
|
|
35
|
+
// TODO: implement
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
double c_imag(complex_t x)
|
|
39
|
+
{
|
|
40
|
+
// TODO: implement
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
complex_t c_exp(complex_t x)
|
|
44
|
+
{
|
|
45
|
+
// TODO: implement
|
|
46
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#ifndef _COMPLEX_NUMBERS_H_
|
|
2
|
+
#define _COMPLEX_NUMBERS_H_
|
|
3
|
+
|
|
4
|
+
typedef struct {
|
|
5
|
+
double real;
|
|
6
|
+
double imag;
|
|
7
|
+
} complex_t;
|
|
8
|
+
|
|
9
|
+
complex_t c_add(complex_t a, complex_t b);
|
|
10
|
+
complex_t c_sub(complex_t a, complex_t b);
|
|
11
|
+
complex_t c_mul(complex_t a, complex_t b);
|
|
12
|
+
complex_t c_div(complex_t a, complex_t b);
|
|
13
|
+
double c_abs(complex_t x);
|
|
14
|
+
complex_t c_conjugate(complex_t x);
|
|
15
|
+
double c_real(complex_t x);
|
|
16
|
+
double c_imag(complex_t x);
|
|
17
|
+
complex_t c_exp(complex_t x);
|
|
18
|
+
|
|
19
|
+
#endif
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#include "complex_numbers.h"
|
|
2
|
+
#include <math.h>
|
|
3
|
+
|
|
4
|
+
static double square(double x)
|
|
5
|
+
{
|
|
6
|
+
return x * x;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
complex_t c_add(const complex_t a, const complex_t b)
|
|
10
|
+
{
|
|
11
|
+
complex_t result;
|
|
12
|
+
result.real = a.real + b.real;
|
|
13
|
+
result.imag = a.imag + b.imag;
|
|
14
|
+
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
complex_t c_sub(const complex_t a, const complex_t b)
|
|
19
|
+
{
|
|
20
|
+
complex_t result;
|
|
21
|
+
result.real = a.real - b.real;
|
|
22
|
+
result.imag = a.imag - b.imag;
|
|
23
|
+
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
complex_t c_mul(const complex_t a, const complex_t b)
|
|
28
|
+
{
|
|
29
|
+
complex_t result;
|
|
30
|
+
result.real = a.real * b.real - a.imag * b.imag;
|
|
31
|
+
result.imag = a.imag * b.real + a.real * b.imag;
|
|
32
|
+
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
complex_t c_div(const complex_t a, const complex_t b)
|
|
37
|
+
{
|
|
38
|
+
double denominator = square(b.real) + square(b.imag);
|
|
39
|
+
|
|
40
|
+
complex_t result;
|
|
41
|
+
result.real = (a.real * b.imag + a.imag * b.real) / denominator;
|
|
42
|
+
result.imag = (a.imag * b.real - a.real * b.imag) / denominator;
|
|
43
|
+
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
double c_abs(const complex_t x)
|
|
48
|
+
{
|
|
49
|
+
return sqrt(square(x.real) + square(x.imag));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
complex_t c_conjugate(const complex_t x)
|
|
53
|
+
{
|
|
54
|
+
complex_t result;
|
|
55
|
+
result.real = x.real;
|
|
56
|
+
result.imag = -(x.imag);
|
|
57
|
+
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
double c_real(const complex_t x)
|
|
62
|
+
{
|
|
63
|
+
return x.real;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
double c_imag(const complex_t x)
|
|
67
|
+
{
|
|
68
|
+
return x.imag;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
complex_t c_exp(const complex_t x)
|
|
72
|
+
{
|
|
73
|
+
double real_exp = exp(x.real);
|
|
74
|
+
|
|
75
|
+
complex_t result;
|
|
76
|
+
result.real = real_exp * cos(x.imag);
|
|
77
|
+
result.imag = real_exp * sin(x.imag);
|
|
78
|
+
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
#include "../src/complex_numbers.h"
|
|
2
|
+
|
|
3
|
+
#define UNITY_FLOAT_TYPE double
|
|
4
|
+
#include "vendor/unity.h"
|
|
5
|
+
|
|
6
|
+
#include <math.h>
|
|
7
|
+
|
|
8
|
+
#define PI acos(-1)
|
|
9
|
+
#define E exp(1)
|
|
10
|
+
|
|
11
|
+
void compare_complex(complex_t lhs, complex_t rhs)
|
|
12
|
+
{
|
|
13
|
+
TEST_ASSERT_EQUAL_FLOAT(lhs.real, rhs.real);
|
|
14
|
+
TEST_ASSERT_EQUAL_FLOAT(lhs.imag, rhs.imag);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
void test_imaginary_unit(void)
|
|
18
|
+
{
|
|
19
|
+
complex_t z = {.real = 0.0,.imag = 1.0 };
|
|
20
|
+
|
|
21
|
+
complex_t expected = {.real = -1.0,.imag = 0.0 };
|
|
22
|
+
complex_t actual = c_mul(z, z);
|
|
23
|
+
|
|
24
|
+
compare_complex(expected, actual);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void test_add_purely_real_numbers(void)
|
|
28
|
+
{
|
|
29
|
+
TEST_IGNORE();
|
|
30
|
+
|
|
31
|
+
complex_t z1 = {.real = 1.0,.imag = 0.0 };
|
|
32
|
+
complex_t z2 = {.real = 2.0,.imag = 0.0 };
|
|
33
|
+
|
|
34
|
+
complex_t expected = {.real = 3.0,.imag = 0.0 };
|
|
35
|
+
complex_t actual = c_add(z1, z2);
|
|
36
|
+
|
|
37
|
+
compare_complex(expected, actual);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
void test_add_purely_imaginary_numbers(void)
|
|
41
|
+
{
|
|
42
|
+
TEST_IGNORE();
|
|
43
|
+
complex_t z1 = {.real = 0.0,.imag = 1.0 };
|
|
44
|
+
complex_t z2 = {.real = 0.0,.imag = 2.0 };
|
|
45
|
+
|
|
46
|
+
complex_t expected = {.real = 0.0,.imag = 3.0 };
|
|
47
|
+
complex_t actual = c_add(z1, z2);
|
|
48
|
+
|
|
49
|
+
compare_complex(expected, actual);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void test_add_numbers_with_real_and_imaginary_part(void)
|
|
53
|
+
{
|
|
54
|
+
TEST_IGNORE();
|
|
55
|
+
complex_t z1 = {.real = 1.0,.imag = 2.0 };
|
|
56
|
+
complex_t z2 = {.real = 3.0,.imag = 4.0 };
|
|
57
|
+
|
|
58
|
+
complex_t expected = {.real = 4.0,.imag = 6.0 };
|
|
59
|
+
complex_t actual = c_add(z1, z2);
|
|
60
|
+
|
|
61
|
+
compare_complex(expected, actual);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
void test_subtract_purely_real_numbers(void)
|
|
65
|
+
{
|
|
66
|
+
TEST_IGNORE();
|
|
67
|
+
complex_t z1 = {.real = 1.0,.imag = 0.0 };
|
|
68
|
+
complex_t z2 = {.real = 2.0,.imag = 0.0 };
|
|
69
|
+
|
|
70
|
+
complex_t expected = {.real = -1.0,.imag = 0.0 };
|
|
71
|
+
complex_t actual = c_sub(z1, z2);
|
|
72
|
+
|
|
73
|
+
compare_complex(expected, actual);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void test_subtract_purely_imaginary_numbers(void)
|
|
77
|
+
{
|
|
78
|
+
TEST_IGNORE();
|
|
79
|
+
complex_t z1 = {.real = 0.0,.imag = 1.0 };
|
|
80
|
+
complex_t z2 = {.real = 0.0,.imag = 2.0 };
|
|
81
|
+
|
|
82
|
+
complex_t expected = {.real = 0.0,.imag = -1.0 };
|
|
83
|
+
complex_t actual = c_sub(z1, z2);
|
|
84
|
+
|
|
85
|
+
compare_complex(expected, actual);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
void test_subtract_numbers_with_real_and_imaginary_part(void)
|
|
89
|
+
{
|
|
90
|
+
TEST_IGNORE();
|
|
91
|
+
complex_t z1 = {.real = 1.0,.imag = 2.0 };
|
|
92
|
+
complex_t z2 = {.real = 3.0,.imag = 4.0 };
|
|
93
|
+
|
|
94
|
+
complex_t expected = {.real = -2.0,.imag = -2.0 };
|
|
95
|
+
complex_t actual = c_sub(z1, z2);
|
|
96
|
+
|
|
97
|
+
compare_complex(expected, actual);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void test_multiply_purely_real_numbers(void)
|
|
101
|
+
{
|
|
102
|
+
TEST_IGNORE();
|
|
103
|
+
complex_t z1 = {.real = 1.0,.imag = 0.0 };
|
|
104
|
+
complex_t z2 = {.real = 2.0,.imag = 0.0 };
|
|
105
|
+
|
|
106
|
+
complex_t expected = {.real = 2.0,.imag = 0.0 };
|
|
107
|
+
complex_t actual = c_mul(z1, z2);
|
|
108
|
+
|
|
109
|
+
compare_complex(expected, actual);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void test_multiply_purely_imaginary_numbers(void)
|
|
113
|
+
{
|
|
114
|
+
TEST_IGNORE();
|
|
115
|
+
complex_t z1 = {.real = 0.0,.imag = 1.0 };
|
|
116
|
+
complex_t z2 = {.real = 0.0,.imag = 2.0 };
|
|
117
|
+
|
|
118
|
+
complex_t expected = {.real = -2.0,.imag = 0.0 };
|
|
119
|
+
complex_t actual = c_mul(z1, z2);
|
|
120
|
+
|
|
121
|
+
compare_complex(expected, actual);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
void test_multiply_numbers_with_real_and_imaginary_part(void)
|
|
125
|
+
{
|
|
126
|
+
TEST_IGNORE();
|
|
127
|
+
complex_t z1 = {.real = 1.0,.imag = 2.0 };
|
|
128
|
+
complex_t z2 = {.real = 3.0,.imag = 4.0 };
|
|
129
|
+
|
|
130
|
+
complex_t expected = {.real = -5.0,.imag = 10.0 };
|
|
131
|
+
complex_t actual = c_mul(z1, z2);
|
|
132
|
+
|
|
133
|
+
compare_complex(expected, actual);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
void test_divide_purely_real_numbers(void)
|
|
137
|
+
{
|
|
138
|
+
TEST_IGNORE();
|
|
139
|
+
complex_t z1 = {.real = 1.0,.imag = 0.0 };
|
|
140
|
+
complex_t z2 = {.real = 2.0,.imag = 0.0 };
|
|
141
|
+
|
|
142
|
+
complex_t expected = {.real = 0.5,.imag = 0.0 };
|
|
143
|
+
complex_t actual = c_div(z1, z2);
|
|
144
|
+
|
|
145
|
+
compare_complex(expected, actual);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
void test_divide_purely_imaginary_numbers(void)
|
|
149
|
+
{
|
|
150
|
+
TEST_IGNORE();
|
|
151
|
+
complex_t z1 = {.real = 0.0,.imag = 1.0 };
|
|
152
|
+
complex_t z2 = {.real = 0.0,.imag = 2.0 };
|
|
153
|
+
|
|
154
|
+
complex_t expected = {.real = 0.5,.imag = 0.0 };
|
|
155
|
+
complex_t actual = c_div(z1, z2);
|
|
156
|
+
|
|
157
|
+
compare_complex(expected, actual);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
void test_divide_numbers_with_real_and_imaginary_part(void)
|
|
161
|
+
{
|
|
162
|
+
TEST_IGNORE();
|
|
163
|
+
complex_t z1 = {.real = 1.0,.imag = 2.0 };
|
|
164
|
+
complex_t z2 = {.real = 3.0,.imag = 4.0 };
|
|
165
|
+
|
|
166
|
+
complex_t expected = {.real = 0.44,.imag = 0.08 };
|
|
167
|
+
complex_t actual = c_div(z1, z2);
|
|
168
|
+
|
|
169
|
+
compare_complex(expected, actual);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
void test_abs_of_a_positive_purely_real_number(void)
|
|
173
|
+
{
|
|
174
|
+
TEST_IGNORE();
|
|
175
|
+
complex_t z = {.real = 5.0,.imag = 0.0 };
|
|
176
|
+
|
|
177
|
+
double expected = 5.0;
|
|
178
|
+
double actual = c_abs(z);
|
|
179
|
+
|
|
180
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
void test_abs_of_a_negative_purely_real_number(void)
|
|
184
|
+
{
|
|
185
|
+
TEST_IGNORE();
|
|
186
|
+
complex_t z = {.real = -5.0,.imag = 0.0 };
|
|
187
|
+
|
|
188
|
+
double expected = 5.0;
|
|
189
|
+
double actual = c_abs(z);
|
|
190
|
+
|
|
191
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
void test_abs_of_a_purely_imaginary_number_with_positive_imaginary_part(void)
|
|
195
|
+
{
|
|
196
|
+
TEST_IGNORE();
|
|
197
|
+
complex_t z = {.real = 0.0,.imag = 5.0 };
|
|
198
|
+
|
|
199
|
+
double expected = 5.0;
|
|
200
|
+
double actual = c_abs(z);
|
|
201
|
+
|
|
202
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
void test_abs_of_a_purely_imaginary_number_with_negative_imaginary_part(void)
|
|
206
|
+
{
|
|
207
|
+
TEST_IGNORE();
|
|
208
|
+
complex_t z = {.real = 0.0,.imag = -5.0 };
|
|
209
|
+
|
|
210
|
+
double expected = 5.0;
|
|
211
|
+
double actual = c_abs(z);
|
|
212
|
+
|
|
213
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
void test_abs_of_a_number_with_real_and_imaginary_part(void)
|
|
217
|
+
{
|
|
218
|
+
TEST_IGNORE();
|
|
219
|
+
complex_t z = {.real = 3.0,.imag = 4.0 };
|
|
220
|
+
|
|
221
|
+
double expected = 5.0;
|
|
222
|
+
double actual = c_abs(z);
|
|
223
|
+
|
|
224
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
void test_complex_conjugate_of_a_purely_real_number(void)
|
|
228
|
+
{
|
|
229
|
+
TEST_IGNORE();
|
|
230
|
+
complex_t z = {.real = 5.0,.imag = 0.0 };
|
|
231
|
+
|
|
232
|
+
complex_t expected = {.real = 5.0,.imag = 0.0 };
|
|
233
|
+
complex_t actual = c_conjugate(z);
|
|
234
|
+
|
|
235
|
+
compare_complex(expected, actual);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
void test_complex_conjugate_of_a_purely_imaginary_number(void)
|
|
239
|
+
{
|
|
240
|
+
TEST_IGNORE();
|
|
241
|
+
complex_t z = {.real = 0.0,.imag = 5.0 };
|
|
242
|
+
|
|
243
|
+
complex_t expected = {.real = 0.0,.imag = -5.0 };
|
|
244
|
+
complex_t actual = c_conjugate(z);
|
|
245
|
+
|
|
246
|
+
compare_complex(expected, actual);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
void test_complex_conjugate_of_a_number_with_real_and_imaginary_part(void)
|
|
250
|
+
{
|
|
251
|
+
TEST_IGNORE();
|
|
252
|
+
complex_t z = {.real = 1.0,.imag = 1.0 };
|
|
253
|
+
|
|
254
|
+
complex_t expected = {.real = 1.0,.imag = -1.0 };
|
|
255
|
+
complex_t actual = c_conjugate(z);
|
|
256
|
+
|
|
257
|
+
compare_complex(expected, actual);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
void test_real_part_of_a_purely_real_number(void)
|
|
261
|
+
{
|
|
262
|
+
TEST_IGNORE();
|
|
263
|
+
complex_t z = {.real = 1.0,.imag = 0.0 };
|
|
264
|
+
|
|
265
|
+
double expected = 1.0;
|
|
266
|
+
double actual = c_real(z);
|
|
267
|
+
|
|
268
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
void test_real_part_of_a_purely_imaginary_number(void)
|
|
272
|
+
{
|
|
273
|
+
TEST_IGNORE();
|
|
274
|
+
complex_t z = {.real = 0.0,.imag = 1.0 };
|
|
275
|
+
|
|
276
|
+
double expected = 0.0;
|
|
277
|
+
double actual = c_real(z);
|
|
278
|
+
|
|
279
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
void test_real_part_of_a_number_with_real_and_imaginary_part(void)
|
|
283
|
+
{
|
|
284
|
+
TEST_IGNORE();
|
|
285
|
+
complex_t z = {.real = 1.0,.imag = 2.0 };
|
|
286
|
+
|
|
287
|
+
double expected = 1.0;
|
|
288
|
+
double actual = c_real(z);
|
|
289
|
+
|
|
290
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
void test_imaginary_part_of_a_purely_real_number(void)
|
|
294
|
+
{
|
|
295
|
+
TEST_IGNORE();
|
|
296
|
+
complex_t z = {.real = 1.0,.imag = 0.0 };
|
|
297
|
+
|
|
298
|
+
double expected = 0.0;
|
|
299
|
+
double actual = c_imag(z);
|
|
300
|
+
|
|
301
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
void test_imaginary_part_of_a_purely_imaginary_number(void)
|
|
305
|
+
{
|
|
306
|
+
TEST_IGNORE();
|
|
307
|
+
complex_t z = {.real = 0.0,.imag = 1.0 };
|
|
308
|
+
|
|
309
|
+
double expected = 1.0;
|
|
310
|
+
double actual = c_imag(z);
|
|
311
|
+
|
|
312
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
void test_imaginary_part_of_a_number_with_real_and_imaginary_part(void)
|
|
316
|
+
{
|
|
317
|
+
TEST_IGNORE();
|
|
318
|
+
complex_t z = {.real = 1.0,.imag = 2.0 };
|
|
319
|
+
|
|
320
|
+
double expected = 2.0;
|
|
321
|
+
double actual = c_imag(z);
|
|
322
|
+
|
|
323
|
+
TEST_ASSERT_EQUAL_FLOAT(expected, actual);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
void test_eulers_identity(void)
|
|
327
|
+
{
|
|
328
|
+
TEST_IGNORE();
|
|
329
|
+
complex_t z = {.real = 0.0,.imag = PI };
|
|
330
|
+
|
|
331
|
+
complex_t expected = {.real = -1.0,.imag = 0.0 };
|
|
332
|
+
complex_t actual = c_exp(z);
|
|
333
|
+
|
|
334
|
+
TEST_ASSERT_FLOAT_WITHIN(1e-10, expected.real, actual.real);
|
|
335
|
+
TEST_ASSERT_FLOAT_WITHIN(1e-10, expected.imag, actual.imag);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
void test_exponential_of_zero(void)
|
|
339
|
+
{
|
|
340
|
+
TEST_IGNORE();
|
|
341
|
+
complex_t zero = {.real = 0.0,.imag = 0.0 };
|
|
342
|
+
|
|
343
|
+
complex_t expected = {.real = 1.0,.imag = 0.0 };
|
|
344
|
+
complex_t actual = c_exp(zero);
|
|
345
|
+
|
|
346
|
+
compare_complex(expected, actual);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
void test_exponential_of_a_purely_real_number(void)
|
|
350
|
+
{
|
|
351
|
+
TEST_IGNORE();
|
|
352
|
+
complex_t z = {.real = 1.0,.imag = 0.0 };
|
|
353
|
+
|
|
354
|
+
complex_t expected = {.real = E,.imag = 0.0 };
|
|
355
|
+
complex_t actual = c_exp(z);
|
|
356
|
+
|
|
357
|
+
compare_complex(expected, actual);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
int main(void)
|
|
361
|
+
{
|
|
362
|
+
UnityBegin("test/test_complex_numbers.c");
|
|
363
|
+
|
|
364
|
+
RUN_TEST(test_imaginary_unit);
|
|
365
|
+
RUN_TEST(test_add_purely_real_numbers);
|
|
366
|
+
RUN_TEST(test_add_purely_imaginary_numbers);
|
|
367
|
+
RUN_TEST(test_add_numbers_with_real_and_imaginary_part);
|
|
368
|
+
RUN_TEST(test_subtract_purely_real_numbers);
|
|
369
|
+
RUN_TEST(test_subtract_purely_imaginary_numbers);
|
|
370
|
+
RUN_TEST(test_subtract_numbers_with_real_and_imaginary_part);
|
|
371
|
+
RUN_TEST(test_multiply_numbers_with_real_and_imaginary_part);
|
|
372
|
+
RUN_TEST(test_multiply_numbers_with_real_and_imaginary_part);
|
|
373
|
+
RUN_TEST(test_multiply_numbers_with_real_and_imaginary_part);
|
|
374
|
+
RUN_TEST(test_divide_numbers_with_real_and_imaginary_part);
|
|
375
|
+
RUN_TEST(test_divide_numbers_with_real_and_imaginary_part);
|
|
376
|
+
RUN_TEST(test_divide_numbers_with_real_and_imaginary_part);
|
|
377
|
+
RUN_TEST(test_abs_of_a_positive_purely_real_number);
|
|
378
|
+
RUN_TEST(test_abs_of_a_negative_purely_real_number);
|
|
379
|
+
RUN_TEST(test_abs_of_a_purely_imaginary_number_with_positive_imaginary_part);
|
|
380
|
+
RUN_TEST(test_abs_of_a_purely_imaginary_number_with_negative_imaginary_part);
|
|
381
|
+
RUN_TEST(test_abs_of_a_number_with_real_and_imaginary_part);
|
|
382
|
+
RUN_TEST(test_complex_conjugate_of_a_purely_real_number);
|
|
383
|
+
RUN_TEST(test_complex_conjugate_of_a_purely_imaginary_number);
|
|
384
|
+
RUN_TEST(test_complex_conjugate_of_a_number_with_real_and_imaginary_part);
|
|
385
|
+
RUN_TEST(test_real_part_of_a_purely_real_number);
|
|
386
|
+
RUN_TEST(test_real_part_of_a_purely_imaginary_number);
|
|
387
|
+
RUN_TEST(test_real_part_of_a_number_with_real_and_imaginary_part);
|
|
388
|
+
RUN_TEST(test_imaginary_part_of_a_purely_real_number);
|
|
389
|
+
RUN_TEST(test_imaginary_part_of_a_purely_imaginary_number);
|
|
390
|
+
RUN_TEST(test_imaginary_part_of_a_number_with_real_and_imaginary_part);
|
|
391
|
+
RUN_TEST(test_eulers_identity);
|
|
392
|
+
RUN_TEST(test_exponential_of_zero);
|
|
393
|
+
RUN_TEST(test_exponential_of_a_purely_real_number);
|
|
394
|
+
|
|
395
|
+
UnityEnd();
|
|
396
|
+
return 0;
|
|
397
|
+
}
|