quark_byte_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package quark_byte
  2. import (
  3. "strconv"
  4. "testing"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  6. mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
  8. )
  9. type tester struct {
  10. t *testing.T
  11. }
  12. func TestQByte(t *testing.T) {
  13. sf := &tester{
  14. t: t,
  15. }
  16. sf.newMut()
  17. sf.newFix()
  18. sf.convertInt()
  19. sf.convertStr()
  20. }
  21. // Создаёт мутируемый кварк байта и проверяет базовые свойства.
  22. func (sf *tester) newMut() {
  23. sf.t.Log("newMut")
  24. const wantVal byte = 42
  25. qb := NewQByteMut(wantVal)
  26. if qb == nil {
  27. sf.t.Fatalf("newMut(): кварк не создан (nil)")
  28. }
  29. if qb.Mass() != 1 {
  30. sf.t.Fatalf("newMut(): некорректная масса, получили %d, ожидали %d", qb.Mass(), 1)
  31. }
  32. if qb.Get() != wantVal {
  33. sf.t.Fatalf("newMut(): некорректное значение, получили %d, ожидали %d", qb.Get(), wantVal)
  34. }
  35. // Проверяем, что Set меняет значение для мутируемого кварка
  36. const newVal byte = 7
  37. quark_val.Set(qb.Val(), newVal)
  38. if qb.Get() != newVal {
  39. sf.t.Fatalf("newMut(): значение после Set() некорректно, получили %d, ожидали %d", qb.Get(), newVal)
  40. }
  41. }
  42. // Создаёт кварк байта и проверяет базовые свойства (без изменения значения).
  43. func (sf *tester) newFix() {
  44. sf.t.Log("newFix")
  45. const wantVal byte = 10
  46. qb := NewQByte(wantVal)
  47. if qb == nil {
  48. sf.t.Fatalf("newFix(): кварк не создан (nil)")
  49. }
  50. if qb.Mass() != 1 {
  51. sf.t.Fatalf("newFix(): некорректная масса, получили %d, ожидали %d", qb.Mass(), 1)
  52. }
  53. if qb.Get() != wantVal {
  54. sf.t.Fatalf("newFix(): некорректное значение, получили %d, ожидали %d", qb.Get(), wantVal)
  55. }
  56. }
  57. // Проверяет преобразование в/из int.
  58. func (sf *tester) convertInt() {
  59. sf.t.Log("convertInt")
  60. const srcVal byte = 100
  61. qb := NewQByteMut(srcVal)
  62. if qb == nil {
  63. sf.t.Fatalf("convertInt(): кварк не создан (nil)")
  64. }
  65. if qb.ToInt() != int(srcVal) {
  66. sf.t.Fatalf("convertInt(): ToInt() вернул %d, ожидали %d", qb.ToInt(), int(srcVal))
  67. }
  68. const newIntVal = 200
  69. mKh.Hassert(newIntVal >= 0 && newIntVal <= 255,
  70. defs.Str("QByte.FromInt(): значение вне диапазона байта"))
  71. quark_val.Set(qb.Val(), byte(newIntVal))
  72. if qb.Get() != byte(newIntVal) {
  73. sf.t.Fatalf("convertInt(): FromInt() установил %d, ожидали %d", qb.Get(), byte(newIntVal))
  74. }
  75. }
  76. // Проверяет преобразование в/из строки.
  77. func (sf *tester) convertStr() {
  78. sf.t.Log("проверка преобразования в/из строки")
  79. const srcVal byte = 5
  80. qb := NewQByteMut(srcVal)
  81. if qb == nil {
  82. sf.t.Fatalf("convertStr(): кварк не создан (nil)")
  83. }
  84. // ToStr должен возвращать строковое представление байта как числа
  85. strVal := qb.ToStr()
  86. if strVal != "5" {
  87. sf.t.Fatalf("convertStr(): ToStr() вернул %q, ожидали 5", strVal)
  88. }
  89. // FromStr использует StrToInt, поэтому передаём числовую строку
  90. const newIntVal = 13
  91. v, err := strconv.Atoi("13")
  92. mKh.Hassert(err == nil,
  93. defs.Str("QByte.FromStr(): не удалось преобразовать строку в int, err=\n\t%v", err))
  94. //go:fix inline
  95. FromInt(qb, v)
  96. if qb.Get() != byte(newIntVal) {
  97. sf.t.Fatalf("convertStr(): FromStr() установил %d, ожидали %d", qb.Get(), byte(newIntVal))
  98. }
  99. }