trigonometry.sf 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/ruby
  2. include('../lib/bacovia.sf')
  3. var x = Symbol('x', +43)
  4. var y = Symbol('y', -43)
  5. var z = Symbol('z', 1.5)
  6. var k = Symbol('k', -0.5)
  7. assert_eq(asin(sin(+z)) -> numeric.round(-20), +1.5)
  8. assert_eq(asin(sin(-z)) -> numeric.round(-20), -1.5)
  9. assert_eq(acos(cos(+z)) -> numeric.round(-20), +1.5)
  10. assert_eq(acos(cos(-z)) -> numeric.round(-20), +1.5)
  11. assert_eq(atanh(tanh(+x)) -> numeric.round(-20), +43)
  12. assert_eq(atanh(tanh(-x)) -> numeric.round(-20), -43)
  13. assert_eq(atanh(tanh(+y)) -> numeric.round(-20), -43)
  14. assert_eq(acosh(cosh(+x)) -> numeric, +43)
  15. assert_eq(acosh(cosh(-x)) -> numeric, +43)
  16. assert_eq(acosh(cosh(+y)) -> numeric, +43)
  17. assert_eq(asinh(sinh(+x)) -> numeric, +43)
  18. assert_eq(asinh(sinh(-x)) -> numeric.round(-20), -43)
  19. assert_eq(asinh(sinh(+y)) -> numeric.round(-20), -43)
  20. assert_eq(asinh(sinh(k)) -> numeric.round(-20), -0.5)
  21. assert_eq(atanh(tanh(k)) -> numeric.round(-20), -0.5)
  22. assert_eq(acsch(csch(k)) -> numeric.round(-20), -0.5)
  23. assert_eq(acoth(coth(k)) -> numeric.round(-20), -0.5)
  24. assert_eq(acosh(cosh(k)) -> numeric.round(-20), 0.5)
  25. assert_eq(asech(sech(k)) -> numeric.round(-20), 0.5)
  26. var n = Symbol('n', 42)
  27. assert_eq(cos(Log(n)) -> simple.pretty, '((n^-i + n^i)/2)')
  28. assert_eq(sin(Log(n)) -> simple.pretty, '((n^i - n^-i)/(2i))')
  29. assert_eq(cosh(Log(n)) -> simple.pretty, '((1 + n^2)/(2 * n))')
  30. assert_eq(sinh(Log(n)) -> simple.pretty, '((n^2 - 1)/(2 * n))')
  31. assert_eq(asinh(sinh(n)) -> numeric, 42)
  32. assert_eq(acosh(cosh(n)) -> numeric, 42)
  33. #
  34. ## asinh(x)
  35. #
  36. do {
  37. var z = (x**2 - 1)/(2*x)
  38. assert_eq(Exp(asinh(z)) -> numeric.round(-50), +43)
  39. }
  40. #
  41. ## acosh(x)
  42. #
  43. do {
  44. var z = (x**2 + 1)/(2*x)
  45. assert_eq(Exp(acosh(z)) -> numeric.round(-50), +43)
  46. }
  47. do {
  48. var z = (y**2 + 1)/(2*y)
  49. assert_eq(Exp(acosh(z)) -> numeric, exp(acosh(((-43)**2 + 1)/(2*-43))))
  50. }
  51. #
  52. ## atanh(x)
  53. #
  54. do {
  55. var z = (x**2 - 1)/(x**2 + 1)
  56. assert_eq(Exp(atanh(z)) -> numeric.round(-50), +43)
  57. }
  58. do {
  59. var z = (y**2 - 1)/(y**2 + 1)
  60. assert_eq(Exp(atanh(z)) -> numeric.round(-50), 43)
  61. }
  62. say "** Test passed!"