Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'test_helper'
- class QuestionPickerTest < ActiveSupport::TestCase
- QUESTIONS_COUNT = 100000
- ACCURACY_THRESHOLD_PERCENTS = 0.3
- ONE_ELEVENTH = 1.0 / 11 * 100
- setup do
- @question_picker = Exercises::QuestionPicker.new(
- ExerciseQuestion.all,
- exercise_sessions(:one).session_questions
- )
- @expected_question_frequencies = {
- exercise_questions(:question1) => ONE_ELEVENTH,
- exercise_questions(:question2) => ONE_ELEVENTH,
- exercise_questions(:question3) => ONE_ELEVENTH,
- exercise_questions(:question4) => ONE_ELEVENTH * 2,
- exercise_questions(:question5) => ONE_ELEVENTH * 3,
- exercise_questions(:question6) => 0,
- exercise_questions(:question7) => ONE_ELEVENTH,
- exercise_questions(:question8) => ONE_ELEVENTH * 2,
- exercise_questions(:question9) => 0,
- exercise_questions(:question10) => 0,
- exercise_questions(:question11) => 0,
- }
- end
- # passed with seed 7020
- test "question picker" do
- picked_questions = pick_questions
- total_sum = picked_questions.values.sum
- picked_questions.each do |question, question_count|
- frequency = question_count.to_f / total_sum * 100
- assert(
- question_frequency_correct?(question, frequency),
- "Frequency for question with id #{question.id} is not correct.
- Expected value: #{@expected_question_frequencies[question]}%, actual value: #{frequency}%
- (difference: #{(@expected_question_frequencies[question] - frequency).abs}%)"
- )
- end
- end
- private
- def question_frequency_correct?(question, frequency)
- expected_frequency = @expected_question_frequencies[question]
- expected_frequency == 0 ?
- frequency == 0 :
- (expected_frequency - frequency).abs < ACCURACY_THRESHOLD_PERCENTS
- end
- def pick_questions
- result = ExerciseQuestion.all.map { |q| [q, 0] }.to_h
- QUESTIONS_COUNT.times do
- question = @question_picker.pick
- result[question] += 1
- end
- result
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement