void test_freqfilepos(TestBatch *batch) { TermInfo* tinfo = TInfo_new(10); TInfo_Set_Post_FilePos(tinfo, 20); TInfo_Set_Skip_FilePos(tinfo, 40); TInfo_Set_Lex_FilePos(tinfo, 50); TermInfo* cloned_tinfo = TInfo_Clone(tinfo); TEST_FALSE(batch, Lucy_TInfo_Equals(tinfo, (lucy_Obj*)cloned_tinfo),"the clone should be a separate C struct"); TEST_INT_EQ(batch, TInfo_Get_Doc_Freq(tinfo), 10, "new sets doc_freq correctly" ); TEST_INT_EQ(batch, TInfo_Get_Doc_Freq(tinfo), 10, "... doc_freq cloned" ); TEST_INT_EQ(batch, TInfo_Get_Post_FilePos(tinfo), 20, "... post_filepos cloned" ); TEST_INT_EQ(batch, TInfo_Get_Skip_FilePos(tinfo), 40, "... skip_filepos cloned" ); TEST_INT_EQ(batch, TInfo_Get_Lex_FilePos(tinfo), 50, "... lex_filepos cloned" ); TInfo_Set_Doc_Freq(tinfo, 5); TEST_INT_EQ(batch, TInfo_Get_Doc_Freq(tinfo), 5, "set/get doc_freq" ); TEST_INT_EQ(batch, TInfo_Get_Doc_Freq(cloned_tinfo), 10, "setting orig doesn't affect clone" ); TInfo_Set_Post_FilePos(tinfo, 15); TEST_INT_EQ(batch, TInfo_Get_Post_FilePos(tinfo), 15, "set/get post_filepos" ); TInfo_Set_Skip_FilePos(tinfo, 35); TEST_INT_EQ(batch, TInfo_Get_Skip_FilePos(tinfo), 35, "set/get skip_filepos" ); TInfo_Set_Lex_FilePos(tinfo, 45); TEST_INT_EQ(batch, TInfo_Get_Lex_FilePos(tinfo), 45, "set/get lex_filepos" ); DECREF(tinfo); DECREF(cloned_tinfo); }
static void S_read_entry(LexIndex *self) { LexIndexIVARS *const ivars = LexIndex_IVARS(self); InStream *ix_in = ivars->ix_in; TermInfo *const tinfo = ivars->tinfo; int64_t offset = (int64_t)NumUtil_decode_bigend_u64(ivars->offsets + ivars->tick); InStream_Seek(ix_in, offset); TermStepper_Read_Key_Frame(ivars->term_stepper, ix_in); int32_t doc_freq = InStream_Read_C32(ix_in); TInfo_Set_Doc_Freq(tinfo, doc_freq); TInfo_Set_Post_FilePos(tinfo, InStream_Read_C64(ix_in)); int64_t skip_filepos = doc_freq >= ivars->skip_interval ? InStream_Read_C64(ix_in) : 0; TInfo_Set_Skip_FilePos(tinfo, skip_filepos); TInfo_Set_Lex_FilePos(tinfo, InStream_Read_C64(ix_in)); }