I'm having a problem performing comparisons when the arguments are negative numbers. A simple example:
<krpano version="1.0.8" onstart="lt_simple_test" >
<action name="lt_simple_test">
if (-270 LT -180,
trace("correct");
<!--else-->,
js(alert("INCORRECT RESULT: (-270 LT -180) evaluates to false"));
);
</action>
<preview type="grid(cube,16,16,512,0xCCCCCC,0xFFFFFF,0x999999);" details="16" />
</krpano>
Display More
This code will show that the (-270 LT -180) evaluates as false for release 1.0.8 beta 9 (build 2010-02-21). I was definitely seeing problems with the previous release as well. By the way, this particular set of numbers also produces the incorrect result for LE, GT and GE.
Not all negative number combinations produce errors however, (-300 LT -30) is wrong but (-300 LT -60) is correct. (-60 LT -90) is incorrect but (-60 LT -120) is right. One thing that is consistent, is that whenever the error occurs , both numbers will be negative.
Here is some code to test the operator across a range of numbers. It sweeps each operand from -360 to 360 in increments of 30:
<krpano version="1.0.8" onstart="loop_test();js(alert('please press the o key to see error listing'));" >
<!-- loop_test
runs the lt_test comparison test function with arguments a and b across a range of numbers -->
<action name="loop_test">
set(a,-360);
while(a LE 360,
set(b,-360);
while(b LE 360,
lt_test(get(a),get(b));
inc(b,30);
);
inc(a,30);
wait(0);
);
</action>
<!-- lt_test <a.num> <b.num>
test function to check correctness of LT operator by comparing it with a comparison computed in an alternate way -->
<action name="lt_test"> <!-- a, b -->
if (%1 LT %2,set(_lt,true);,set(_lt,false);); <!-- do the comparison, save the result in _lt -->
<!-- because the error seems to occur only when comparing with a negative number with a negative number, subtract and compare with zero-->
sub(_check,%1,%2);
if (_check LT 0,set(_ck,true);,set(_ck,false););
if (_lt != _ck,
trace("error: LT evaluates (%1 LT %2)=",get(_lt));
);
</action>
<!-- _while_action
private function to execute while loop action -->
<action name="_while_action">
trace("Error: content popped too many times in while loop");
</action>
<!-- while <condition.str> <action.str>
while loop function which repeatedly iterates the action as long as the condition is true-->
<action name="while"> <!--condition.str,action.str-->
push(action[_while_action].content);
set(action[_while_action].content,"if(%1,%2;_while_action(););");
_while_action();
pop(action[_while_action].content);
</action>
<preview type="grid(cube,16,16,512,0xCCCCCC,0xFFFFFF,0x999999);" details="16" />
</krpano>
Display More
This produces the following result. Note that not all comparisons produce erroneous results:
QuoteDisplay MoreINFO: krpano 1.0.8 beta 9 (build 2010-02-21)
INFO: Flashplayer WIN 10,0,2,54 ActiveX (debug)
INFO: registered to: pinsane
INFO: error: LT evaluates (-360 LT -330)=false
INFO: error: LT evaluates (-360 LT -300)=false
INFO: error: LT evaluates (-360 LT -270)=false
INFO: error: LT evaluates (-360 LT -240)=false
INFO: error: LT evaluates (-360 LT -210)=false
INFO: error: LT evaluates (-360 LT -180)=false
INFO: error: LT evaluates (-360 LT -150)=false
INFO: error: LT evaluates (-360 LT -120)=false
INFO: error: LT evaluates (-360 LT -30)=false
INFO: error: LT evaluates (-330 LT -360)=true
INFO: error: LT evaluates (-330 LT -300)=false
INFO: error: LT evaluates (-330 LT -270)=false
INFO: error: LT evaluates (-330 LT -240)=false
INFO: error: LT evaluates (-330 LT -210)=false
INFO: error: LT evaluates (-330 LT -180)=false
INFO: error: LT evaluates (-330 LT -150)=false
INFO: error: LT evaluates (-330 LT -120)=false
INFO: error: LT evaluates (-330 LT -30)=false
INFO: error: LT evaluates (-300 LT -360)=true
INFO: error: LT evaluates (-300 LT -330)=true
INFO: error: LT evaluates (-300 LT -270)=false
INFO: error: LT evaluates (-300 LT -240)=false
INFO: error: LT evaluates (-300 LT -210)=false
INFO: error: LT evaluates (-300 LT -180)=false
INFO: error: LT evaluates (-300 LT -150)=false
INFO: error: LT evaluates (-300 LT -120)=false
INFO: error: LT evaluates (-300 LT -30)=false
INFO: error: LT evaluates (-270 LT -360)=true
INFO: error: LT evaluates (-270 LT -330)=true
INFO: error: LT evaluates (-270 LT -300)=true
INFO: error: LT evaluates (-270 LT -240)=false
INFO: error: LT evaluates (-270 LT -210)=false
INFO: error: LT evaluates (-270 LT -180)=false
INFO: error: LT evaluates (-270 LT -150)=false
INFO: error: LT evaluates (-270 LT -120)=false
INFO: error: LT evaluates (-240 LT -360)=true
INFO: error: LT evaluates (-240 LT -330)=true
INFO: error: LT evaluates (-240 LT -300)=true
INFO: error: LT evaluates (-240 LT -270)=true
INFO: error: LT evaluates (-240 LT -210)=false
INFO: error: LT evaluates (-240 LT -180)=false
INFO: error: LT evaluates (-240 LT -150)=false
INFO: error: LT evaluates (-240 LT -120)=false
INFO: error: LT evaluates (-210 LT -360)=true
INFO: error: LT evaluates (-210 LT -330)=true
INFO: error: LT evaluates (-210 LT -300)=true
INFO: error: LT evaluates (-210 LT -270)=true
INFO: error: LT evaluates (-210 LT -240)=true
INFO: error: LT evaluates (-210 LT -180)=false
INFO: error: LT evaluates (-210 LT -150)=false
INFO: error: LT evaluates (-210 LT -120)=false
INFO: error: LT evaluates (-180 LT -360)=true
INFO: error: LT evaluates (-180 LT -330)=true
INFO: error: LT evaluates (-180 LT -300)=true
INFO: error: LT evaluates (-180 LT -270)=true
INFO: error: LT evaluates (-180 LT -240)=true
INFO: error: LT evaluates (-180 LT -210)=true
INFO: error: LT evaluates (-180 LT -150)=false
INFO: error: LT evaluates (-180 LT -120)=false
INFO: error: LT evaluates (-150 LT -360)=true
INFO: error: LT evaluates (-150 LT -330)=true
INFO: error: LT evaluates (-150 LT -300)=true
INFO: error: LT evaluates (-150 LT -270)=true
INFO: error: LT evaluates (-150 LT -240)=true
INFO: error: LT evaluates (-150 LT -210)=true
INFO: error: LT evaluates (-150 LT -180)=true
INFO: error: LT evaluates (-150 LT -120)=false
INFO: error: LT evaluates (-120 LT -360)=true
INFO: error: LT evaluates (-120 LT -330)=true
INFO: error: LT evaluates (-120 LT -300)=true
INFO: error: LT evaluates (-120 LT -270)=true
INFO: error: LT evaluates (-120 LT -240)=true
INFO: error: LT evaluates (-120 LT -210)=true
INFO: error: LT evaluates (-120 LT -180)=true
INFO: error: LT evaluates (-120 LT -150)=true
INFO: error: LT evaluates (-90 LT -60)=false
INFO: error: LT evaluates (-90 LT -30)=false
INFO: error: LT evaluates (-60 LT -90)=true
INFO: error: LT evaluates (-60 LT -30)=false
INFO: error: LT evaluates (-30 LT -360)=true
INFO: error: LT evaluates (-30 LT -330)=true
INFO: error: LT evaluates (-30 LT -300)=true
INFO: error: LT evaluates (-30 LT -90)=true
INFO: error: LT evaluates (-30 LT -60)=true
This appears to be a bug. Am I missing something?
steve