From ef312564ca84a2b49fc291434d8fb2f8501bb618 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Tue, 15 Nov 2016 13:00:01 +0100 Subject: Initial commit --- tests/sheet_test.ml | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100755 tests/sheet_test.ml (limited to 'tests/sheet_test.ml') diff --git a/tests/sheet_test.ml b/tests/sheet_test.ml new file mode 100755 index 0000000..f63d76f --- /dev/null +++ b/tests/sheet_test.ml @@ -0,0 +1,136 @@ +open OUnit2 + +let u = UTF8.from_utf8string + +let _msg ~expected ~result = + Printf.sprintf "Expected %s but got %s" + (UTF8.encode @@ ScTypes.Result.show expected) + (UTF8.encode @@ ScTypes.Result.show result) + +(** Test a simple references between two cells *) +let test_create_ref_1 ctx = begin + + let s = Sheet.Raw.create + |> Sheet.Raw.add (3,3) @@ Expression.load @@ u"=-1" + |> snd |> Sheet.Raw.add (0,0) @@ Expression.load @@ u"=C3" + |> snd in + let result = (Sheet.Raw.get_value (0, 0) s) in + let expected = (ScTypes.Result (ScTypes.Num (Num.num_of_int (-1), Some (u"-1")))) in + + assert_equal + ~msg:(_msg ~expected ~result) + expected + result +end + +let test_create_ref_2 ctx = begin + + let s = Sheet.Raw.create + |> Sheet.Raw.add (2,2) @@ Expression.load @@ u"=C3" + |> snd |> Sheet.Raw.add (3,3) @@ Expression.load @@ u"=A1" + |> snd |> Sheet.Raw.add (1,1) @@ Expression.load @@ u"123" + |> snd in + + + let result = (Sheet.Raw.get_value (2, 2) s) in + let expected = ScTypes.Result (ScTypes.Num (Num.num_of_int 123, Some (u"123"))) in + + assert_equal + ~msg:(_msg ~expected ~result) + expected + result +end + +let test_create_direct_cycle ctx = begin + + let s = Sheet.Raw.create + |> Sheet.Raw.add (2,2) @@ Expression.load @@ u"=B2" + |> snd in + let result = (Sheet.Raw.get_value (2, 2) s) in + let expected = ScTypes.Error Sheet.Raw.Cycle in + + assert_equal + ~msg:(_msg ~expected ~result) + expected + result +end + +let test_create_indirect_cycle ctx = begin + + let s = Sheet.Raw.create + |> Sheet.Raw.add (2,2) @@ Expression.load @@ u"=A1" + |> snd |> Sheet.Raw.add (1,1) @@ Expression.load @@ u"=B2" + |> snd |> Sheet.Raw.add (0,0) @@ Expression.load @@ u"=A1" + |> snd in + let result = (Sheet.Raw.get_value (0, 0) s) in + let expected = ScTypes.Result ScTypes.Undefined in + + assert_equal + ~msg:(_msg ~expected ~result) + expected + result +end + +let test_delete ctx = begin + + let s = Sheet.Raw.create + |> Sheet.Raw.add (2,2) @@ Expression.load @@ u"=C3" + |> snd |> Sheet.Raw.add (3,3) @@ Expression.load @@ u"=A1" + |> snd |> Sheet.Raw.remove (2,2) + |> snd |> Sheet.Raw.remove (3,3) + |> snd in + let result = (Sheet.Raw.get_value (3, 3) s) in + let expected = ScTypes.Result ScTypes.Undefined in + + assert_equal + ~msg:(_msg ~expected ~result) + expected + result +end + +let test_update_succs1 ctx = begin + + let result = Sheet.Raw.create + |> Sheet.Raw.add (1,1) @@ Expression.load @@ u" =1" + |> snd |> Sheet.Raw.add (2,2) @@ Expression.load @@ u"=A2" + |> snd |> Sheet.Raw.add (1,2) @@ Expression.load @@ u"=A1/1" + |> snd |> Sheet.Raw.add (1,1) @@ Expression.load @@ u"=2" + |> fst in + + (* All the cells are updated by the change *) + let expected = Cell.Set.of_list [(1,1); (1, 2); (2,2)] in + + let msg = Printf.sprintf "Expected %s but got %s" + (UTF8.encode @@ Tools.String.print_buffer Cell.Set.printb expected) + (UTF8.encode @@ Tools.String.print_buffer Cell.Set.printb result) in + + assert_equal ~msg + expected + result +end + +let test_update_succs2 ctx = begin + + let result = Sheet.Raw.create + |> Sheet.Raw.add (1,1) @@ Expression.load @@ u"=1" + |> snd |> Sheet.Raw.add (2,2) @@ Expression.load @@ u"=A2" + |> snd |> Sheet.Raw.add (1,2) @@ Expression.load @@ u"=A1/0" + |> snd |> Sheet.Raw.add (1,1) @@ Expression.load @@ u"=2" + |> fst in + (* Only (1, 1) is updated ; (1, 2) does not change, neither (2, 2) *) + let expected = Cell.Set.of_list [(1,1)] in + + assert_equal + expected + result +end + +let tests = "sheet_test">::: [ + "test_ref2" >:: test_create_ref_2; + "test_ref1" >:: test_create_ref_1; + "test_cycle1" >:: test_create_direct_cycle; + "test_cycle2" >:: test_create_indirect_cycle; + "test_delete" >:: test_delete; + "test_update_succs1" >:: test_update_succs1; + "test_update_succs2" >:: test_update_succs2; + ] -- cgit v1.2.3