Output is all 0 in howto_square_ff::general_work()

Hi,
I am studying how to write a signal processing block , since I
find it’s a good way to understand the gnuradio’s numerous code and I
wok well too .
when I add printf information as followed:

int howto_suquare_ff :: general_work ( int noutput_items,
                                                        gr_vector_int 

&ninput_items,
gr_vector_const_void_star
&input_items,
gr_vector_void_star
&output_items)
{
const float *in = (const float *) input_items[0];
float *out = (float *) output_items[0];

printf ("noutput_items = %d\n", noutput_items);

for (int i = 0; i < noutput_items; i++)
{
    printf ("input_items[%d] = %d\n", i, in[i]);
    out[i] = in[i] * in[i];
    printf ("output_items[%d] = %d\n", i, out[i]);
}

}
In the file of qa_howto.py:
def test_001_square_ff (self):
src_data = (-3, 4, -5.5, 2, 3)
expected_result = (9, 16, 30.25, 4, 9)
src = gr.vector_source_f (src_data)
sqr = howto.square_ff ()
dst = gr.vector_sink_f ()
self.tb.connect (src, sqr)
self.tb.connect (sqr, dst)
self.tb.run ()
#test
print “============”
print dst.data()

result :noutput_items = 4
input_items[0] = 0
output_items[0] = 0
input_items[1] = 0
output_items[1] = 0
input_items[2] = 0
output_items[2] = 0
input_items[3] = 0
output_items[3] = 0

(9.0, 16.0, 30.25, 4.0, 9.0)
Question:
Why the result of input_items[0] is 0 instead of -3 ?
Why the result of output_items[0] is 0 instead of 9.0,while the result
is right in qa_howto.py?
There are 5 output: 9.0, 16.0, 30.25, 4.0, 9.0. But, why noutput_items =
4 ?
thanks
best wishes!