@@ -1055,6 +1055,178 @@ func TestMatchkeys(t *testing.T) {
10551055 }
10561056}
10571057
1058+ func TestSum (t * testing.T ) {
1059+ tests := []struct {
1060+ List cty.Value
1061+ Want cty.Value
1062+ Err bool
1063+ }{
1064+ {
1065+ cty .ListVal ([]cty.Value {
1066+ cty .NumberIntVal (1 ),
1067+ cty .NumberIntVal (2 ),
1068+ cty .NumberIntVal (3 ),
1069+ }),
1070+ cty .NumberIntVal (6 ),
1071+ false ,
1072+ },
1073+ {
1074+ cty .ListVal ([]cty.Value {
1075+ cty .NumberIntVal (1476 ),
1076+ cty .NumberIntVal (2093 ),
1077+ cty .NumberIntVal (2092495 ),
1078+ cty .NumberIntVal (64589234 ),
1079+ cty .NumberIntVal (234 ),
1080+ }),
1081+ cty .NumberIntVal (66685532 ),
1082+ false ,
1083+ },
1084+ {
1085+ cty .ListVal ([]cty.Value {
1086+ cty .StringVal ("a" ),
1087+ cty .StringVal ("b" ),
1088+ cty .StringVal ("c" ),
1089+ }),
1090+ cty .UnknownVal (cty .String ),
1091+ true ,
1092+ },
1093+ {
1094+ cty .ListVal ([]cty.Value {
1095+ cty .NumberIntVal (10 ),
1096+ cty .NumberIntVal (- 19 ),
1097+ cty .NumberIntVal (5 ),
1098+ }),
1099+ cty .NumberIntVal (- 4 ),
1100+ false ,
1101+ },
1102+ {
1103+ cty .ListVal ([]cty.Value {
1104+ cty .NumberFloatVal (10.2 ),
1105+ cty .NumberFloatVal (19.4 ),
1106+ cty .NumberFloatVal (5.7 ),
1107+ }),
1108+ cty .NumberFloatVal (35.3 ),
1109+ false ,
1110+ },
1111+ {
1112+ cty .ListVal ([]cty.Value {
1113+ cty .NumberFloatVal (- 10.2 ),
1114+ cty .NumberFloatVal (- 19.4 ),
1115+ cty .NumberFloatVal (- 5.7 ),
1116+ }),
1117+ cty .NumberFloatVal (- 35.3 ),
1118+ false ,
1119+ },
1120+ {
1121+ cty .ListVal ([]cty.Value {cty .NullVal (cty .Number )}),
1122+ cty .NilVal ,
1123+ true ,
1124+ },
1125+ {
1126+ cty .SetVal ([]cty.Value {
1127+ cty .StringVal ("a" ),
1128+ cty .StringVal ("b" ),
1129+ cty .StringVal ("c" ),
1130+ }),
1131+ cty .UnknownVal (cty .String ),
1132+ true ,
1133+ },
1134+ {
1135+ cty .SetVal ([]cty.Value {
1136+ cty .NumberIntVal (10 ),
1137+ cty .NumberIntVal (- 19 ),
1138+ cty .NumberIntVal (5 ),
1139+ }),
1140+ cty .NumberIntVal (- 4 ),
1141+ false ,
1142+ },
1143+ {
1144+ cty .SetVal ([]cty.Value {
1145+ cty .NumberIntVal (10 ),
1146+ cty .NumberIntVal (25 ),
1147+ cty .NumberIntVal (30 ),
1148+ }),
1149+ cty .NumberIntVal (65 ),
1150+ false ,
1151+ },
1152+ {
1153+ cty .SetVal ([]cty.Value {
1154+ cty .NumberFloatVal (2340.8 ),
1155+ cty .NumberFloatVal (10.2 ),
1156+ cty .NumberFloatVal (3 ),
1157+ }),
1158+ cty .NumberFloatVal (2354 ),
1159+ false ,
1160+ },
1161+ {
1162+ cty .SetVal ([]cty.Value {
1163+ cty .NumberFloatVal (2 ),
1164+ }),
1165+ cty .NumberFloatVal (2 ),
1166+ false ,
1167+ },
1168+ {
1169+ cty .SetVal ([]cty.Value {
1170+ cty .NumberFloatVal (- 2 ),
1171+ cty .NumberFloatVal (- 50 ),
1172+ cty .NumberFloatVal (- 20 ),
1173+ cty .NumberFloatVal (- 123 ),
1174+ cty .NumberFloatVal (- 4 ),
1175+ }),
1176+ cty .NumberFloatVal (- 199 ),
1177+ false ,
1178+ },
1179+ {
1180+ cty .TupleVal ([]cty.Value {
1181+ cty .NumberIntVal (12 ),
1182+ cty .StringVal ("a" ),
1183+ cty .NumberIntVal (38 ),
1184+ }),
1185+ cty .UnknownVal (cty .String ),
1186+ true ,
1187+ },
1188+ {
1189+ cty .NumberIntVal (12 ),
1190+ cty .NilVal ,
1191+ true ,
1192+ },
1193+ {
1194+ cty .ListValEmpty (cty .Number ),
1195+ cty .NilVal ,
1196+ true ,
1197+ },
1198+ {
1199+ cty .MapVal (map [string ]cty.Value {"hello" : cty .True }),
1200+ cty .NilVal ,
1201+ true ,
1202+ },
1203+ {
1204+ cty .UnknownVal (cty .Number ),
1205+ cty .UnknownVal (cty .Number ),
1206+ false ,
1207+ },
1208+ }
1209+
1210+ for _ , test := range tests {
1211+ t .Run (fmt .Sprintf ("sum(%#v)" , test .List ), func (t * testing.T ) {
1212+ got , err := Sum (test .List )
1213+
1214+ if test .Err {
1215+ if err == nil {
1216+ t .Fatal ("succeeded; want error" )
1217+ }
1218+ return
1219+ } else if err != nil {
1220+ t .Fatalf ("unexpected error: %s" , err )
1221+ }
1222+
1223+ if ! got .RawEquals (test .Want ) {
1224+ t .Errorf ("wrong result\n got: %#v\n want: %#v" , got , test .Want )
1225+ }
1226+ })
1227+ }
1228+ }
1229+
10581230func TestTranspose (t * testing.T ) {
10591231 tests := []struct {
10601232 Values cty.Value
0 commit comments