summaryrefslogtreecommitdiffstats
path: root/vendor/math/qcomplex.test
diff options
context:
space:
mode:
authorOmar Rizwan <omar@omar.website>2022-12-05 07:14:51 +0000
committerOmar Rizwan <omar@omar.website>2022-12-05 07:14:51 +0000
commit07fc041d7bc0793318dd31ebef6ab2da9bcb3fe2 (patch)
tree202d978bd50fd5dd4c3cce5c690ea3dedb0e62bf /vendor/math/qcomplex.test
parentWebSocket server (diff)
downloadfolk-07fc041d7bc0793318dd31ebef6ab2da9bcb3fe2.tar.gz
folk-07fc041d7bc0793318dd31ebef6ab2da9bcb3fe2.zip
Vendor tcllib linear algebra
Diffstat (limited to 'vendor/math/qcomplex.test')
-rw-r--r--vendor/math/qcomplex.test250
1 files changed, 250 insertions, 0 deletions
diff --git a/vendor/math/qcomplex.test b/vendor/math/qcomplex.test
new file mode 100644
index 00000000..f080c969
--- /dev/null
+++ b/vendor/math/qcomplex.test
@@ -0,0 +1,250 @@
+# -*- tcl -*-
+# Tests for complex number functions in math library -*- tcl -*-
+#
+# This file contains a collection of tests for one or more of the Tcllib
+# procedures. Sourcing this file into Tcl runs the tests and
+# generates output for errors. No output means no errors were found.
+#
+# $Id: qcomplex.test,v 1.10 2006/10/09 21:41:41 andreas_kupries Exp $
+#
+# Copyright (c) 2004 by Arjen Markus
+# All rights reserved.
+#
+# Note:
+# By evaluating the tests in a different namespace than global,
+# we assure that the namespace issue (Bug #...) is checked.
+#
+
+# -------------------------------------------------------------------------
+
+source [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+
+testsNeedTcl 8.5
+testsNeedTcltest 2.1
+
+support {
+ useLocal math.tcl math
+}
+testing {
+ useLocal qcomplex.tcl math::complexnumbers
+}
+
+# -------------------------------------------------------------------------
+
+namespace import -force ::math::complexnumbers::*
+
+proc matchNumbers { expected actual } {
+ set match 1
+ foreach a $actual e $expected {
+ if { abs($a-$e) > 1.0e-10 } {
+ set match 0
+ break
+ }
+ }
+ return $match
+}
+
+customMatch numbers matchNumbers
+
+# -------------------------------------------------------------------------
+
+#
+# Test cases: arithmetical operations
+#
+test "Complex-1.1" "Arithmetic - add 1" -match numbers -body {
+ set a [complex 1 0]
+ set b [complex 0 1]
+ set c [+ $a $b]
+} -result [complex 1 1]
+
+test "Complex-1.2" "Arithmetic - add 2" -match numbers -body {
+ set a [complex 1.1 -1.1]
+ set b [complex 1.1 1.1]
+ set c [+ $a $b]
+} -result [complex 2.2 0]
+
+test "Complex-1.3" "Arithmetic - subtract 1" -match numbers -body {
+ set a [complex 1 0]
+ set b [complex 0 1]
+ set c [- $a $b]
+} -result [complex 1 -1]
+
+test "Complex-1.4" "Arithmetic - subtract 2" -match numbers -body {
+ set a [complex 1.1 -1.1]
+ set b [complex 1.1 1.1]
+ set c [- $a $b]
+} -result [complex 0 -2.2]
+
+test "Complex-1.5" "Arithmetic - multiply 1" -match numbers -body {
+ set a [complex 1 -1]
+ set b [complex 0 1]
+ set c [* $a $b]
+} -result [complex 1 1]
+
+test "Complex-1.6" "Arithmetic - multiply 2" -match numbers -body {
+ set a [complex 0 1]
+ set b [complex 0 1]
+ set c [* $a $b]
+} -result [complex -1 0]
+
+test "Complex-1.7" "Arithmetic - divide 1" -match numbers -body {
+ set a [complex 1.1 1]
+ set b [complex 1.1 1]
+ set c [/ $a $b]
+} -result [complex 1 0]
+
+test "Complex-1.8" "Arithmetic - divide 2" -match numbers -body {
+ set a [complex 1 1]
+ set b [complex 0 1]
+ set c [/ $a $b]
+} -result [complex 1 -1]
+
+test "Complex-1.9" "Arithmetic - conjugate 1" -match numbers -body {
+ set a [complex 0 1]
+ set c [conj $a]
+} -result [complex 0 -1]
+
+test "Complex-1.10" "Arithmetic - conjugate 2" -match numbers -body {
+ set a [complex 1 0]
+ set c [conj $a]
+} -result [complex 1 0]
+
+test "Complex-2.1" "Conversion - real 1" -match numbers -body {
+ set a [complex 1 2]
+ set c [real $a]
+} -result 1
+
+test "Complex-2.2" "Conversion - real 2" -match numbers -body {
+ set a [complex 0 2]
+ set c [real $a]
+} -result 0
+
+test "Complex-2.3" "Conversion - imag 1" -match numbers -body {
+ set a [complex 1 2]
+ set c [imag $a]
+} -result 2
+
+test "Complex-2.4" "Conversion - imag 2" -match numbers -body {
+ set a [complex 0 2]
+ set c [imag $a]
+} -result 2
+
+test "Complex-2.5" "Conversion - mod 1" -match numbers -body {
+ set a [complex 0 1]
+ set c [mod $a]
+} -result 1
+
+test "Complex-2.6" "Conversion - mod 2" -match numbers -body {
+ set a [complex 3 4]
+ set c [mod $a]
+} -result 5
+
+test "Complex-2.7" "Conversion - arg 1" -match numbers -body {
+ set a [complex 0 1]
+ set c [arg $a]
+} -result [expr {2.0*atan(1.0)}]
+
+test "Complex-2.8" "Conversion - arg 2" -match numbers -body {
+ set a [complex 1 1]
+ set c [arg $a]
+} -result [expr {atan(1.0)}]
+
+test "Complex-2.9" "Conversion - tostring" -body {
+ set c "[tostring [complex 1 0]] "
+ append c "[tostring [complex 0 1]] "
+ append c "[tostring [complex 1 1]] "
+ append c "[tostring [complex 1 -1]] "
+ append c "[tostring [complex 0 -1]] "
+ append c "[tostring [complex 2 -3]] "
+} -result "1 i 1+i 1-i -i 2-3i "
+
+test "Complex-3.1" "Elementary - exp 1" -match numbers -body {
+ set a [complex 1 0]
+ set c [exp $a]
+} -result [complex [expr {exp(1.0)}] 0.0]
+
+test "Complex-3.2" "Elementary - exp 2" -match numbers -body {
+ set a [complex 0 1]
+ set c [exp $a]
+} -result [complex [expr {cos(1.0)}] [expr {sin(1.0)}]]
+
+test "Complex-3.3" "Elementary - sin 1" -match numbers -body {
+ set a [complex 1 0]
+ set c [sin $a]
+} -result [complex [expr {sin(1.0)}] 0.0]
+
+test "Complex-3.4" "Elementary - sin 2" -match numbers -body {
+ set a [complex 0 1]
+ set c [sin $a]
+ #
+ # Calculate from the (complex) definition
+ #
+ set d1 [exp [complex -1 0]]
+ set d2 [exp [complex 1 0]]
+ set e [/ [- $d1 $d2] [complex 0 2]]
+ set diff [- $c $e]
+} -result [complex 0 0]
+
+test "Complex-3.5" "Elementary - cos 1" -match numbers -body {
+ set a [complex 1 0]
+ set c [cos $a]
+} -result [complex [expr {cos(1.0)}] 0.0]
+
+test "Complex-3.6" "Elementary - cos 2" -match numbers -body {
+ set a [complex 0 1]
+ set c [cos $a]
+ set d1 [exp [complex -1 0]]
+ set d2 [exp [complex 1 0]]
+ set e [/ [+ $d1 $d2] [complex 2 0]]
+ set diff [- $c $e]
+} -result [complex 0 0]
+
+test "Complex-3.7" "Elementary - tan 1" -match numbers -body {
+ set a [complex 1 0]
+ set c [tan $a]
+} -result [complex [expr {tan(1.0)}] 0]
+
+test "Complex-3.8" "Elementary - tan 2" -match numbers -body {
+ set a [complex 0 1]
+ set c [tan $a]
+ set d1 [sin $a]
+ set d2 [cos $a]
+ set e [/ $d1 $d2]
+ set diff [- $c $e]
+} -result [complex 0 0]
+
+test "Complex-3.9" "Elementary - log 1" -match numbers -body {
+ set a [complex 1 0]
+ set c [log $a]
+} -result [complex 0 0]
+
+test "Complex-3.10" "Elementary - log 2" -match numbers -body {
+ set a [complex 0 1]
+ set c [log $a]
+} -result [complex 0 [expr {2.0*atan(1.0)}]]
+
+test "Complex-3.11" "Elementary - sqrt 1" -match numbers -body {
+ set a [complex -1 0]
+ set c [sqrt $a]
+} -result [complex 0 1]
+
+test "Complex-3.12" "Elementary - sqrt 2" -match numbers -body {
+ set a [complex 0 4]
+ set c [sqrt $a]
+} -result [complex [expr {sqrt(2)}] [expr {sqrt(2)}]]
+
+test "Complex-3.13" "Elementary - pow 1" -match numbers -body {
+ set a [complex -1 0]
+ set b [complex 0.5 0]
+ set c [pow $a $b]
+} -result [complex 0 1]
+
+test "Complex-3.14" "Elementary - pow 2" -match numbers -body {
+ set a [complex [expr {exp(1.0)}] 0]
+ set b [complex 0 [expr {4.0*atan(1.0)}]]
+ set c [pow $a $b]
+} -result [complex -1 0]
+
+testsuiteCleanup