class BTAPModelMeasure_Test

Public Instance Methods

setup() click to toggle source
# File lib/openstudio-standards/utilities/template_measure/tests/test.rb, line 17
def setup
  @use_json_package = false
  @use_string_double = true
  @measure_interface_detailed = [

    {
      'name' => 'a_string_argument',
      'type' => 'String',
      'display_name' => 'A String Argument (string)',
      'default_value' => 'The Default Value',
      'is_required' => false
    },
    {
      'name' => 'a_double_argument',
      'type' => 'Double',
      'display_name' => 'A Double numeric Argument (double)',
      'default_value' => 0,
      'max_double_value' => 100.0,
      'min_double_value' => 0.0,
      'is_required' => false
    },
    {
      'name' => 'a_string_double_argument',
      'type' => 'StringDouble',
      'display_name' => 'A String Double numeric Argument (double)',
      'default_value' => 23.0,
      'max_double_value' => 100.0,
      'min_double_value' => 0.0,
      'valid_strings' => ['NA'],
      'is_required' => false
    },
    {
      'name' => 'a_choice_argument',
      'type' => 'Choice',
      'display_name' => 'A Choice String Argument ',
      'default_value' => 'choice_1',
      'choices' => ['choice_1', 'choice_2'],
      'is_required' => false
    },
    {
      'name' => 'a_bool_argument',
      'type' => 'Bool',
      'display_name' => 'A Boolean Argument ',
      'default_value' => false,
      'is_required' => true
    }

  ]

  @good_input_arguments = {
    'a_string_argument' => 'MyString',
    'a_double_argument' => 50.0,
    'a_string_double_argument' => '50.0',
    'a_choice_argument' => 'choice_1',
    'a_bool_argument' => true
  }
end
test_sample() click to toggle source
# File lib/openstudio-standards/utilities/template_measure/tests/test.rb, line 75
def test_sample
  ####### Test Model Creation######
  # You'll need a seed model to test against. You have a few options.
  # If you are only testing arguments, you can use an empty model like I am doing here.
  # Option 1: Model CreationCreate Empty Model object and start doing things to it. Here I am creating an empty model
  # and adding surface geometry to the model
  model = OpenStudio::Model::Model.new
  OpenstudioStandards::Geometry.create_shape_rectangle(model,
                                                       length = 100.0,
                                                       width = 100.0,
                                                       above_ground_storys = 3,
                                                       under_ground_storys = 1,
                                                       floor_to_floor_height = 3.8,
                                                       plenum_height = 1,
                                                       perimeter_zone_depth = 4.57,
                                                       initial_height = 0.0)
  # If we wanted to apply some aspects of a standard to our model we can by using a factory method to bring the
  # standards we want into our tests. So to bring the necb2011 we write.
  necb2011_standard = Standard.build('NECB2011')

  # could add some example contructions if we want. This method will populate the model with some
  # constructions and apply it to the model
  necb2011_standard.model_clear_and_set_example_constructions(model)

  # While debugging and testing, it is sometimes nice to make a copy of the model as it was.
  before_measure_model = copy_model(model)

  # You can save your file anytime you want here I am saving to the
  BTAP::FileIO.save_osm(model, File.join(File.dirname(__FILE__), 'output', 'saved_file.osm'))

  # We can even call the standard methods to apply to the model.
  weather_file_path = OpenstudioStandards::Weather.get_standards_weather_file_path('CAN_BC_Vancouver.Intl.AP.718920_CWEC2020.epw')
  OpenstudioStandards::Weather.model_set_building_location(model, weather_file_path: weather_file_path)

  puts BTAP::FileIO.compare_osm_files(before_measure_model, model)
  necb2011_standard.apply_standard_construction_properties(model: model) # standards candidate

  # Another simple way is to create an NECB
  # building using the helper method below.
  # Option #2 NECB method.
  #   model = create_necb_protype_model(
  #      "LargeOffice",
  #     'NECB HDD Method',
  #      'CAN_BC_Vancouver.Intl.AP.718920_CWEC2016.epw',
  #      "NECB2011"
  #   )

  # You can also run annually the model directly.
  #   necb2011_standard.model_run_simulation_and_log_errors( model, File.join(File.dirname(__FILE__),"output" ))

  # Or a quick sizing run if you need something fast.
  #   necb2011_standard.model_run_sizing_run(model, File.join(File.dirname(__FILE__),"output" ))

  # Another simple way is to create an NECB
  # building using the helper method below.
  # Option #3 Load osm file.
  # model = BTAP::FileIO.load_osm(filepath)

  input_arguments = nil

  if @use_json_package
    input_arguments = {
      'json_input' => '{ "a_string_argument": "The Default Value",
                  "a_double_argument": 0.0,
                  "a_string_double_argument": 23.0,
                  "a_choice_argument": "choice_1",
                  "a_bool_argument": false }'
    }

  else
    # Set up your argument list to test.
    input_arguments = {
      'a_string_argument' => 'MyString',
      'a_double_argument' => 10.0,
      'a_string_double_argument' => 75.3,
      'a_choice_argument' => 'choice_1'
    }
  end

  # Create an instance of the measure
  runner = run_measure(input_arguments, model)
  puts show_output(runner.result)

  assert(runner.result.value.valueName == 'Success')
end