In reply to ariy:
You are making assignment to result with a non-blocking assignment(NBA). An immediate assertion executes like any other procedural statement—there is no sampling. You will get the old value of result. But thealways @(result) gets triggered after the NBA in the same time slot, so it has the updated value.
Also, your initial block has races because you are changing resetb and selector without using NBAs and making the changes coincident with the posedge clk. You need to use NBAs in your stimulus or make the changes away form the posedge clk.