File: module_language/structure_declaration_test.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: Test#8
  module: Grammar#10
  module: ModuleLanguage#12
  module: Declaration#14
  class: StructureTest#16
inherits from
  Test ( Minitest )
has properties
method: setup #23
method: test_structure #28
method: test_with_empty_declaration #39
method: test_with_single_declaration #50
method: test_with_some_declarations #69
method: test_nested_structure #93

Code

   1  # frozen_string_literal: true
   2 
   3  require "test_helper"
   4 
   5 
   6  module Umu
   7 
   8  module Test
   9 
  10  module Grammar
  11 
  12  module ModuleLanguage
  13 
  14  module Declaration
  15 
  16  class StructureTest < Minitest::Test
  17  =begin
  18  <md-structure-declaration> ::=
  19      STRUCTURE ID "=" <me-expression>
  20      [ WHERE "{" { <md-declaration> } "}"
  21      ;
  22  =end
  23      def setup
  24          @interp = Api.setup_interpreter
  25      end
  26 
  27 
  28      def test_structure
  29          interp = Api.eval_decls @interp, <<-EOS
  30              structure M = struct { val x = 3 }
  31              EOS
  32 
  33          value = Api.eval_expr interp, "M::x"
  34          assert_instance_of VCAN::Int, value
  35          assert_equal       3,         value.val
  36      end
  37 
  38 
  39      def test_with_empty_declaration
  40          interp = Api.eval_decls @interp, <<-EOS
  41              structure M = struct { val x = 3 } where { }
  42              EOS
  43 
  44          value = Api.eval_expr interp, "M::x"
  45          assert_instance_of VCAN::Int, value
  46          assert_equal       3,         value.val
  47      end
  48 
  49 
  50      def test_with_single_declaration
  51          interp = Api.eval_decls @interp, <<-EOS
  52              structure M = struct {
  53                  val x = y
  54              } where {
  55                  val y = 3
  56              }
  57              EOS
  58 
  59          value = Api.eval_expr interp, "M::x"
  60          assert_instance_of VCAN::Int, value
  61          assert_equal       3,         value.val
  62 
  63          assert_raises(X::SelectionError) do
  64              Api.eval_expr interp, "M::y"
  65          end
  66      end
  67 
  68 
  69      def test_with_some_declarations
  70          interp = Api.eval_decls @interp, <<-EOS
  71              structure M = struct {
  72                  val x = y + z
  73              } where {
  74                  val y = 3
  75                  val z = 4
  76              }
  77              EOS
  78 
  79          value = Api.eval_expr interp, "M::x"
  80          assert_instance_of VCAN::Int, value
  81          assert_equal       7,         value.val
  82 
  83          assert_raises(X::SelectionError) do
  84              Api.eval_expr interp, "M::y"
  85          end
  86 
  87          assert_raises(X::SelectionError) do
  88              Api.eval_expr interp, "M::z"
  89          end
  90      end
  91 
  92 
  93      def test_nested_structure
  94          interp = Api.eval_decls @interp, <<-EOS
  95              structure M = struct {
  96                  val x = 3
  97                  structure N = struct { val y = 4 }
  98                  val z = 5
  99              }
 100              EOS
 101 
 102          value = Api.eval_expr interp, "M::x"
 103          assert_instance_of VCAN::Int, value
 104          assert_equal       3,         value.val
 105 
 106          value = Api.eval_expr interp, "M::N::y"
 107          assert_instance_of VCAN::Int, value
 108          assert_equal       4,         value.val
 109 
 110          value = Api.eval_expr interp, "M::z"
 111          assert_instance_of VCAN::Int, value
 112          assert_equal       5,         value.val
 113 
 114          assert_raises(X::SelectionError) do
 115              Api.eval_expr interp, "M::y"
 116          end
 117      end
 118  end
 119 
 120  end # Umu::Test::Grammar::ModuleLanguage::Declaration
 121 
 122  end # Umu::Test::Grammar::ModuleLanguage
 123 
 124  end # Umu::Test::Grammar
 125 
 126  end # Umu::Test
 127 
 128  end # Umu