Advertisement
Guest User

Untitled

a guest
Oct 21st, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.04 KB | None | 0 0
  1. require 'test_helper'
  2.  
  3. class QuestionPickerTest < ActiveSupport::TestCase
  4.   QUESTIONS_COUNT = 100000
  5.   ACCURACY_THRESHOLD_PERCENTS = 0.3
  6.  
  7.   ONE_ELEVENTH = 1.0 / 11 * 100
  8.  
  9.   setup do
  10.     @question_picker = Exercises::QuestionPicker.new(
  11.       ExerciseQuestion.all,
  12.       exercise_sessions(:one).session_questions
  13.     )
  14.     @expected_question_frequencies = {
  15.       exercise_questions(:question1) => ONE_ELEVENTH,
  16.       exercise_questions(:question2) => ONE_ELEVENTH,
  17.       exercise_questions(:question3) => ONE_ELEVENTH,
  18.       exercise_questions(:question4) => ONE_ELEVENTH * 2,
  19.       exercise_questions(:question5) => ONE_ELEVENTH * 3,
  20.       exercise_questions(:question6) => 0,
  21.       exercise_questions(:question7) => ONE_ELEVENTH,
  22.       exercise_questions(:question8) => ONE_ELEVENTH * 2,
  23.       exercise_questions(:question9) => 0,
  24.       exercise_questions(:question10) => 0,
  25.       exercise_questions(:question11) => 0,
  26.     }
  27.   end
  28.  
  29.   # passed with seed 7020
  30.   test "question picker" do
  31.     picked_questions = pick_questions
  32.     total_sum = picked_questions.values.sum
  33.     picked_questions.each do |question, question_count|
  34.       frequency = question_count.to_f / total_sum * 100
  35.       assert(
  36.         question_frequency_correct?(question, frequency),
  37.         "Frequency for question with id #{question.id} is not correct.
  38.         Expected value: #{@expected_question_frequencies[question]}%, actual value: #{frequency}%
  39.         (difference: #{(@expected_question_frequencies[question] - frequency).abs}%)"
  40.       )
  41.     end
  42.   end
  43.  
  44.   private
  45.  
  46.     def question_frequency_correct?(question, frequency)
  47.       expected_frequency = @expected_question_frequencies[question]
  48.       expected_frequency == 0 ?
  49.         frequency == 0 :
  50.         (expected_frequency - frequency).abs < ACCURACY_THRESHOLD_PERCENTS
  51.     end
  52.  
  53.     def pick_questions
  54.       result = ExerciseQuestion.all.map { |q| [q, 0] }.to_h
  55.  
  56.       QUESTIONS_COUNT.times do
  57.         question = @question_picker.pick
  58.         result[question] += 1
  59.       end
  60.  
  61.       result
  62.     end
  63. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement