diff --git a/.gitignore b/.gitignore index 71912f5..47d245f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ #dotnet project files obj/ *.csproj -.vscode/ \ No newline at end of file +.vscode/ +bin/ \ No newline at end of file diff --git a/client/Test.cs b/client/Test.cs new file mode 100644 index 0000000..9053673 --- /dev/null +++ b/client/Test.cs @@ -0,0 +1,20 @@ +using iotdb_client_csharp.client.test; +using System; +namespace iotdb_client_csharp.client +{ + public class Test + { + static void Main(){ + // Unit Test + UnitTest unit_test = new UnitTest(); + unit_test.Test(); + // Session Test + SessionTest session_test = new SessionTest(); + session_test.Test(); + + Console.WriteLine("TEST PASSED"); + + } + + } +} \ No newline at end of file diff --git a/client/SessionTest.cs b/client/tests/SessionTest.cs similarity index 97% rename from client/SessionTest.cs rename to client/tests/SessionTest.cs index 8ef786d..677aa60 100644 --- a/client/SessionTest.cs +++ b/client/tests/SessionTest.cs @@ -7,7 +7,7 @@ group: root.97209_TEST_CSHARP_CLIENT_GROUP timeseries: root.97209_TEST_CSHARP_CLIENT_GROUP.TEST_CSHARP_CLIENT_DEVICE.TEST_CSHARP_CLIENT_TSX; */ -namespace iotdb_client_csharp.client +namespace iotdb_client_csharp.client.test { public class SessionTest { @@ -659,12 +659,16 @@ public void TestInsertTablet(){ // large data test value_lst = new List>(){}; timestamp_lst = new List(){}; + for (int timestamp = 4; timestamp <= fetch_size * 4; timestamp++){ timestamp_lst.Add(timestamp); value_lst.Add(new List(){"iotdb", true.ToString(), timestamp.ToString()}); } tablet = new Tablet(device_id, measurement_lst, datatype_lst, value_lst, timestamp_lst); + long start_ms= (DateTime.Now.Ticks / 10000); status = session.insert_tablet(tablet); + long end_ms = (DateTime.Now.Ticks / 10000); + Console.WriteLine(string.Format("total tablet insert time is {0}", end_ms - start_ms)); res = session.execute_query_statement("select * from root.97209_TEST_CSHARP_CLIENT_GROUP.TEST_CSHARP_CLIENT_DEVICE"); res.show_table_names(); int res_count = 0; @@ -838,6 +842,7 @@ public void TestTestInsertTablets(){ session.close(); Console.WriteLine("TestTestInsertTablets Passed!"); } + void TestLargeData(){ var session = new Session(host, port, user, passwd, fetch_size); session.open(false); @@ -858,42 +863,38 @@ void TestLargeData(){ res.next(); res_count += 1; } - + session.delete_storage_group("root.97209_TEST_CSHARP_CLIENT_GROUP"); System.Diagnostics.Debug.Assert(status == 0); System.Diagnostics.Debug.Assert(record_inserted_count == res_count); session.close(); Console.WriteLine("TestTestInsertTablet Passed!"); } - static void Main(){ - SessionTest session_test = new SessionTest(); - - session_test.TestOpen(); - session_test.TestClose(); - session_test.TestSetAndDeleteStorageGroup(); - session_test.TestCreateTimeSeries(); - session_test.TestDeleteTimeSeries(); - session_test.TestCreateMultiTimeSeries(); - session_test.TestDeleteStorageGroups(); - session_test.TestGetTimeZone(); - session_test.TestInsertStrRecord(); - session_test.TestInsertRecord(); - session_test.TestTestInsertRecord(); - session_test.TestTestInsertRecords(); - session_test.TestInsertRecordsOfOneDevice(); - session_test.TestCheckTimeSeriesExists(); - session_test.TestSetTimeZone(); - session_test.TestDeleteData(); - session_test.TestNonSql(); - session_test.TestSqlQuery(); - session_test.TestInsertRecords(); - session_test.TestInsertTablet(); - session_test.TestTestInsertTablet(); - session_test.TestInsertTablets(); - session_test.TestTestInsertTablets(); - session_test.TestLargeData(); - Console.WriteLine("TEST PASSED"); - + public void Test(){ + TestOpen(); + TestClose(); + TestSetAndDeleteStorageGroup(); + TestCreateTimeSeries(); + TestDeleteTimeSeries(); + TestCreateMultiTimeSeries(); + TestDeleteStorageGroups(); + TestGetTimeZone(); + TestInsertStrRecord(); + TestInsertRecord(); + TestTestInsertRecord(); + TestTestInsertRecords(); + TestInsertRecordsOfOneDevice(); + TestCheckTimeSeriesExists(); + TestSetTimeZone(); + TestDeleteData(); + TestNonSql(); + TestSqlQuery(); + TestInsertRecords(); + TestInsertTablet(); + TestTestInsertTablet(); + TestInsertTablets(); + TestTestInsertTablets(); + TestLargeData(); } } diff --git a/client/tests/UnitTest.cs b/client/tests/UnitTest.cs new file mode 100644 index 0000000..ffadc19 --- /dev/null +++ b/client/tests/UnitTest.cs @@ -0,0 +1,98 @@ +using System.Collections.Generic; +using iotdb_client_csharp.client.utils; +using System; + + +namespace iotdb_client_csharp.client.test +{ + public class UnitTest + { + public UnitTest(){} + public void Test(){ + TestField(); + TestRowRecord(); + } + public void TestField(){ + double double_val_set = 12.3, double_val_get; + int int_val_get; + string str_val_set = "12", str_val_get; + bool bool_val_get, bool_val_set; + float float_val_get; + Int64 long_val_get; + + + // set double + Field field = new Field(TSDataType.DOUBLE); + field.set(double_val_set); + double_val_get = (double)field.get(); + System.Diagnostics.Debug.Assert(double_val_get == double_val_set); + int_val_get = field.get_int(); + System.Diagnostics.Debug.Assert(int_val_get == Convert.ToInt32(double_val_set)); + str_val_get = field.get_str(); + System.Diagnostics.Debug.Assert(str_val_get == double_val_set.ToString()); + bool_val_get = field.get_bool(); + System.Diagnostics.Debug.Assert(bool_val_get == Convert.ToBoolean(double_val_set)); + float_val_get = field.get_float(); + System.Diagnostics.Debug.Assert(float_val_get == Convert.ToSingle(double_val_set)); + long_val_get = field.get_long(); + System.Diagnostics.Debug.Assert(long_val_get == Convert.ToInt64(double_val_set)); + + // Set Str value + field = new Field(TSDataType.TEXT); + field.set(str_val_set); + double_val_get = field.get_double(); + System.Diagnostics.Debug.Assert(double_val_get == double.Parse(str_val_set)); + int_val_get = field.get_int(); + System.Diagnostics.Debug.Assert(int_val_get == Int32.Parse(str_val_set)); + bool_val_get = field.get_bool(); + System.Diagnostics.Debug.Assert(bool_val_get); + float_val_get = field.get_float(); + System.Diagnostics.Debug.Assert(float_val_get == float.Parse(str_val_set)); + long_val_get = field.get_long(); + System.Diagnostics.Debug.Assert(long_val_get == Int64.Parse(str_val_set)); + + // set true + field = new Field(TSDataType.BOOLEAN); + bool_val_set = true; + field.set(bool_val_set); + double_val_get = field.get_double(); + System.Diagnostics.Debug.Assert(double_val_get == Convert.ToDouble(bool_val_set)); + + System.Console.WriteLine("Filed Test Passed!"); + } + public void TestRowRecord(){ + var save_datetime = DateTime.Now; + TimeSpan ts = save_datetime - DateTime.UnixEpoch; + var row_reord = new RowRecord(Convert.ToInt64(ts.TotalMilliseconds), new List{}); + + // test append + row_reord.append(new Field(TSDataType.DOUBLE, 12.3)); + row_reord.append(new Field(TSDataType.BOOLEAN, false)); + row_reord.append(new Field(TSDataType.FLOAT, 12.3)); + row_reord.append(new Field(TSDataType.INT64, 1234)); + row_reord.append(new Field(TSDataType.TEXT, "TEST")); + + // test indexing + var field_get = row_reord[0]; + System.Diagnostics.Debug.Assert(field_get.type == TSDataType.DOUBLE); + System.Diagnostics.Debug.Assert((double)field_get.val == 12.3); + + // test indexing + row_reord[0] = new Field(TSDataType.BOOLEAN, true); + field_get = row_reord[0]; + System.Diagnostics.Debug.Assert(field_get.type == TSDataType.BOOLEAN); + System.Diagnostics.Debug.Assert((bool)field_get.val == true); + + // test datetime + var datetime = row_reord.get_date_time(); + Console.WriteLine(datetime.ToString() == save_datetime.ToString()); + System.Console.WriteLine("RowRecord Test Passed!"); + + + + + } + + + } +} \ No newline at end of file diff --git a/client/utils/Field.cs b/client/utils/Field.cs index a57ad2a..5b802c9 100644 --- a/client/utils/Field.cs +++ b/client/utils/Field.cs @@ -6,35 +6,93 @@ namespace iotdb_client_csharp.client.utils public class Field { // TBD By Zengz - private object val; + public object val; public TSDataType type{get;set;} public Field(TSDataType data_type){ this.type = data_type; } + public Field(TSDataType data_type, object val){ + this.type = data_type; + this.val = val; + } public void set(T value){ val = value; } public double get_double(){ - return type==TSDataType.TEXT?double.Parse((string)val):(double)val; + switch(type){ + case TSDataType.TEXT: + return double.Parse((string)val); + case TSDataType.BOOLEAN: + return (bool)val?1.0:0; + case TSDataType.NONE: + return 0.0; + default: + return Convert.ToDouble(val); + + } } public Int32 get_int(){ - return type==TSDataType.TEXT?Int32.Parse((string)val):(Int32)val; + switch(type){ + case TSDataType.TEXT: + return Int32.Parse((string)val); + case TSDataType.BOOLEAN: + return (bool)val?1:0; + case TSDataType.NONE: + return 0; + default: + return Convert.ToInt32(val); + } } public Int64 get_long(){ - return type==TSDataType.TEXT?Int64.Parse((string)val):(Int64)val; + switch(type){ + case TSDataType.TEXT: + return Int64.Parse((string)val); + case TSDataType.BOOLEAN: + return (bool)val?1:0; + case TSDataType.NONE: + return 0; + default: + return Convert.ToInt64(val); + } } + public float get_float(){ - return type==TSDataType.TEXT?float.Parse((string)val):(float)val; + switch(type){ + case TSDataType.TEXT: + return float.Parse((string)val); + case TSDataType.BOOLEAN: + return (bool)val?1:0; + case TSDataType.NONE: + return 0; + default: + return Convert.ToSingle(val); + } + } + public bool get_bool(){ + switch(type){ + case TSDataType.TEXT: + try{ + return Convert.ToBoolean((string)val); + } + catch(System.FormatException){ + return ((string)val).Length > 0; + } + case TSDataType.NONE: + return false; + default: + return Convert.ToBoolean(val); + } + } public string get_str(){ return val.ToString(); } - public T get(){ + public object get(){ switch(type){ case TSDataType.NONE : - return (T)(object)null; + return null; default: - return (T)val; + return val; } } diff --git a/client/utils/RowRecord.cs b/client/utils/RowRecord.cs index fa03ce1..13c4e4a 100644 --- a/client/utils/RowRecord.cs +++ b/client/utils/RowRecord.cs @@ -25,7 +25,7 @@ public Field this[int index]{ get => field_lst[index]; set => field_lst[index] = value; } - public DateTime TimeStampAsDateTime(){ + public DateTime get_date_time(){ return DateTime.UnixEpoch.AddMilliseconds(timestamp); } public override string ToString()