safe_num_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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.LTxt
  106. // Получает целое из окружения.
  107. func (sf *tester) newGetenv() {
  108. sf.t.Log("newGetenv")
  109. testEnv2 = def_txt.LetTxt(sf.owner, "TEST_ENV2")
  110. res := MutSafeNumFromEnv(sf.owner, testEnv2)
  111. if res.IsOk() {
  112. sf.t.Fatalf("newGetenv(): err==nil")
  113. }
  114. _ = os.Unsetenv(testEnv2.String())
  115. _ = os.Setenv(testEnv2.String(), "-52")
  116. res = MutSafeNumFromEnv(sf.owner, testEnv2)
  117. if res.IsErr() {
  118. sf.t.Fatalf("newGetenv(): err=%v", res.Err())
  119. }
  120. if val := res.Ok(); val.Get() != -52 {
  121. sf.t.Fatalf("newGetenv(): val(%v)!=-52", val.Get())
  122. }
  123. }
  124. // Получает значение из окружения.
  125. func (sf *tester) getEnv() {
  126. sf.t.Log("getEnv")
  127. sf.getEnvBad1()
  128. sf.getEnvGood1()
  129. }
  130. var testVal *def_txt.LTxt
  131. func (sf *tester) getEnvGood1() {
  132. sf.t.Log("getEnvGood1")
  133. testVal = def_txt.LetTxt(sf.owner, "TEST_VAL")
  134. _ = os.Unsetenv(testVal.String())
  135. _ = os.Setenv(testVal.String(), "45")
  136. val := MutSafeNum(sf.owner, 0)
  137. res := val.FromEnv(testVal)
  138. if res.IsErr() {
  139. sf.t.Fatalf("getEnvGood1(): err=%v", res.Err())
  140. }
  141. if val := res.Ok(); val.Get() != 45 {
  142. sf.t.Fatalf("getEnvGood1(): val(%v)!=45", val)
  143. }
  144. }
  145. // Окружение не число.
  146. func (sf *tester) getEnvBad1() {
  147. sf.t.Log("getEnvBad1")
  148. _ = os.Unsetenv(testVal.String())
  149. _ = os.Setenv(testVal.String(), "")
  150. val := MutSafeNum(sf.owner, 0)
  151. res := val.FromEnv(testVal)
  152. if res.IsOk() {
  153. sf.t.Fatalf("getEnvBad1(): res==ok")
  154. }
  155. }
  156. // Получает значение из строки.
  157. func (sf *tester) fromStr() {
  158. sf.t.Log("fromStr")
  159. sf.fromStrBad1()
  160. sf.fromStrGood1()
  161. }
  162. func (sf *tester) fromStrGood1() {
  163. sf.t.Log("fromStrGood1")
  164. val := MutSafeNum(sf.owner, 0)
  165. res := val.FromTxt(def_txt.LetTxt(sf.owner, "45"))
  166. if res.IsErr() {
  167. sf.t.Fatalf("fromStrGood1(): err=%v", res.Err())
  168. }
  169. if val := res.Ok(); val != 45 {
  170. sf.t.Fatalf("fromStrGood1(): val(%v)!=45", val)
  171. }
  172. }
  173. // Строка не число.
  174. func (sf *tester) fromStrBad1() {
  175. sf.t.Log("fromStrBad1")
  176. val := MutSafeNum(sf.owner, 0)
  177. res := val.FromTxt(def_txt.LetTxt(sf.owner, " "))
  178. if res.IsOk() {
  179. sf.t.Fatalf("fromStrBad1(): res==ok")
  180. }
  181. }
  182. // Сбрасывает хранимое значение.
  183. func (sf *tester) reset() {
  184. sf.t.Log("reset")
  185. sf.si.Reset()
  186. if sf.si.Get() != 0 {
  187. sf.t.Fatalf("reset(): ISafeInt!=0")
  188. }
  189. sf.si.Reset()
  190. if sf.si.Get() != 0 {
  191. sf.t.Fatalf("reset(): ISafeInt!=0")
  192. }
  193. }
  194. // Установка хранимого значения.
  195. func (sf *tester) set() {
  196. sf.t.Log("set")
  197. sf.si.Set(77)
  198. if sf.si.Get() != 77 {
  199. sf.t.Fatalf("set(): ISafeInt!=77")
  200. }
  201. sf.si.Set(-56)
  202. if sf.si.Get() != -56 {
  203. sf.t.Fatalf("set(): ISafeInt!=-56")
  204. }
  205. }
  206. // Создаёт потокобезопасный булевый признак.
  207. func (sf *tester) new() {
  208. sf.t.Log("new")
  209. sf.si = MutSafeNum(sf.owner, 0)
  210. if sf.si == nil {
  211. sf.t.Fatalf("new(): ISafeInt==nil")
  212. }
  213. if sf.si.Get() != 0 {
  214. sf.t.Fatalf("new(): ISafeInt!=0")
  215. }
  216. }