@@ -754,6 +754,45 @@ def test_formula_processing(self):
754754 )
755755 self .assertIn ("$\\ frac{x}{2} = 3$" , item_json ["question" ]["content" ])
756756
757+ def _numeric_answer_values (self , answers ):
758+ item = self ._create_assessment_item (
759+ exercises .INPUT_QUESTION ,
760+ "What is the answer?" ,
761+ [
762+ {"answer" : answer , "correct" : True , "order" : order }
763+ for order , answer in enumerate (answers , start = 1 )
764+ ],
765+ )
766+ self ._create_perseus_zip (
767+ {
768+ "mastery_model" : exercises .M_OF_N ,
769+ "randomize" : True ,
770+ "n" : 1 ,
771+ "m" : 1 ,
772+ "all_assessment_items" : [item .assessment_id ],
773+ "assessment_mapping" : {item .assessment_id : exercises .INPUT_QUESTION },
774+ }
775+ )
776+ exercise_file = self .exercise_node .files .get (preset_id = format_presets .EXERCISE )
777+ zip_file , _ = self ._validate_perseus_zip (exercise_file )
778+ item_json = json .loads (
779+ zip_file .read (f"{ item .assessment_id } .json" ).decode ("utf-8" )
780+ )
781+ options = item_json ["question" ]["widgets" ]["numeric-input 1" ]["options" ]
782+ return [answer ["value" ] for answer in options ["answers" ]]
783+
784+ def test_input_question_drops_non_finite_answers (self ):
785+ values = self ._numeric_answer_values (
786+ [
787+ "6" ,
788+ "1e400" ,
789+ "-1e400" ,
790+ "1" * 401 ,
791+ "1" * 401 + "/" + "1" * 401 ,
792+ ]
793+ )
794+ self .assertEqual (values , [6.0 ])
795+
757796 def test_multiple_formula_processing (self ):
758797 """Test that formulas are properly processed in exercises"""
759798 # Create a question with LaTeX formulas
0 commit comments