1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066 |
- var assert = require("assert");
- var Complex = require("../complex.js");
- var functionTests = [{
- set: Complex.I,
- fn: "mul",
- param: Complex(Math.PI).exp(),
- expect: "23.140692632779267i"
- }, {
- set: new Complex(1, 4),
- fn: "mul",
- param: 3,
- expect: "3 + 12i"
- }, {
- set: "4 + 3i",
- fn: "add",
- param: "-3 - 2i",
- expect: "1 + i"
- }, {
- set: "3i",
- fn: "add",
- param: "-2i",
- expect: "i"
- }, {
- set: "4",
- fn: "add",
- param: "-3",
- expect: "1"
- }, {
- set: 9,
- fn: "sqrt",
- expect: "3"
- }, {
- set: -9,
- fn: "sqrt",
- expect: "3i"
- }, {
- set: "-36",
- fn: "sqrt",
- expect: "6i"
- }, {
- set: "36i",
- fn: "sqrt",
- expect: "4.242640687119285 + 4.242640687119285i"
- }, {
- set: Infinity,
- fn: "mul",
- param: "i",
- expect: "Infinity"
- }, {
- set: "-36i",
- fn: "sqrt",
- expect: "4.242640687119285 - 4.242640687119285i"
- }, {
- set: "4 + 2i",
- fn: "div",
- param: "0",
- expect: "Infinity"
- }, {
- set: "0",
- fn: "div",
- param: Infinity,
- expect: "0"
- }, {
- set: -Infinity,
- fn: "div",
- param: 0,
- expect: "Infinity"
- }, {
- set: Infinity,
- fn: "div",
- param: Infinity,
- expect: "NaN"
- }, {
- set: 0,
- fn: "div",
- param: 0,
- expect: "NaN"
- }, {
- set: "4 + 2i",
- fn: "div",
- param: "1 + i",
- expect: "3 - i"
- }, {
- set: "25",
- fn: "div",
- param: "3 - 4i",
- expect: "3 + 4i"
- }, {
- set: "3 - 2i",
- fn: "div",
- param: "i",
- expect: "-2 - 3i"
- }, {
- set: "4i",
- fn: "mul",
- param: "-5i",
- expect: "20"
- }, {
- set: "3 - 6i",
- fn: "mul",
- param: "i",
- expect: "6 + 3i"
- }, {
- set: Infinity,
- fn: "mul",
- param: 0,
- expect: "NaN"
- }, {
- set: "3 + 4i",
- fn: "add",
- param: "5 - 7i",
- expect: "8 - 3i"
- }, {
- set: Infinity,
- fn: "add",
- param: Infinity,
- expect: "NaN"
- }, {
- set: -Infinity,
- fn: "sub",
- param: -Infinity,
- expect: "NaN"
- }, {
- set: "6i",
- fn: "div",
- param: "3 - 12i",
- expect: "-0.47058823529411764 + 0.11764705882352941i"
- }, {
- set: "36 + 36i",
- fn: "sqrt",
- expect: "6.59210468080686 + 2.730539163373364i"
- }, {
- set: "36 - 36i",
- fn: "sqrt",
- expect: "6.59210468080686 - 2.730539163373364i"
- }, {
- set: "-36 + 36i",
- fn: "sqrt",
- expect: "2.730539163373364 + 6.59210468080686i"
- }, {
- set: "-36 - 36i",
- fn: "sqrt",
- expect: "2.730539163373364 - 6.59210468080686i"
- }, {
- set: "0",
- fn: "sqrt",
- expect: "0"
- }, {
- set: Math.E,
- fn: "log",
- expect: "1"
- }, {
- set: 0,
- fn: "log",
- expect: "Infinity"
- }, {
- set: Infinity,
- fn: "mul",
- param: 3,
- expect: "Infinity"
- }, {
- set: "-1",
- fn: "log",
- expect: Math.PI + "i"
- }, {
- set: "i",
- fn: "log",
- expect: (Math.PI / 2) + "i"
- }, {
- set: "3 + 2i",
- fn: "log",
- expect: Math.log(13) / 2 + " + " + Math.atan2(2, 3) + "i"
- }, {
- set: "3 - 2i",
- fn: "log",
- expect: Math.log(13) / 2 + " - " + Math.atan2(2, 3) + "i"
- }, {
- set: 1,
- fn: "exp",
- expect: "" + Math.E
- }, {
- set: "i",
- fn: "exp",
- expect: Math.cos(1) + " + " + Math.sin(1) + "i"
- }, {
- set: "i",
- fn: "mul",
- param: "i",
- expect: "-1"
- }, {
- set: "3 + 2i",
- fn: "exp",
- expect: "-8.358532650935372 + 18.263727040666765i"
- }, {
- set: "3 - 2i",
- fn: "exp",
- expect: "-8.358532650935372 - 18.263727040666765i"
- }, {
- set: "3 - 2i",
- fn: "expm1",
- expect: "-9.358532650935372 - 18.263727040666765i"
- }, {
- set: "0",
- fn: "expm1",
- expect: "0"
- }, {
- set: "1e-6",
- fn: "expm1",
- expect: "0.0000010000005000001665"
- }, {
- set: "1e-5 + 5i",
- fn: "expm1",
- expect: "-0.716334977900736 - 0.9589338639538314i"
- }, {
- set: "1.2e-7 - 2e-6i",
- fn: "expm1",
- expect: "1.1999800719976027e-7 - 0.000002000000239998681i"
- }, {
- set: "3",
- fn: "pow",
- param: "3",
- expect: "27"
- }, {
- set: -2,
- fn: "pow",
- param: 1.5,
- expect: "-2.82842712474619i"
- }, {
- set: -8,
- fn: "pow",
- param: 1 / 3,
- expect: "1 + 1.732050807568877i"
- }, {
- set: -25,
- fn: "sqrt",
- expect: "5i"
- }, {
- set: -25,
- fn: "pow",
- param: 0.5,
- expect: "5i"
- }, {
- set: "0",
- fn: "pow",
- param: "1+i",
- expect: "0"
- }, {
- set: "i",
- fn: "pow",
- param: "0",
- expect: "1"
- }, {
- set: "87",
- fn: "pow",
- param: "3",
- expect: "658503"
- }, {
- set: "i",
- fn: "pow",
- param: "1",
- expect: "i"
- }, {
- set: "i",
- fn: "pow",
- param: "2",
- expect: "-1"
- }, {
- set: "i",
- fn: "pow",
- param: "3",
- expect: "-i"
- }, {
- set: "i",
- fn: "pow",
- param: "4",
- expect: "1"
- }, {
- set: "i",
- fn: "pow",
- param: "5",
- expect: "i"
- }, {
- set: 7,
- fn: "pow",
- param: 2,
- expect: '49'
- }, {
- set: 0,
- fn: "pow",
- param: 2,
- expect: '0'
- }, {
- set: "3i",
- fn: "pow",
- param: "3i",
- expect: "-0.008876640735623678 - 0.0013801328997494863i"
- }, {
- set: { re: 3, im: 4 },
- fn: "abs",
- expect: "5"
- }, {
- set: { re: 10, im: 24 },
- fn: "abs",
- expect: "26"
- }, {
- set: "+++++--+1 + 4i",
- fn: "mul",
- param: "3 + 2i",
- expect: "-5 + 14i"
- }, {
- set: "4 + 16i",
- fn: "div",
- param: "4.0000",
- expect: "1 + 4i"
- }, {
- set: { re: -7.1, im: 2.5 },
- fn: "neg",
- expect: "7.1 - 2.5i"
- }, {
- set: { re: 1, im: 1 },
- fn: "div",
- param: { re: 3, im: 4 },
- expect: 7 / 25 + " - " + 1 / 25 + "i"
- }, {
- set: new Complex(-7.1, 2.5),
- fn: "neg",
- expect: "7.1 - 2.5i"
- }, {
- set: { re: 1, im: 1 },
- fn: "arg",
- expect: "" + Math.PI / 4
- }, {
- set: { re: -1, im: -1 },
- fn: "arg",
- expect: "" + -3 * Math.PI / 4
- }, {
- set: { re: 0, im: 1 },
- fn: "arg",
- expect: "" + Math.PI / 2
- }, {
- set: { re: 1, im: 0.5 * Math.sqrt(4 / 3) },
- fn: "arg",
- expect: "" + Math.PI / 6
- }, {
- set: "3 + 4i",
- fn: "conjugate",
- expect: "3 - 4i"
- }, {
- set: { re: 99, im: 50 },
- fn: "conjugate",
- expect: "99 - 50i"
- }, {
- set: { re: 0, im: 0 },
- fn: "conjugate",
- expect: "0"
- }, {
- set: { re: 1, im: 23 },
- fn: "conjugate",
- expect: "1 - 23i"
- }, {
- set: "2 + 8i",
- fn: "div",
- param: new Complex(1, 2),
- expect: "3.6 + 0.8i"
- }, {
- set: "2 + 8i",
- fn: "div",
- param: "2 + 8i",
- expect: "1"
- }, {
- set: -Infinity,
- fn: "div",
- param: 3,
- expect: "Infinity"
- }, {
- set: "3+4i",
- fn: "add",
- param: "5 - i",
- expect: "8 + 3i"
- }, {
- set: { re: 1, im: 2 },
- fn: "add",
- param: "4 + 6i",
- expect: "5 + 8i"
- }, {
- set: { re: 5, im: 8 },
- fn: "sub",
- param: "4 + 6i",
- expect: "1 + 2i"
- }, {
- set: "3 + 4i",
- fn: "sub",
- param: "2 - 5i",
- expect: "1 + 9i"
- }, {
- set: "1 + 2i",
- fn: "pow",
- param: "2",
- expect: "-2.999999999999999 + 4.000000000000001i"
- }, {
- set: "1 + 2i",
- fn: "pow",
- param: "1 + 2i",
- expect: "-0.22251715680177267 + 0.10070913113607541i"
- }, {
- set: { re: 1, im: 2 },
- fn: "pow",
- param: new Complex(3, 4),
- expect: "0.1290095940744669 + 0.03392409290517001i"
- }, {
- fn: "abs",
- set: new Complex(3, 4),
- expect: "5"
- }, {
- param: 2,
- fn: "pow",
- set: new Complex(1, 2),
- expect: "-2.999999999999999 + 4.000000000000001i"
- }, {
- set: "i",
- fn: "pow",
- param: 7,
- expect: "-i"
- }, {
- set: "2+3i",
- fn: "mul",
- param: "4+5i",
- expect: "-7 + 22i"
- }, {
- set: "3 + 4i",
- fn: "mul",
- param: "2 - 5i",
- expect: "26 - 7i"
- }, {
- set: "i",
- fn: "pow",
- param: 4,
- expect: "1"
- }, {
- set: "i",
- fn: "pow",
- param: 5,
- expect: "i"
- }, {
- set: "0-0i",
- fn: "pow",
- param: 2,
- expect: "0"
- }, {
- set: "0-0i",
- fn: "pow",
- param: 0,
- expect: "1"
- }, {
- set: "1 + 4i",
- fn: "sqrt",
- expect: "1.600485180440241 + 1.2496210676876531i"
- }, {
- set: { re: -3, im: 4 },
- fn: "sqrt",
- expect: "1 + 2i"
- }, {
- set: { re: 3, im: -4 },
- fn: "sqrt",
- expect: "2 - i"
- }, {
- set: { re: -3, im: -4 },
- fn: "sqrt",
- expect: "1 - 2i"
- }, {
- set: [-2, 0],
- fn: "pow",
- param: 2,
- expect: "4"
- }, {
- set: { abs: 1, arg: 0 },
- fn: "equals",
- param: { re: 1, im: 0 },
- expect: "true"
- }, {
- set: -Complex.E.pow(2),
- fn: "log",
- expect: "2 + 3.141592653589793i"
- }, {
- set: "4 + 3i",
- fn: "log",
- expect: "1.6094379124341003 + 0.6435011087932844i"
- }, {
- set: "4 + 3i",
- fn: "exp",
- expect: "-54.051758861078156 + 7.704891372731154i"
- }, {
- set: "1-2i",
- fn: "sqrt",
- expect: "1.272019649514069 - 0.7861513777574233i"
- }, {
- set: { re: 1, im: 2 },
- fn: "sin",
- expect: "3.165778513216168 + 1.9596010414216063i"
- }, {
- set: "i",
- fn: "cos",
- expect: "1.5430806348152437"
- }, {
- set: "i",
- fn: "acos",
- expect: "1.5707963267948966 - 0.8813735870195428i"
- }, {
- set: { re: 1, im: 2 },
- fn: "cos",
- expect: "2.0327230070196656 - 3.0518977991518i"
- }, {
- set: { re: 1, im: 2 },
- fn: "tan",
- expect: "0.03381282607989669 + 1.0147936161466335i"
- }, {
- set: { re: 1, im: 3 },
- fn: "sinh",
- expect: "-1.1634403637032504 + 0.21775955162215221i"
- }, {
- set: { re: 1, im: 3 },
- fn: "cosh",
- expect: "-1.5276382501165433 + 0.1658444019189788i"
- }, {
- set: { re: 1, im: 3 },
- fn: "tanh",
- expect: "0.7680176472869112 - 0.059168539566050726i"
- }, {
- set: { re: 1, im: 3 },
- fn: "inverse",
- expect: "0.1 - 0.3i"
- }, {
- set: "3+4i",
- fn: "inverse",
- expect: "0.12 - 0.16i" // 3/25 - (4/25)i
- }, {
- set: { re: 0.5, im: -0.5 },
- fn: "inverse",
- expect: "1 + i"
- }, {
- set: "1 + i",
- fn: "inverse",
- expect: "0.5 - 0.5i"
- }, {
- set: "0",
- fn: "inverse",
- expect: "Infinity"
- }, {
- set: Infinity,
- fn: "inverse",
- expect: "0"
- }, {
- set: Complex['EPSILON'],
- fn: "equals",
- param: 1e-16,
- expect: "true"
- }, {
- set: 0,
- fn: "equals",
- param: "5i",
- expect: "false"
- }, {
- set: 5,
- fn: "equals",
- param: "5i",
- expect: "false"
- }, {
- set: 5,
- fn: "equals",
- param: 5,
- expect: "true"
- }, {
- set: "10i",
- fn: "equals",
- param: "10i",
- expect: "true"
- }, {
- set: "2 + 3i",
- fn: "equals",
- param: "2 + 3i",
- expect: "true"
- }, {
- set: "2 + 3i",
- fn: "equals",
- param: "5i",
- expect: "false"
- }, {
- set: "2 + 3i",
- fn: "round",
- param: "0",
- expect: "2 + 3i"
- }, {
- set: "2.5 + 3.5i",
- fn: "round",
- param: "1",
- expect: "2.5 + 3.5i"
- }, {
- set: "2.5 + 3.5i",
- fn: "sign",
- param: null,
- expect: "0.5812381937190965 + 0.813733471206735i"
- }, {
- set: "10 + 24i",
- fn: "sign",
- param: null,
- expect: "0.38461538461538464 + 0.9230769230769231i"
- }, {
- set: "1e3i",
- fn: "add",
- param: "3e-3 + 1e2i",
- expect: "0.003 + 1100i"
- }, {
- set: "3.14-4i",
- fn: "coth",
- expect: "0.9994481238383576 + 0.0037048958915019857i"
- }, {
- set: "8i-31",
- fn: "cot",
- expect: "1.6636768291213935e-7 - 1.0000001515864902i"
- }, {
- set: Complex(1, 1).sub(0, 1), // Distance
- fn: "abs",
- expect: "1"
- }, {
- set: Complex(1, 1), // Rotate around center
- fn: "mul",
- param: { abs: 1, arg: Math.PI / 2 },
- expect: "-0.9999999999999999 + i"
- }, {
- set: Complex(1, 1).sub(0, 1).mul({ abs: 1, arg: Math.PI / 2 }), // Rotate around another point
- fn: "add",
- param: "i",
- expect: "2i"
- }, {
- set: Complex(0, 10000000000),
- fn: "log",
- param: null,
- expect: "23.025850929940457 + 1.5707963267948966i"
- }, {
- set: Complex(0, 1000000000000000),
- fn: "log",
- param: null,
- expect: "34.538776394910684 + 1.5707963267948966i"
- }, {
- set: Complex(0, 100000000000000000),
- fn: "log",
- param: null,
- expect: "39.14394658089878 + 1.5707963267948966i"
- }, {
- set: Complex(0, 10000000000000000000),
- fn: "log",
- param: null,
- expect: "43.74911676688687 + 1.5707963267948966i"
- }, {
- set: Complex(0, 1e+30),
- fn: "log",
- param: null,
- expect: "69.07755278982137 + 1.5707963267948966i"
- }, {
- set: Complex(1, 10000000000),
- fn: "log",
- param: null,
- expect: "23.025850929940454 + 1.5707963266948965i"
- }, {
- set: Complex(1, 1000000000000000),
- fn: "log",
- param: null,
- expect: "34.538776394910684 + 1.5707963267948957i"
- }, {
- set: Complex(1, 100000000000000000),
- fn: "log",
- param: null,
- expect: "39.14394658089878 + 1.5707963267948966i"
- }, {
- set: Complex(1, 10000000000000000000),
- fn: "log",
- param: null,
- expect: "43.74911676688687 + 1.5707963267948966i"
- }, {
- set: Complex(1, 1e+30),
- fn: "log",
- param: null,
- expect: "69.07755278982137 + 1.5707963267948966i"
- }, {
- set: Complex(-1, 10000000000),
- fn: "log",
- param: null,
- expect: "23.025850929940454 + 1.5707963268948968i"
- }, {
- set: Complex(-1, 1000000000000000),
- fn: "log",
- param: null,
- expect: "34.538776394910684 + 1.5707963267948977i"
- }, {
- set: Complex(-1, 100000000000000000),
- fn: "log",
- param: null,
- expect: "39.14394658089878 + 1.5707963267948968i"
- }, {
- set: Complex(-1, 10000000000000000000),
- fn: "log",
- param: null,
- expect: "43.74911676688687 + 1.5707963267948966i"
- }, {
- set: Complex(-1, 1e+30),
- fn: "log",
- param: null,
- expect: "69.07755278982137 + 1.5707963267948966i"
- }];
- var constructorTests = [{
- set: null,
- expect: "0"
- }, {
- set: undefined,
- expect: "0"
- }, {
- set: "foo",
- error: "SyntaxError: Invalid Param"
- }, {
- set: {},
- error: "SyntaxError: Invalid Param"
- }, {
- set: " + i",
- expect: "i"
- }, {
- set: "3+4i",
- expect: "3 + 4i"
- }, {
- set: "i",
- expect: "i"
- }, {
- set: "3",
- expect: "3"
- }, {
- set: [9, 8],
- expect: "9 + 8i"
- }, {
- set: "2.3",
- expect: "2.3"
- }, {
- set: "2.3",
- expect: "2.3"
- }, {
- set: "0",
- expect: "0"
- }, {
- set: "-0",
- expect: "0"
- }, {
- set: { re: -0, im: 0 },
- expect: "0"
- }, {
- set: { re: 0, im: -0 },
- expect: "0"
- }, {
- set: Infinity,
- expect: "Infinity"
- }, {
- set: -Infinity,
- expect: "Infinity"
- }, {
- set: { re: Infinity, im: 0 },
- expect: "Infinity"
- }, {
- set: { re: -Infinity, im: 0 },
- expect: "Infinity"
- }, {
- set: { re: 0, im: Infinity },
- expect: "Infinity"
- }, {
- set: { re: 0, im: -Infinity },
- expect: "Infinity"
- }, {
- set: " + 7 - i + 3i - + + + + 43 + 2i - i4 + - 33 + 65 - 1 ",
- expect: "-5"
- }, {
- set: " + 7 - i + 3i - + + + + 43 + 2i - i4 + - 33 + 65 - 1 + ",
- error: "SyntaxError: Invalid Param"
- }, {
- set: "-3x + 4",
- error: "SyntaxError: Invalid Param"
- }, {
- set: "- + 7",
- expect: "-7"
- }, {
- set: "4 5i",
- error: "SyntaxError: Invalid Param"
- }, {
- set: "-",
- error: "SyntaxError: Invalid Param"
- }, {
- set: "2.2e-1-3.2e-1i",
- expect: "0.22 - 0.32i"
- }, {
- set: "2.2.",
- error: "SyntaxError: Invalid Param"
- }, {
- set: { r: 0, phi: 4 },
- expect: "0"
- }, {
- set: { r: 1, phi: 1 },
- expect: "0.5403023058681398 + 0.8414709848078965i"
- }, {
- set: { r: Infinity, phi: 0 },
- expect: "Infinity"
- }, {
- set: { r: Infinity, phi: 2 },
- expect: "Infinity"
- }, {
- set: { r: Infinity, phi: Infinity },
- expect: "NaN"
- }, {
- set: { r: Infinity, phi: NaN },
- expect: "NaN"
- }
- ];
- for (let i = 0, len = constructorTests.length; i < len; ++i) {
- if (constructorTests[i].set != null && constructorTests[i].set.hasOwnProperty('r')) {
- constructorTests.push({
- set: {
- abs: constructorTests[i].set.r,
- arg: constructorTests[i].set.phi,
- },
- expect: constructorTests[i].expect
- })
- }
- }
- function stringify(value) {
- return JSON.stringify(value, function replacer(key, val) {
- if (typeof val === "number") {
- return val.toString();
- }
- return val;
- })
- }
- function describeTest(test) {
- var ctor = "new Complex(" + (test.set !== undefined ? stringify(test.set) : "") + ")";
- var fnCall = test.fn == null
- ? ""
- : "." + test.fn + "(" + (test.param !== undefined ? stringify(test.param) : "") + ")";
- var expectedResult = test.expect == null
- ? ""
- : " === " + stringify(test.expect);
- var error = test.error == null
- ? ""
- : " should throw " + test.error;
- return ctor + fnCall + expectedResult + error;
- }
- describe("Complex functions", function () {
- for (var i = 0; i < functionTests.length; i++) {
- (function (test) {
- it(describeTest(test), function () {
- if (test.error) {
- try {
- new Complex(test.set)[test.fn](test.param);
- } catch (e) {
- assert.strictEqual(e.toString(), test.error.toString());
- }
- } else {
- assert.strictEqual(new Complex(test.set)[test.fn](test.param).toString(), test.expect);
- }
- });
- })(functionTests[i]);
- }
- });
- describe("Complex constructor", function () {
- for (var i = 0; i < constructorTests.length; i++) {
- (function (test) {
- it(describeTest(test), function () {
- if (test.error) {
- try {
- new Complex(test.set);
- } catch (e) {
- assert.strictEqual(e.toString(), test.error.toString());
- }
- } else {
- assert.strictEqual(new Complex(test.set).toString(), test.expect);
- }
- });
- })(constructorTests[i]);
- }
- });
- describe("Complex Details", function () {
- it("should work with different params", function () {
- assert.strictEqual(Complex(1, -1).toString(), "1 - i");
- assert.strictEqual(Complex(0, 0).toString(), "0");
- assert.strictEqual(Complex(0, 2).toString(), "2i");
- assert.strictEqual(Complex.I.toString(), "i");
- assert.strictEqual(Complex(0, -2).toString(), "-2i");
- assert.strictEqual(Complex({ re: 0, im: -2 }).toString(), "-2i");
- });
- it("Complex Combinations", function () {
- var zero = Complex(0, 0), one = Complex(1, 1), two = Complex(2, 2);
- assert.strictEqual(zero.toString(), "0");
- assert.strictEqual(one.toString(), "1 + i");
- assert(one.neg().equals(Complex(-1, -1)));
- assert(one.conjugate().equals(Complex(1, -1)));
- assert.strictEqual(one.abs(), Math.SQRT2);
- assert.strictEqual(one.arg(), Math.PI / 4);
- assert.strictEqual(one.add(one).toString(), two.toString());
- assert.strictEqual(one.sub(one).toString(), zero.toString());
- assert.strictEqual(one.mul(2).toString(), two.toString());
- assert.strictEqual(one.mul(one).toString(), Complex(0, 2).toString());
- assert.strictEqual(one.div(2).toString(), "0.5 + 0.5i");
- assert.strictEqual(one.div(one).toString(), "1");
- assert.strictEqual(one.div(0).toString(), "Infinity");
- assert.strictEqual(one.exp().toString(), "1.4686939399158851 + 2.2873552871788423i");
- assert.strictEqual(one.log().toString(), "0.34657359027997264 + 0.7853981633974483i");
- assert.strictEqual(one.pow(one).toString(), "0.2739572538301211 + 0.5837007587586147i");
- assert.strictEqual(one.pow(zero).toString(), "1");
- assert.strictEqual(one.sqrt().toString(), "1.09868411346781 + 0.45508986056222733i");
- assert.strictEqual(one.sin().toString(), "1.2984575814159773 + 0.6349639147847361i");
- assert.strictEqual(one.cos().toString(), "0.8337300251311491 - 0.9888977057628651i");
- assert.strictEqual(one.tan().toString(), "0.27175258531951174 + 1.0839233273386948i");
- assert.strictEqual(one.asin().toString(), "0.6662394324925153 + 1.0612750619050355i");
- assert.strictEqual(one.acos().toString(), "0.9045568943023813 - 1.0612750619050355i");
- assert.strictEqual(one.atan().toString(), "1.0172219678978514 + 0.40235947810852507i");
- assert.strictEqual(Complex(3, 4).abs(), 5);
- assert.strictEqual(Complex("5i + 3").log().exp().toString(), "3 + 5i")
- assert.strictEqual(Complex("-2i - 1").log().exp().toString(), "-1 - 2i")
- });
- it("should calculate distributed conjugate", function () {
- var c1 = Complex(7, 3);
- var c2 = Complex(1, 2);
- var r1 = c1.add(c2).conjugate();
- var r2 = c1.conjugate().add(c2.conjugate());
- assert.strictEqual(r1.toString(), r2.toString());
- });
- it("should be raised to power of 6", function () {
- var c1 = Complex(2, 2);
- var t = c1.pow(6);
- assert.strictEqual(t.toString(), "-9.405287417451663e-14 - 511.9999999999995i");
- });
- it("should handle inverse trig fns", function () {
- var values = [
- new Complex(2.3, 1.4),
- new Complex(-2.3, 1.4),
- new Complex(-2.3, -1.4),
- new Complex(2.3, -1.4)];
- var fns = ['sin', 'cos', 'tan'];
- for (var i = 0; i < values.length; i++) {
- for (var j = 0; j < 3; j++) {
- var a = values[i]['a' + fns[j]]()[fns[j]]();
- var res = values[i];
- assert(Math.abs(a.re - res.re) < 1e-12 && Math.abs(a.im - res.im) < 1e-12);
- }
- }
- });
- it('should handle get real part', function () {
- assert.strictEqual(Complex({ abs: 1, arg: Math.PI / 4 }).re, Math.SQRT2 / 2);
- });
- it('should handle get complex part', function () {
- assert.strictEqual(Complex({ abs: 1, arg: Math.PI / 4 }).im, 0.7071067811865475);
- });
- it('should handle sum', function () {
- assert.strictEqual(Complex({ abs: 1, arg: 0 }).add({ abs: 1, arg: Math.PI / 2 }).abs(), Math.SQRT2);
- assert.strictEqual(Complex({ abs: 1, arg: 0 }).add({ abs: 1, arg: Math.PI / 2 }).arg(), Math.PI / 4);
- });
- it('should handle conjugate', function () {
- assert.strictEqual(Complex({ abs: 1, arg: Math.PI / 4 }).conjugate().toString(), Complex({ abs: 1, arg: -Math.PI / 4 }).toString());
- });
- it('should handle substract', function () {
- assert.strictEqual(Complex({ abs: 1, arg: 0 }).sub({ abs: 1, arg: Math.PI / 2 }).abs().toString(), "1.414213562373095");
- assert.strictEqual(Complex({ abs: 1, arg: 0 }).sub({ abs: 1, arg: Math.PI / 2 }).arg().toString(), "-0.7853981633974484");
- });
- it('should handle arg for the first quadrant', function () {
- assert.strictEqual(Complex({ re: 1, im: 1 }).arg(), Math.PI / 4);
- });
- it('should handle arg for the second quadrant', function () {
- assert.strictEqual(Complex({ re: -1, im: 1 }).arg(), 3 * Math.PI / 4);
- });
- it('should handle arg for the third quadrant', function () {
- assert.strictEqual(Complex({ re: -1, im: -1 }).arg(), -3 * Math.PI / 4);
- });
- it('should handle arg for the fourth quadrant', function () {
- assert.strictEqual(Complex({ re: 1, im: -1 }).arg(), -Math.PI / 4);
- });
- it('should handle arg for the fourth and first quadrant', function () {
- assert.strictEqual(Complex({ re: 1, im: 0 }).arg(), 0);
- });
- it('should handle arg for first and second quadrant', function () {
- assert.strictEqual(Complex({ re: 0, im: 1 }).arg(), Math.PI / 2);
- });
- it('should handle arg for the second and third quadrant', function () {
- assert.strictEqual(Complex({ re: -1, im: 0 }).arg(), Math.PI);
- });
- it('should handle arg for the third and fourth quadrant', function () {
- assert.strictEqual(Complex({ re: 0, im: -1 }).arg(), -Math.PI / 2);
- });
- it("should eat its own dog food", function () {
- var a = Complex(1, -5).toString();
- var b = Complex(a).toString();
- var c = Complex(b).mul(a);
- assert.strictEqual(c.toString(), '-24 - 10i');
- });
- it("should calculate the absolute value of i", function () {
- var a = Complex("i").sign().inverse().mul("i");
- assert.strictEqual(a.toString(), '1');
- });
- it('should take the natural logarithm', function () {
- var n = Complex(Math.E * Math.E).log().div("i").mul(-Math.PI * 2, 1);
- assert.strictEqual(n.toString(), '2 + ' + 4 * Math.PI + "i");
- });
- });
|