public void TestFormatToDegreeMinuteSecond()
        {
            Assert.AreEqual("nan", SwissEph.FormatToDegreeMinuteSecond(double.NaN));

            Assert.AreEqual("   0° 0' 0.0000", SwissEph.FormatToDegreeMinuteSecond(0));
            Assert.AreEqual("  12° 9'18.0000", SwissEph.FormatToDegreeMinuteSecond(12.155));
            Assert.AreEqual("  98°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(98.7654321));
            Assert.AreEqual(" -98°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(-98.7654321));
            Assert.AreEqual(" 198°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(198.7654321));
            Assert.AreEqual("-198°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(-198.7654321));

            String format = "D1";

            Assert.AreEqual("   0° 0' 0.0000", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("  12° 9'18.0000", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("  98°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual(" -98°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual(" 198°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("-198°45'55.5556", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "D2";
            Assert.AreEqual("   0° 0' 0\"", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("  12° 9'18\"", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("  98°45'55\"", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual(" -98°45'55\"", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual(" 198°45'55\"", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("-198°45'55\"", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "Z1";
            Assert.AreEqual(" 0 ar  0' 0.0000", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("12 ar  9'18.0000", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual(" 8 cn 45'55.5556", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual(" 8 cn 45'55.5556", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("18 li 45'55.5556", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("18 li 45'55.5556", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "Z2";
            Assert.AreEqual(" 0 ar  0' 0\"", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("12 ar  9'18\"", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual(" 8 cn 45'55\"", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual(" 8 cn 45'55\"", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("18 li 45'55\"", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("18 li 45'55\"", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[d|dd|ddd|dddd|ddddd]";
            Assert.AreEqual("[0| 0|  0|   0|    0]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[12|12| 12|  12|   12]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[98|98| 98|  98|   98]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[-98|-98|-98| -98|  -98]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[198|198|198| 198|  198]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[-198|-198|-198|-198| -198]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[D|DD|DDD|DDDD|DDDDD]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[12|12|012|0012|00012]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[98|98|098|0098|00098]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[-98|-98|-98|-098|-0098]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[198|198|198|0198|00198]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[-198|-198|-198|-198|-0198]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[a|aa|aaa|aaaa|aaaaa]";
            Assert.AreEqual("[0| 0|  0|   0|    0]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[12|12| 12|  12|   12]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[98|98| 98|  98|   98]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[98|98| 98|  98|   98]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[198|198|198| 198|  198]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[198|198|198| 198|  198]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[A|AA|AAA|AAAA|AAAAA]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[12|12|012|0012|00012]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[98|98|098|0098|00098]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[98|98|098|0098|00098]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[198|198|198|0198|00198]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[198|198|198|0198|00198]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[n|nn|nnn|nnnn|nnnnn]";
            Assert.AreEqual("[0| 0|  0|   0|    0]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[0| 0|  0|   0|    0]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[3| 3|  3|   3|    3]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[3| 3|  3|   3|    3]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[6| 6|  6|   6|    6]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[6| 6|  6|   6|    6]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[N|NN|NNN|NNNN|NNNNN]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[3|03|003|0003|00003]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[3|03|003|0003|00003]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[6|06|006|0006|00006]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[6|06|006|0006|00006]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[g|gg|ggg|gggg|ggggg]";
            Assert.AreEqual("[0| 0|  0|   0|    0]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[12|12| 12|  12|   12]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[8| 8|  8|   8|    8]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[8| 8|  8|   8|    8]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[18|18| 18|  18|   18]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[18|18| 18|  18|   18]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[G|GG|GGG|GGGG|GGGGG]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[12|12|012|0012|00012]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[8|08|008|0008|00008]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[8|08|008|0008|00008]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[18|18|018|0018|00018]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[18|18|018|0018|00018]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[m|mm|mmm|mmmm|mmmmm]";
            Assert.AreEqual("[0| 0|  0|   0|    0]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[9| 9|  9|   9|    9]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[45|45| 45|  45|   45]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[45|45| 45|  45|   45]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[45|45| 45|  45|   45]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[45|45| 45|  45|   45]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[M|MM|MMM|MMMM|MMMMM]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[9|09|009|0009|00009]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[45|45|045|0045|00045]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[45|45|045|0045|00045]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[45|45|045|0045|00045]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[45|45|045|0045|00045]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[s|ss|sss|ssss|sssss]";
            Assert.AreEqual("[0| 0|  0|   0|    0]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[18|18| 18|  18|   18]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[55|55| 55|  55|   55]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[55|55| 55|  55|   55]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[55|55| 55|  55|   55]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[55|55| 55|  55|   55]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[S|SS|SSS|SSSS|SSSSS]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[18|18|018|0018|00018]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[55|55|055|0055|00055]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[55|55|055|0055|00055]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[55|55|055|0055|00055]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[55|55|055|0055|00055]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[p|pp|ppp|pppp|ppppp]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[P|PP|PPP|PPPP|PPPPP]";
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[0|00|000|0000|00000]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[6|56|556|5556|55556]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[z|zz|zzz|zzzz|zzzzz]";
            Assert.AreEqual("[♈|ar|Aries|Aries|Aries]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[♈|ar|Aries|Aries|Aries]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[♋|cn|Cancer|Cancer|Cancer]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[♋|cn|Cancer|Cancer|Cancer]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[♎|li|Libra|Libra|Libra]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[♎|li|Libra|Libra|Libra]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[Z|ZZ|ZZZ|ZZZZ|ZZZZZ]";
            Assert.AreEqual("[♈|ar|Aries|Aries|Aries]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[♈|ar|Aries|Aries|Aries]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[♋|cn|Cancer|Cancer|Cancer]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[♋|cn|Cancer|Cancer|Cancer]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[♎|li|Libra|Libra|Libra]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[♎|li|Libra|Libra|Libra]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));

            format = "[-|+]";
            Assert.AreEqual("[| ]", SwissEph.FormatToDegreeMinuteSecond(0, format));
            Assert.AreEqual("[| ]", SwissEph.FormatToDegreeMinuteSecond(12.155, format));
            Assert.AreEqual("[| ]", SwissEph.FormatToDegreeMinuteSecond(98.7654321, format));
            Assert.AreEqual("[-|-]", SwissEph.FormatToDegreeMinuteSecond(-98.7654321, format));
            Assert.AreEqual("[| ]", SwissEph.FormatToDegreeMinuteSecond(198.7654321, format));
            Assert.AreEqual("[-|-]", SwissEph.FormatToDegreeMinuteSecond(-198.7654321, format));
        }