quark_byte_test.go 3.6 KB

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