initialization_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package gago
  2. import (
  3. "strings"
  4. "testing"
  5. )
  6. func TestInitUnifFloat64(t *testing.T) {
  7. var (
  8. N = []int{0, 1, 2, 42}
  9. bounds = []struct {
  10. lower, upper float64
  11. }{
  12. {
  13. lower: -1,
  14. upper: 0,
  15. },
  16. {
  17. lower: 0,
  18. upper: 1,
  19. },
  20. {
  21. lower: -1,
  22. upper: 1,
  23. },
  24. }
  25. rng = newRandomNumberGenerator()
  26. )
  27. for _, n := range N {
  28. for _, b := range bounds {
  29. var vector = InitUnifFloat64(n, b.lower, b.upper, rng)
  30. // Check length
  31. if len(vector) != n {
  32. t.Error("InitUnifFloat64 didn't produce the right number of values")
  33. }
  34. // Check values are bounded
  35. for _, v := range vector {
  36. if v <= b.lower || v >= b.upper {
  37. t.Error("InitUnifFloat64 produced out of bound values")
  38. }
  39. }
  40. }
  41. }
  42. }
  43. func TestInitJaggFloat64(t *testing.T) {
  44. var (
  45. N = []int{0, 1, 2, 42}
  46. rng = newRandomNumberGenerator()
  47. )
  48. for _, n := range N {
  49. var (
  50. lower = make([]float64, n)
  51. upper = make([]float64, n)
  52. )
  53. for i := 0; i < n; i++ {
  54. lower[i] = 0.0 + rng.Float64()*100.0
  55. upper[i] = lower[i] + rng.Float64()*100.0
  56. }
  57. var vector = InitJaggFloat64(n, lower, upper, rng)
  58. // Check length
  59. if len(vector) != n {
  60. t.Error("InitJaggFloat64 didn't produce the right number of values")
  61. }
  62. // Check values are bounded
  63. for i, v := range vector {
  64. if v <= lower[i] || v >= upper[i] {
  65. t.Error("InitJaggFloat64 produced out of bound values")
  66. }
  67. }
  68. }
  69. }
  70. func TestInitNormFloat64(t *testing.T) {
  71. var rng = newRandomNumberGenerator()
  72. for _, n := range []int{0, 1, 2, 42} {
  73. if len(InitNormFloat64(n, 0, 1, rng)) != n {
  74. t.Error("InitNormFloat64 didn't produce the right number of values")
  75. }
  76. }
  77. }
  78. func TestInitUnifString(t *testing.T) {
  79. var (
  80. rng = newRandomNumberGenerator()
  81. corpus = strings.Split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "")
  82. )
  83. for _, n := range []int{0, 1, 2, 42} {
  84. var genome = InitUnifString(n, corpus, rng)
  85. if len(genome) != n {
  86. t.Error("InitUnifString didn't produce the right number of values")
  87. }
  88. // Check the values are part of the corpus
  89. for _, v := range genome {
  90. var partOfCorpus = false
  91. for _, c := range corpus {
  92. if v == c {
  93. partOfCorpus = true
  94. break
  95. }
  96. }
  97. if !partOfCorpus {
  98. t.Error("InitUnifString produced a value out of the corpus")
  99. }
  100. }
  101. }
  102. }
  103. func TestInitUniqueString(t *testing.T) {
  104. var (
  105. rng = newRandomNumberGenerator()
  106. corpus = strings.Split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "")
  107. )
  108. for _, n := range []int{0, 1, 2, 42} {
  109. var genome = InitUniqueString(n, corpus, rng)
  110. if len(genome) != n {
  111. t.Error("InitUniqueString didn't produce the right number of values")
  112. }
  113. // Check the values are part of the corpus
  114. for _, v := range genome {
  115. var partOfCorpus = false
  116. for _, c := range corpus {
  117. if v == c {
  118. partOfCorpus = true
  119. break
  120. }
  121. }
  122. if !partOfCorpus {
  123. t.Error("InitUniqueString produced a value out of the corpus")
  124. }
  125. }
  126. // Check the values are unique
  127. for i, v1 := range genome {
  128. for j, v2 := range genome {
  129. if i != j && v1 == v2 {
  130. t.Error("InitUniqueString didn't produce unique values")
  131. }
  132. }
  133. }
  134. }
  135. }