Module: Kumi::Dev::Golden

Defined in:
lib/kumi/dev/golden.rb,
lib/kumi/dev/golden/suite.rb,
lib/kumi/dev/golden/result.rb,
lib/kumi/dev/golden/reporter.rb,
lib/kumi/dev/golden/verifier.rb,
lib/kumi/dev/golden/generator.rb,
lib/kumi/dev/golden/runtime_test.rb,
lib/kumi/dev/golden/representation.rb,
lib/kumi/dev/golden/value_normalizer.rb

Defined Under Namespace

Classes: GenerationResult, Generator, Reporter, Representation, Result, RuntimeTest, RuntimeTestResult, SchemaTestResult, Suite, ValueNormalizer, VerificationResult, Verifier

Constant Summary collapse

REPRESENTATIONS =
[
  Representation.new("ast", extension: "txt"),
  Representation.new("input_plan", extension: "txt"),
  Representation.new("nast", extension: "txt"),
  Representation.new("snast", extension: "txt"),
  Representation.new("lir_00_unoptimized", extension: "txt"),
  Representation.new("lir_01_hoist_scalar_references", extension: "txt"),
  Representation.new("lir_02_inlined", extension: "txt"),
  Representation.new("lir_04_1_loop_fusion", extension: "txt"),
  Representation.new("lir_03_cse", extension: "txt"),
  Representation.new("lir_04_loop_invcm", extension: "txt"),
  Representation.new("lir_06_const_prop", extension: "txt"),
  Representation.new("schema_ruby", extension: "rb"),
  Representation.new("schema_javascript", extension: "mjs")
].freeze

Class Method Summary collapse

Class Method Details

.diff!(*names) ⇒ Object



42
43
44
45
46
# File 'lib/kumi/dev/golden.rb', line 42

def diff!(*names)
  names = [names].flatten.compact
  names = nil if names.empty?
  suite.diff(names)
end

.listObject



28
# File 'lib/kumi/dev/golden.rb', line 28

def list = suite.list

.precompile_schemas!Object

Precompile shared schemas so kumi_syntax_tree is available for imports



17
18
19
20
21
22
23
24
# File 'lib/kumi/dev/golden.rb', line 17

def self.precompile_schemas!
  if defined?(Kumi::TestSharedSchemas)
    Kumi::TestSharedSchemas.constants.each do |const|
      mod = Kumi::TestSharedSchemas.const_get(const)
      mod.runner if mod.is_a?(Module) && mod.respond_to?(:runner)
    end
  end
end

.suiteObject



77
78
79
# File 'lib/kumi/dev/golden.rb', line 77

def suite
  @suite ||= Suite.new
end

.test_all_codegen!(*names_arg) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/kumi/dev/golden.rb', line 48

def test_all_codegen!(*names_arg)
  names_arg = [names_arg].flatten.compact
  names = names_arg.any? ? names_arg : suite.send(:schema_names)

  ruby_names = suite.send(:filter_testable_schemas, names, :ruby)
  ruby_results = ruby_names.map { |n| RuntimeTest.new(n, :ruby).run(suite.send(:schema_dir, n)) }

  js_names = suite.send(:filter_testable_schemas, names, :javascript)
  js_results = js_names.map { |n| RuntimeTest.new(n, :javascript).run(suite.send(:schema_dir, n)) }

  Reporter.new.report_runtime_tests(ruby: ruby_results, javascript: js_results)
end

.test_codegen!(*names_arg) ⇒ Object



61
62
63
64
65
66
67
# File 'lib/kumi/dev/golden.rb', line 61

def test_codegen!(*names_arg)
  names_arg = [names_arg].flatten.compact
  names = names_arg.any? ? names_arg : suite.send(:schema_names)
  testable = suite.send(:filter_testable_schemas, names, :ruby)
  results = testable.map { |n| RuntimeTest.new(n, :ruby).run(suite.send(:schema_dir, n)) }
  Reporter.new.report_runtime_tests(ruby: results)
end

.test_js_codegen!(*names_arg) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/kumi/dev/golden.rb', line 69

def test_js_codegen!(*names_arg)
  names_arg = [names_arg].flatten.compact
  names = names_arg.any? ? names_arg : suite.send(:schema_names)
  testable = suite.send(:filter_testable_schemas, names, :javascript)
  results = testable.map { |n| RuntimeTest.new(n, :javascript).run(suite.send(:schema_dir, n)) }
  Reporter.new.report_runtime_tests(javascript: results)
end

.update!(*names) ⇒ Object



30
31
32
33
34
# File 'lib/kumi/dev/golden.rb', line 30

def update!(*names)
  names = [names].flatten.compact
  names = nil if names.empty?
  suite.update(names)
end

.verify!(*names) ⇒ Object



36
37
38
39
40
# File 'lib/kumi/dev/golden.rb', line 36

def verify!(*names)
  names = [names].flatten.compact
  names = nil if names.empty?
  suite.verify(names)
end