Added more tests, more parameters, fixed interval handling
This commit is contained in:
		
							parent
							
								
									26aef364d1
								
							
						
					
					
						commit
						79cd4c0a7f
					
				|  | @ -4,13 +4,14 @@ | |||
| #include <string> | ||||
| 
 | ||||
| EvaluationOptions user_evaluation_options = default_evaluation_options; | ||||
| PrintOptions user_print_options = default_print_options; | ||||
| 
 | ||||
| struct Output_struct { | ||||
|     char * result; | ||||
|     std::vector<char *> messages; | ||||
| }; | ||||
| 
 | ||||
| Output_struct qalculate(const char* input, bool exact_mode, bool interval_mode) { | ||||
| Output_struct qalculate(const char* input, bool exact_mode, bool interval_mode, bool structuring_mode) { | ||||
|     // Create and prepare calculator
 | ||||
|     Calculator* c = new Calculator(); | ||||
|     c->loadExchangeRates(); | ||||
|  | @ -20,17 +21,26 @@ Output_struct qalculate(const char* input, bool exact_mode, bool interval_mode) | |||
|     std::string Input = input; | ||||
|     std::string Output; | ||||
|     // Check evaluation options
 | ||||
|     user_evaluation_options.structuring = (structuring_mode ? | ||||
|         STRUCTURING_FACTORIZE : | ||||
|         STRUCTURING_EXPAND); | ||||
|     user_evaluation_options.interval_calculation = (interval_mode ? | ||||
|         INTERVAL_CALCULATION_NONE : | ||||
|         INTERVAL_CALCULATION_VARIANCE_FORMULA); | ||||
|         INTERVAL_CALCULATION_VARIANCE_FORMULA : | ||||
|         INTERVAL_CALCULATION_NONE); | ||||
|     user_evaluation_options.approximation = (exact_mode ?  | ||||
|         APPROXIMATION_EXACT : | ||||
|         APPROXIMATION_APPROXIMATE); | ||||
|     user_print_options.number_fraction_format = (exact_mode ? | ||||
|         FRACTION_DECIMAL_EXACT : | ||||
|         FRACTION_DECIMAL); | ||||
|     user_print_options.interval_display = (interval_mode ?  | ||||
|         INTERVAL_DISPLAY_INTERVAL : | ||||
|         INTERVAL_DISPLAY_MIDPOINT); | ||||
|     // Prepare output struct
 | ||||
|     struct Output_struct output; | ||||
|     memset(&output,0,sizeof(Output_struct)); | ||||
|     // Evaluate and record result in Output
 | ||||
|     Output = c->calculateAndPrint(Input,2000,user_evaluation_options); | ||||
|     Output = c->calculateAndPrint(Input,2000,user_evaluation_options,user_print_options); | ||||
|     // record messages
 | ||||
|     std::string current_msg; | ||||
|     while (c->message() != NULL) { | ||||
|  | @ -53,7 +63,8 @@ int l_qalc(lua_State* L) { | |||
|     const char * input = luaL_checkstring(L, 1); | ||||
|     bool exact_mode = lua_toboolean(L, 2); | ||||
|     bool interval_mode = lua_toboolean(L, 3); | ||||
|     Output_struct output = qalculate(input, exact_mode, !interval_mode); | ||||
|     bool struct_mode = lua_toboolean(L, 4); | ||||
|     Output_struct output = qalculate(input, exact_mode, interval_mode, struct_mode); | ||||
|     lua_pushstring(L, output.result); | ||||
|     lua_newtable(L); | ||||
|     for (int i = 0; i < output.messages.size(); i++) { | ||||
|  |  | |||
							
								
								
									
										6
									
								
								test.lua
								
								
								
								
							
							
						
						
									
										6
									
								
								test.lua
								
								
								
								
							|  | @ -1,5 +1,9 @@ | |||
| qalculate = require("libqalculator") | ||||
| local result,messages = qalculate.qalc("sin(3 rad)") | ||||
| local result,messages = qalculate.qalc("sin(3 rad)",true,false,true) | ||||
| print(result,table.concat(messages)) | ||||
| local result,messages = qalculate.qalc("4/3",true) | ||||
| print(result,table.concat(messages)) | ||||
| local result,messages = qalculate.qalc("4/3",false) | ||||
| print(result,table.concat(messages)) | ||||
| local result,messages = qalculate.qalc("fibonacci()") | ||||
| print(result,table.concat(messages)) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue