You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2015/07/11 14:52:44 UTC
[10/12] lucy-clownfish git commit: Make Float and Integer immutable
Make Float and Integer immutable
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/196237b7
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/196237b7
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/196237b7
Branch: refs/heads/master
Commit: 196237b7957bfc90bb395c9a54eb0ee673b24acb
Parents: f626543
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu Jul 9 17:40:39 2015 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu Jul 9 17:40:39 2015 +0200
----------------------------------------------------------------------
runtime/core/Clownfish/Num.c | 26 +-----
runtime/core/Clownfish/Num.cfh | 16 +---
runtime/core/Clownfish/Test/TestNum.c | 141 +++++++++++++++--------------
3 files changed, 77 insertions(+), 106 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/196237b7/runtime/core/Clownfish/Num.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Num.c b/runtime/core/Clownfish/Num.c
index 157880d..991883f 100644
--- a/runtime/core/Clownfish/Num.c
+++ b/runtime/core/Clownfish/Num.c
@@ -103,11 +103,6 @@ Float_Get_Value_IMP(Float *self) {
return self->value;
}
-void
-Float_Set_Value_IMP(Float *self, double value) {
- self->value = value;
-}
-
int64_t
Float_To_I64_IMP(Float *self) {
if (self->value < -POW_2_63 || self->value >= POW_2_63) {
@@ -128,13 +123,7 @@ Float_To_String_IMP(Float *self) {
Float*
Float_Clone_IMP(Float *self) {
- return Float_new(self->value);
-}
-
-void
-Float_Mimic_IMP(Float *self, Obj *other) {
- Float *twin = (Float*)CERTIFY(other, FLOAT);
- self->value = twin->value;
+ return (Float*)INCREF(self);
}
/***************************************************************************/
@@ -187,11 +176,6 @@ Int_Get_Value_IMP(Integer *self) {
return self->value;
}
-void
-Int_Set_Value_IMP(Integer *self, int64_t value) {
- self->value = value;
-}
-
double
Int_To_F64_IMP(Integer *self) {
return (double)self->value;
@@ -209,13 +193,7 @@ Int_To_String_IMP(Integer *self) {
Integer*
Int_Clone_IMP(Integer *self) {
- return Int_new(self->value);
-}
-
-void
-Int_Mimic_IMP(Integer *self, Obj *other) {
- Integer *twin = (Integer*)CERTIFY(other, INTEGER);
- self->value = twin->value;
+ return (Integer*)INCREF(self);
}
static int32_t
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/196237b7/runtime/core/Clownfish/Num.cfh
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Num.cfh b/runtime/core/Clownfish/Num.cfh
index 1874963..d4854f2 100644
--- a/runtime/core/Clownfish/Num.cfh
+++ b/runtime/core/Clownfish/Num.cfh
@@ -16,7 +16,7 @@
parcel Clownfish;
-/** Double precision floating point number.
+/** Immutable double precision floating point number.
*/
final class Clownfish::Float {
@@ -34,9 +34,6 @@ final class Clownfish::Float {
void*
To_Host(Float *self);
- void
- Set_Value(Float *self, double value);
-
double
Get_Value(Float *self);
@@ -60,13 +57,10 @@ final class Clownfish::Float {
public incremented Float*
Clone(Float *self);
-
- public void
- Mimic(Float *self, Obj *other);
}
/**
- * 64-bit signed integer.
+ * Immutable 64-bit signed integer.
*/
final class Clownfish::Integer nickname Int {
@@ -84,9 +78,6 @@ final class Clownfish::Integer nickname Int {
void*
To_Host(Integer *self);
- void
- Set_Value(Integer *self, int64_t value);
-
int64_t
Get_Value(Integer *self);
@@ -110,9 +101,6 @@ final class Clownfish::Integer nickname Int {
public incremented Integer*
Clone(Integer *self);
-
- public void
- Mimic(Integer *self, Obj *other);
}
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/196237b7/runtime/core/Clownfish/Test/TestNum.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Test/TestNum.c b/runtime/core/Clownfish/Test/TestNum.c
index 3dcd276..0e88455 100644
--- a/runtime/core/Clownfish/Test/TestNum.c
+++ b/runtime/core/Clownfish/Test/TestNum.c
@@ -55,24 +55,18 @@ test_To_String(TestBatchRunner *runner) {
static void
test_accessors(TestBatchRunner *runner) {
- Float *f64 = Float_new(1.0);
- Integer *i64 = Int_new(1);
+ Float *f64 = Float_new(1.33);
+ Integer *i64 = Int_new(INT64_MIN);
double wanted64 = 1.33;
double got64;
- Float_Set_Value(f64, 1.33);
got64 = Float_Get_Value(f64);
TEST_TRUE(runner, *(int64_t*)&got64 == *(int64_t*)&wanted64,
- "F64 Set_Value Get_Value");
-
- TEST_TRUE(runner, Float_To_I64(f64) == 1, "Float_To_Int");
-
- Int_Set_Value(i64, INT64_MIN);
- TEST_TRUE(runner, Int_Get_Value(i64) == INT64_MIN,
- "I64 Set_Value Get_Value");
+ "F64 Get_Value");
+ TEST_TRUE(runner, Float_To_I64(f64) == 1, "Float_To_I64");
- Int_Set_Value(i64, -1);
- TEST_TRUE(runner, Int_To_F64(i64) == -1, "Int_To_Float");
+ TEST_TRUE(runner, Int_Get_Value(i64) == INT64_MIN, "I64 Get_Value");
+ TEST_TRUE(runner, Int_To_F64(i64) == -9223372036854775808.0, "Int_To_F64");
DECREF(i64);
DECREF(f64);
@@ -115,46 +109,76 @@ S_test_compare_float_int(TestBatchRunner *runner, double f64_val,
static void
test_Equals_and_Compare_To(TestBatchRunner *runner) {
- Float *f1 = Float_new(1.0);
- Float *f2 = Float_new(1.0);
- Integer *i64 = Int_new(INT64_MAX);
-
- TEST_TRUE(runner, Float_Compare_To(f1, (Obj*)f2) == 0,
- "F64_Compare_To equal");
- TEST_TRUE(runner, Float_Equals(f1, (Obj*)f2),
- "F64_Equals equal");
-
- Float_Set_Value(f2, 2.0);
- TEST_TRUE(runner, Float_Compare_To(f1, (Obj*)f2) < 0,
- "F64_Compare_To less than");
- TEST_FALSE(runner, Float_Equals(f1, (Obj*)f2),
- "F64_Equals less than");
-
- Float_Set_Value(f2, 0.0);
- TEST_TRUE(runner, Float_Compare_To(f1, (Obj*)f2) > 0,
- "F64_Compare_To greater than");
- TEST_FALSE(runner, Float_Equals(f1, (Obj*)f2),
- "F64_Equals greater than");
-
- Float_Set_Value(f1, INT64_MAX * 2.0);
- TEST_TRUE(runner, Float_Compare_To(f1, (Obj*)i64) > 0,
- "Float comparison to Integer");
- TEST_TRUE(runner, Int_Compare_To(i64, (Obj*)f1) < 0,
- "Integer comparison to Float");
-
- Int_Set_Value(i64, INT64_C(0x6666666666666666));
- Integer *i64_copy = Int_new(INT64_C(0x6666666666666666));
- TEST_TRUE(runner, Int_Compare_To(i64, (Obj*)i64_copy) == 0,
- "Integer comparison to same number");
-
- DECREF(i64_copy);
- DECREF(i64);
- DECREF(f1);
- DECREF(f2);
+ {
+ Float *f1 = Float_new(1.0);
+ Float *f2 = Float_new(1.0);
+ TEST_TRUE(runner, Float_Compare_To(f1, (Obj*)f2) == 0,
+ "Float_Compare_To equal");
+ TEST_TRUE(runner, Float_Equals(f1, (Obj*)f2),
+ "Float_Equals equal");
+ DECREF(f1);
+ DECREF(f2);
+ }
+
+ {
+ Float *f1 = Float_new(1.0);
+ Float *f2 = Float_new(2.0);
+ TEST_TRUE(runner, Float_Compare_To(f1, (Obj*)f2) < 0,
+ "Float_Compare_To less than");
+ TEST_FALSE(runner, Float_Equals(f1, (Obj*)f2),
+ "Float_Equals less than");
+ DECREF(f1);
+ DECREF(f2);
+ }
+
+ {
+ Float *f1 = Float_new(1.0);
+ Float *f2 = Float_new(0.0);
+ TEST_TRUE(runner, Float_Compare_To(f1, (Obj*)f2) > 0,
+ "Float_Compare_To greater than");
+ TEST_FALSE(runner, Float_Equals(f1, (Obj*)f2),
+ "Float_Equals greater than");
+ DECREF(f1);
+ DECREF(f2);
+ }
+
+ {
+ Integer *i1 = Int_new(INT64_C(0x6666666666666666));
+ Integer *i2 = Int_new(INT64_C(0x6666666666666666));
+ TEST_TRUE(runner, Int_Compare_To(i1, (Obj*)i2) == 0,
+ "Int_Compare_To equal");
+ TEST_TRUE(runner, Int_Equals(i1, (Obj*)i2),
+ "Int_Equals equal");
+ DECREF(i1);
+ DECREF(i2);
+ }
+
+ {
+ Integer *i1 = Int_new(INT64_C(0x6666666666666666));
+ Integer *i2 = Int_new(INT64_C(0x6666666666666667));
+ TEST_TRUE(runner, Int_Compare_To(i1, (Obj*)i2) < 0,
+ "Int_Compare_To less than");
+ TEST_FALSE(runner, Int_Equals(i1, (Obj*)i2),
+ "Int_Equals less than");
+ DECREF(i1);
+ DECREF(i2);
+ }
+
+ {
+ Integer *i1 = Int_new(INT64_C(0x6666666666666666));
+ Integer *i2 = Int_new(INT64_C(0x6666666666666665));
+ TEST_TRUE(runner, Int_Compare_To(i1, (Obj*)i2) > 0,
+ "Int_Compare_To greater than");
+ TEST_FALSE(runner, Int_Equals(i1, (Obj*)i2),
+ "Int_Equals greater than");
+ DECREF(i1);
+ DECREF(i2);
+ }
// NOTICE: When running these tests on x86/x64, it's best to compile
// with -ffloat-store to avoid excess FPU precision which can hide
// implementation bugs.
+ S_test_compare_float_int(runner, INT64_MAX * 2.0, INT64_MAX, 1);
S_test_compare_float_int(runner, pow(2.0, 60.0), INT64_C(1) << 60, 0);
S_test_compare_float_int(runner, pow(2.0, 60.0), (INT64_C(1) << 60) - 1,
1);
@@ -182,32 +206,13 @@ test_Clone(TestBatchRunner *runner) {
DECREF(f64);
}
-static void
-test_Mimic(TestBatchRunner *runner) {
- Float *f64 = Float_new(1.33);
- Integer *i64 = Int_new(INT64_MAX);
- Float *f64_dupe = Float_new(0.0);
- Integer *i64_dupe = Int_new(0);
- Float_Mimic(f64_dupe, (Obj*)f64);
- Int_Mimic(i64_dupe, (Obj*)i64);
- TEST_TRUE(runner, Float_Equals(f64, (Obj*)f64_dupe),
- "Float Mimic");
- TEST_TRUE(runner, Int_Equals(i64, (Obj*)i64_dupe),
- "Integer Mimic");
- DECREF(i64_dupe);
- DECREF(f64_dupe);
- DECREF(i64);
- DECREF(f64);
-}
-
void
TestNum_Run_IMP(TestNum *self, TestBatchRunner *runner) {
- TestBatchRunner_Plan(runner, (TestBatch*)self, 59);
+ TestBatchRunner_Plan(runner, (TestBatch*)self, 68);
test_To_String(runner);
test_accessors(runner);
test_Equals_and_Compare_To(runner);
test_Clone(runner);
- test_Mimic(runner);
}