safe_int_test.go 4.5 KB

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