grntest 1.8.3 → 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0013159908bcac111c7776f0a3dadd4e9566c1ca864359e48165f602046d26b8'
4
- data.tar.gz: f586bb84d9337cd155f83c60e246a5f0920b7b80b57038ea111f14d1bef4d806
3
+ metadata.gz: 700629c1af3524674871aadb97ae4fccf658accb7694b7700fea6d4d1f926acb
4
+ data.tar.gz: a671e1928b1dd25d5462e19294d34060fe45356b35a984219322cbe67567b695
5
5
  SHA512:
6
- metadata.gz: ba6a8777de61c2327f98266c485cc9d0a94932faaab380c6bae046d43cb08ce74fba40d25f71bc180cd60cb40839b343486a03fa474ee59017aa93864beebcb4
7
- data.tar.gz: 801eace8ff064342b324fc33d23da68f803a44dcbe48782dc1c9ba49bd74057869496824fa60c71042588f77c86a8d46066c930e3ae9ac7af778d6bd2a57977f
6
+ metadata.gz: 6025788a9481e12bd9627b9b48152a20e8d9665a6f4449575e75389ce409da784bcefd6f409e2e462be5ec42c352f78784ebdd4e2d793ae411907c9907f24206
7
+ data.tar.gz: dae5d48fc1887d63a47c961f1beb8db167e808ebf8f435d70f667f22740e7d1b8e08e57eb3f59bbbd8b2894443f0b5ac78b630a2d55fa20cceaa679b1530dd15
data/doc/text/news.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # News
2
2
 
3
+ ## 1.8.5: 2026-09-04
4
+
5
+ ### Improvements
6
+
7
+ * `#@generate-series`: Improved performance.
8
+
9
+ ## 1.8.4: 2026-03-16
10
+
11
+ ### Improvements
12
+
13
+ * Changed to use non-blocking mode for pipe between `grntest` and
14
+ `groonga` for stable test result.
15
+
3
16
  ## 1.8.3: 2025-04-29
4
17
 
5
18
  ### Improvements
data/grntest.gemspec CHANGED
@@ -49,7 +49,7 @@ Gem::Specification.new do |spec|
49
49
  spec.add_runtime_dependency("groonga-log")
50
50
  spec.add_runtime_dependency("groonga-query-log", ">= 1.4.1")
51
51
  spec.add_runtime_dependency("groonga-synonym")
52
- spec.add_runtime_dependency("json", ">= 2.11.3")
52
+ spec.add_runtime_dependency("json", ">= 2.12.0")
53
53
  spec.add_runtime_dependency("msgpack")
54
54
  spec.add_runtime_dependency("rexml")
55
55
 
@@ -308,12 +308,13 @@ module Grntest
308
308
  @context.collect_query_log = (options[0] == "true")
309
309
  end
310
310
 
311
- def each_generated_series_chunk(evaluator, start, stop)
311
+ def each_generated_series_chunk(template, start, stop)
312
+ evaluator = TemplateEvaluator.new(template, :i)
312
313
  max_chunk_size = 1 * 1024 * 1024 # 1MiB
313
314
  chunk_size = 0
314
315
  records = []
315
316
  (Integer(start)..Integer(stop)).each do |i|
316
- record = evaluator.evaluate(i: i).to_json
317
+ record = evaluator.evaluate(i).to_json
317
318
  records << record
318
319
  chunk_size += record.bytesize
319
320
  if chunk_size > max_chunk_size
@@ -327,8 +328,7 @@ module Grntest
327
328
 
328
329
  def execute_directive_generate_series(parser, line, content, options)
329
330
  start, stop, table, template, = options
