safe_num_test.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package safe_num
  2. import (
  3. "os"
  4. "testing"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_txt"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner"
  7. )
  8. type tester struct {
  9. t *testing.T
  10. si *MSafeNum
  11. owner *owner.LOwner
  12. }
  13. func TestSafeNum(t *testing.T) {
  14. sf := &tester{
  15. t: t,
  16. owner: owner.LetOwner(1, "test_safe_num"),
  17. }
  18. {
  19. sf.new()
  20. sf.newGetenv()
  21. sf.newFromStr()
  22. sf.set()
  23. sf.reset()
  24. sf.fromStr()
  25. sf.getEnv()
  26. }
  27. {
  28. sf.inc()
  29. sf.dec()
  30. sf.fromBool()
  31. sf.toBool()
  32. sf.toStr()
  33. sf.byte()
  34. }
  35. }
  36. func (sf *tester) byte() {
  37. sf.t.Log("byte")
  38. res := MutSafeNum(sf.owner, 1234)
  39. binData := res.ToByte()
  40. if len(binData) != 8 {
  41. sf.t.Fatalf("byte(): len val(%v)!='123''", len(binData))
  42. }
  43. resVal := res.FromByte(binData)
  44. resVal.Hassert("from []byte")
  45. val := resVal.Ok()
  46. if val != 1234 {
  47. sf.t.Fatalf("byte(): val(%v)!=1234", val)
  48. }
  49. }
  50. func (sf *tester) toStr() {
  51. sf.t.Log("toStr")
  52. res := MutSafeNum(sf.owner, 123)
  53. val := res.Txt()
  54. if val.Get() != "123" {
  55. sf.t.Fatalf("dec(): val(%v)!='123''", val)
  56. }
  57. }
  58. func (sf *tester) toBool() {
  59. sf.t.Log("toBool")
  60. res := MutSafeNum(sf.owner, 0)
  61. val := res.ToBool()
  62. if val {
  63. sf.t.Fatalf("toBool(): val(%v)!=false", val)
  64. }
  65. }
  66. func (sf *tester) fromBool() {
  67. sf.t.Log("fromBool")
  68. res := MutSafeNum(sf.owner, 12)
  69. val := res.FromBool(true)
  70. if val != -1 {
  71. sf.t.Fatalf("fromBool(): val(%v)!=-1", val)
  72. }
  73. }
  74. func (sf *tester) dec() {
  75. sf.t.Log("dec")
  76. res := MutSafeNum(sf.owner, 10)
  77. res.Dec()
  78. if val := res.Get(); val != 9 {
  79. sf.t.Fatalf("dec(): val(%v)!=9", val)
  80. }
  81. }
  82. func (sf *tester) inc() {
  83. sf.t.Log("inc")
  84. res := MutSafeNum(sf.owner, 52)
  85. res.Inc()
  86. if val := res.Get(); val != 53 {
  87. sf.t.Fatalf("inc(): val(%v)!=53", val)
  88. }
  89. }
  90. // Получает целое из строки.
  91. func (sf *tester) newFromStr() {
  92. sf.t.Log("newFromStr")
  93. res := MutSafeNumFromTxt(sf.owner, "-a52")
  94. if res.IsOk() {
  95. sf.t.Fatalf("newFromStr(): err==nil")
  96. }
  97. res = MutSafeNumFromTxt(sf.owner, "-60")
  98. if res.IsErr() {
  99. sf.t.Fatalf("newFromStr(): err=%v", res.Err())
  100. }
  101. if val := res.Ok(); val.Get() != -60 {
  102. sf.t.Fatalf("newFromStr(): val(%v)!=-60", val.Get())
  103. }
  104. }
  105. var testEnv2 = def_txt.LetTxt("TEST_ENV2")
  106. // Получает целое из окружения.
  107. func (sf *tester) newGetenv() {
  108. sf.t.Log("newGetenv")
  109. res := MutSafeNumFromEnv(sf.owner, testEnv2)
  110. if res.IsOk() {
  111. sf.t.Fatalf("newGetenv(): err==nil")
  112. }
  113. _ = os.Unsetenv(testEnv2.String())
  114. _ = os.Setenv(testEnv2.String(), "-52")
  115. res = MutSafeNumFromEnv(sf.owner, testEnv2)
  116. if res.IsErr() {
  117. sf.t.Fatalf("newGetenv(): err=%v", res.Err())
  118. }
  119. if val := res.Ok(); val.Get() != -52 {
  120. sf.t.Fatalf("newGetenv(): val(%v)!=-52", val.Get())
  121. }
  122. }
  123. // Получает значение из окружения.
  124. func (sf *tester) getEnv() {
  125. sf.t.Log("getEnv")
  126. sf.getEnvBad1()
  127. sf.getEnvGood1()
  128. }
  129. var testVal = def_txt.LetTxt("TEST_VAL")
  130. func (sf *tester) getEnvGood1() {
  131. sf.t.Log("getEnvGood1")
  132. _ = os.Unsetenv(testVal.String())
  133. _ = os.Setenv(testVal.String(), "45")
  134. val := MutSafeNum(sf.owner, 0)
  135. res := val.FromEnv(testVal)
  136. if res.IsErr() {
  137. sf.t.Fatalf("getEnvGood1(): err=%v", res.Err())
  138. }
  139. if val := res.Ok(); val.Get() != 45 {
  140. sf.t.Fatalf("getEnvGood1(): val(%v)!=45", val)
  141. }
  142. }
  143. // Окружение не число.
  144. func (sf *tester) getEnvBad1() {
  145. sf.t.Log("getEnvBad1")
  146. _ = os.Unsetenv(testVal.String())
  147. _ = os.Setenv(testVal.String(), "")
  148. val := MutSafeNum(sf.owner, 0)
  149. res := val.FromEnv(testVal)
  150. if res.IsOk() {
  151. sf.t.Fatalf("getEnvBad1(): res==ok")
  152. }
  153. }
  154. // Получает значение из строки.
  155. func (sf *tester) fromStr() {
  156. sf.t.Log("fromStr")
  157. sf.fromStrBad1()
  158. sf.fromStrGood1()
  159. }
  160. func (sf *tester) fromStrGood1() {
  161. sf.t.Log("fromStrGood1")
  162. val := MutSafeNum(sf.owner, 0)
  163. res := val.FromTxt(def_txt.LetTxt("45"))
  164. if res.IsErr() {
  165. sf.t.Fatalf("fromStrGood1(): err=%v", res.Err())
  166. }
  167. if val := res.Ok(); val != 45 {
  168. sf.t.Fatalf("fromStrGood1(): val(%v)!=45", val)
  169. }
  170. }
  171. // Строка не число.
  172. func (sf *tester) fromStrBad1() {
  173. sf.t.Log("fromStrBad1")
  174. val := MutSafeNum(sf.owner, 0)
  175. res := val.FromTxt(def_txt.LetTxt(" "))
  176. if res.IsOk() {
  177. sf.t.Fatalf("fromStrBad1(): res==ok")
  178. }
  179. }
  180. // Сбрасывает хранимое значение.
  181. func (sf *tester) reset() {
  182. sf.t.Log("reset")
  183. sf.si.Reset()
  184. if sf.si.Get() != 0 {
  185. sf.t.Fatalf("reset(): ISafeInt!=0")
  186. }
  187. sf.si.Reset()
  188. if sf.si.Get() != 0 {
  189. sf.t.Fatalf("reset(): ISafeInt!=0")
  190. }
  191. }
  192. // Установка хранимого значения.
  193. func (sf *tester) set() {
  194. sf.t.Log("set")
  195. sf.si.Set(77)
  196. if sf.si.Get() != 77 {
  197. sf.t.Fatalf("set(): ISafeInt!=77")
  198. }
  199. sf.si.Set(-56)
  200. if sf.si.Get() != -56 {
  201. sf.t.Fatalf("set(): ISafeInt!=-56")
  202. }
  203. }
  204. // Создаёт потокобезопасный булевый признак.
  205. func (sf *tester) new() {
  206. sf.t.Log("new")
  207. sf.si = MutSafeNum(sf.owner, 0)
  208. if sf.si == nil {
  209. sf.t.Fatalf("new(): ISafeInt==nil")
  210. }
  211. if sf.si.Get() != 0 {
  212. sf.t.Fatalf("new(): ISafeInt!=0")
  213. }
  214. }