Obj* F64SortCache_value(Float64SortCache *self, int32_t ord, Obj *blank) { if (ord == self->null_ord) { return NULL; } else if (ord < 0) { THROW(ERR, "Ordinal less than 0 for %o: %i32", self->field, ord); } else { Float64 *num_blank = (Float64*)CERTIFY(blank, FLOAT64); InStream_Seek(self->dat_in, ord * sizeof(double)); Float64_Set_Value(num_blank, InStream_Read_F64(self->dat_in)); } return blank; }
static void test_accessors(TestBatch *batch) { Float32 *f32 = Float32_new(1.0); Float64 *f64 = Float64_new(1.0); Integer32 *i32 = Int32_new(1); Integer64 *i64 = Int64_new(1); float wanted32 = 1.33f; double wanted64 = 1.33; float got32; double got64; Float32_Set_Value(f32, 1.33f); TEST_FLOAT_EQ(batch, Float32_Get_Value(f32), 1.33f, "F32 Set_Value Get_Value"); Float64_Set_Value(f64, 1.33); got64 = Float64_Get_Value(f64); TEST_TRUE(batch, *(int64_t*)&got64 == *(int64_t*)&wanted64, "F64 Set_Value Get_Value"); TEST_TRUE(batch, Float32_To_I64(f32) == 1, "Float32_To_I64"); TEST_TRUE(batch, Float64_To_I64(f64) == 1, "Float64_To_I64"); got32 = (float)Float32_To_F64(f32); TEST_TRUE(batch, *(int32_t*)&got32 == *(int32_t*)&wanted32, "Float32_To_F64"); got64 = Float64_To_F64(f64); TEST_TRUE(batch, *(int64_t*)&got64 == *(int64_t*)&wanted64, "Float64_To_F64"); Int32_Set_Value(i32, I32_MIN); TEST_INT_EQ(batch, Int32_Get_Value(i32), I32_MIN, "I32 Set_Value Get_Value"); Int64_Set_Value(i64, I64_MIN); TEST_TRUE(batch, Int64_Get_Value(i64) == I64_MIN, "I64 Set_Value Get_Value"); Int32_Set_Value(i32, -1); Int64_Set_Value(i64, -1); TEST_TRUE(batch, Int32_To_F64(i32) == -1, "Int32_To_F64"); TEST_TRUE(batch, Int64_To_F64(i64) == -1, "Int64_To_F64"); TEST_INT_EQ(batch, Bool_Get_Value(CFISH_TRUE), true, "Bool_Get_Value [true]"); TEST_INT_EQ(batch, Bool_Get_Value(CFISH_FALSE), false, "Bool_Get_Value [false]"); TEST_TRUE(batch, Bool_To_I64(CFISH_TRUE) == true, "Bool_To_I64 [true]"); TEST_TRUE(batch, Bool_To_I64(CFISH_FALSE) == false, "Bool_To_I64 [false]"); TEST_TRUE(batch, Bool_To_F64(CFISH_TRUE) == 1.0, "Bool_To_F64 [true]"); TEST_TRUE(batch, Bool_To_F64(CFISH_FALSE) == 0.0, "Bool_To_F64 [false]"); DECREF(i64); DECREF(i32); DECREF(f64); DECREF(f32); }
void Inverter_invert_doc(Inverter *self, Doc *doc) { InverterIVARS *const ivars = Inverter_IVARS(self); Hash *const fields = (Hash*)Doc_Get_Fields(doc); uint32_t num_keys = Hash_Iterate(fields); // Prepare for the new doc. Inverter_Set_Doc(self, doc); // Extract and invert the doc's fields. while (num_keys--) { Obj *key, *obj; Hash_Next(fields, &key, &obj); CharBuf *field = (CharBuf*)CERTIFY(key, CHARBUF); InverterEntry *inventry = S_fetch_entry(ivars, field); InverterEntryIVARS *inventry_ivars = InvEntry_IVARS(inventry); FieldType *type = inventry_ivars->type; // Get the field value. switch (FType_Primitive_ID(type) & FType_PRIMITIVE_ID_MASK) { case FType_TEXT: { CharBuf *char_buf = (CharBuf*)CERTIFY(obj, CHARBUF); ViewCharBuf *value = (ViewCharBuf*)inventry_ivars->value; ViewCB_Assign(value, char_buf); break; } case FType_BLOB: { ByteBuf *byte_buf = (ByteBuf*)CERTIFY(obj, BYTEBUF); ViewByteBuf *value = (ViewByteBuf*)inventry_ivars->value; ViewBB_Assign(value, byte_buf); break; } case FType_INT32: { int32_t int_val = (int32_t)Obj_To_I64(obj); Integer32* value = (Integer32*)inventry_ivars->value; Int32_Set_Value(value, int_val); break; } case FType_INT64: { int64_t int_val = Obj_To_I64(obj); Integer64* value = (Integer64*)inventry_ivars->value; Int64_Set_Value(value, int_val); break; } case FType_FLOAT32: { float float_val = (float)Obj_To_F64(obj); Float32* value = (Float32*)inventry_ivars->value; Float32_Set_Value(value, float_val); break; } case FType_FLOAT64: { double float_val = Obj_To_F64(obj); Float64* value = (Float64*)inventry_ivars->value; Float64_Set_Value(value, float_val); break; } default: THROW(ERR, "Unrecognized type: %o", type); } Inverter_Add_Field(self, inventry); } }
static void test_Equals_and_Compare_To(TestBatch *batch) { Float32 *f32 = Float32_new(1.0); Float64 *f64 = Float64_new(1.0); Integer32 *i32 = Int32_new(I32_MAX); Integer64 *i64 = Int64_new(I64_MAX); TEST_TRUE(batch, Float32_Compare_To(f32, (Obj*)f64) == 0, "F32_Compare_To equal"); TEST_TRUE(batch, Float32_Equals(f32, (Obj*)f64), "F32_Equals equal"); Float64_Set_Value(f64, 2.0); TEST_TRUE(batch, Float32_Compare_To(f32, (Obj*)f64) < 0, "F32_Compare_To less than"); TEST_FALSE(batch, Float32_Equals(f32, (Obj*)f64), "F32_Equals less than"); Float64_Set_Value(f64, 0.0); TEST_TRUE(batch, Float32_Compare_To(f32, (Obj*)f64) > 0, "F32_Compare_To greater than"); TEST_FALSE(batch, Float32_Equals(f32, (Obj*)f64), "F32_Equals greater than"); Float64_Set_Value(f64, 1.0); Float32_Set_Value(f32, 1.0); TEST_TRUE(batch, Float64_Compare_To(f64, (Obj*)f32) == 0, "F64_Compare_To equal"); TEST_TRUE(batch, Float64_Equals(f64, (Obj*)f32), "F64_Equals equal"); Float32_Set_Value(f32, 2.0); TEST_TRUE(batch, Float64_Compare_To(f64, (Obj*)f32) < 0, "F64_Compare_To less than"); TEST_FALSE(batch, Float64_Equals(f64, (Obj*)f32), "F64_Equals less than"); Float32_Set_Value(f32, 0.0); TEST_TRUE(batch, Float64_Compare_To(f64, (Obj*)f32) > 0, "F64_Compare_To greater than"); TEST_FALSE(batch, Float64_Equals(f64, (Obj*)f32), "F64_Equals greater than"); Float64_Set_Value(f64, I64_MAX * 2.0); TEST_TRUE(batch, Float64_Compare_To(f64, (Obj*)i64) > 0, "Float64 comparison to Integer64"); TEST_TRUE(batch, Int64_Compare_To(i64, (Obj*)f64) < 0, "Integer64 comparison to Float64"); Float32_Set_Value(f32, I32_MAX * 2.0f); TEST_TRUE(batch, Float32_Compare_To(f32, (Obj*)i32) > 0, "Float32 comparison to Integer32"); TEST_TRUE(batch, Int32_Compare_To(i32, (Obj*)f32) < 0, "Integer32 comparison to Float32"); Int64_Set_Value(i64, 0x6666666666666666LL); Integer64 *i64_copy = Int64_new(0x6666666666666666LL); TEST_TRUE(batch, Int64_Compare_To(i64, (Obj*)i64_copy) == 0, "Integer64 comparison to same number"); TEST_TRUE(batch, Bool_Equals(CFISH_TRUE, (Obj*)CFISH_TRUE), "CFISH_TRUE Equals itself"); TEST_TRUE(batch, Bool_Equals(CFISH_FALSE, (Obj*)CFISH_FALSE), "CFISH_FALSE Equals itself"); TEST_FALSE(batch, Bool_Equals(CFISH_FALSE, (Obj*)CFISH_TRUE), "CFISH_FALSE not Equals CFISH_TRUE "); TEST_FALSE(batch, Bool_Equals(CFISH_TRUE, (Obj*)CFISH_FALSE), "CFISH_TRUE not Equals CFISH_FALSE "); TEST_FALSE(batch, Bool_Equals(CFISH_TRUE, (Obj*)CHARBUF), "CFISH_TRUE not Equals random other object "); DECREF(i64_copy); DECREF(i64); DECREF(i32); DECREF(f64); DECREF(f32); }