330
- evaluator = TemplateEvaluator.new(template.force_encoding("UTF-8"))
331
- each_generated_series_chunk(evaluator,
331
+ each_generated_series_chunk(template.force_encoding("UTF-8"),
332
332
  Integer(start),
333
333
  Integer(stop)) do |records|
334
334
  source = "load --table #{table}\n"
@@ -502,7 +502,7 @@ module Grntest
502
502
  return input if @substitutions.empty?
503
503
  @substitutions.each_value do |pattern, substituted_evaluator, _|
504
504
  input = input.gsub(pattern) do
505
- substituted_evaluator.evaluate(match_data: Regexp.last_match)
505
+ substituted_evaluator.evaluate(Regexp.last_match)
506
506
  end
507
507
  end
508
508
  input
@@ -512,7 +512,7 @@ module Grntest
512
512
  return input if @substitutions.empty?
513
513
  @substitutions.each_value do |pattern, _, normalized_evaluator|
514
514
  input = input.gsub(pattern) do
515
- normalized_evaluator.evaluate(match_data: Regexp.last_match)
515
+ normalized_evaluator.evaluate(Regexp.last_match)
516
516
  end
517
517
  end
518
518
  input
@@ -524,9 +524,11 @@ module Grntest
524
524
  substituted.force_encoding("UTF-8")
525
525
  normalized.force_encoding("UTF-8")
526
526
  substituted_evaluator =
527
- TemplateEvaluator.new("<<STRING.chomp\n#{substituted}\nSTRING")
527
+ TemplateEvaluator.new("<<STRING.chomp\n#{substituted}\nSTRING",
528
+ :match_data)
528
529
  normalized_evaluator =
529
- TemplateEvaluator.new("<<STRING.chomp\n#{normalized}\nSTRING")
530
+ TemplateEvaluator.new("<<STRING.chomp\n#{normalized}\nSTRING",
531
+ :match_data)
530
532
  @substitutions[pattern] = [
531
533
  compile_pattern(pattern),
532
534
  substituted_evaluator,
@@ -15,16 +15,17 @@
15
15
 
16
16
  module Grntest
17
17
  class TemplateEvaluator
18
- def initialize(template)
18
+ def initialize(template, *variable_names)
19
19
  @template = template
20
+ @compiled = eval(<<-TEMPLATE)
21
+ lambda do |#{variable_names.join(", ")}|
22
+ #{@template}
23
+ end
24
+ TEMPLATE
20
25
  end
21
26
 
22
- def evaluate(**local_variables)
23
- _binding = binding
24
- local_variables.each do |name, value|
25
- _binding.local_variable_set(name, value)
26
- end
27
- _binding.eval(@template)
27
+ def evaluate(*values)
28
+ @compiled.call(*values)
28
29
  end
29
30
  end
30
31
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2024 Sutou Kouhei <kou@clear-code.com>
1
+ # Copyright (C) 2012-2026 Sutou Kouhei <kou@clear-code.com>
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -13,11 +13,12 @@
13
13
  # You should have received a copy of the GNU General Public License
14
14
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
- require "pathname"
17
16
  require "fileutils"
17
+ require "io/nonblock"
18
+ require "pathname"
19
+ require "socket"
18
20
  require "tempfile"
19
21
  require "timeout"
20
- require "socket"
21
22
 
22
23
  require "groonga-log"
23
24
  require "json"
@@ -270,7 +271,9 @@ module Grntest
270
271
 
271
272
  def open_pipe
272
273
  IO.pipe("ASCII-8BIT") do |input_read, input_write|
274
+ input_write.nonblock = false
273
275
  IO.pipe("ASCII-8BIT") do |output_read, output_write|
276
+ output_write.nonblock = false
274
277
  yield(input_read, input_write, output_read, output_write)
275
278
  end
276
279
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2025 Sutou Kouhei <kou@clear-code.com>
1
+ # Copyright (C) 2012-2026 Sutou Kouhei <kou@clear-code.com>
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -14,5 +14,5 @@
14
14
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
16
  module Grntest
17
- VERSION = "1.8.3"
17
+ VERSION = "1.8.5"
18
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grntest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.3
4
+ version: 1.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 2.11.3
103
+ version: 2.12.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 2.11.3
110
+ version: 2.12.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: msgpack
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -283,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
283
283
  - !ruby/object:Gem::Version
284
284
  version: '0'
285
285
  requirements: []
286
- rubygems_version: 3.6.7
286
+ rubygems_version: 4.0.16
287
287
  specification_version: 4
288
288
  summary: Grntest is a testing framework for Groonga. You can write a test for Groonga
289
289
  by writing Groonga commands and expected result.