safe_int_test.go 4.7 KB

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