1+ /**
2+ * Original file
3+ *
14const getOrdinalNumber = require("./get-ordinal-number");
25// In this week's prep, we started implementing getOrdinalNumber.
36
@@ -18,3 +21,107 @@ test("should append 'st' for numbers ending with 1, except those ending with 11"
1821 expect(getOrdinalNumber(21)).toEqual("21st");
1922 expect(getOrdinalNumber(131)).toEqual("131st");
2023});
24+ *
25+ * End of file
26+ */
27+
28+ // Implementation
29+
30+ const getOrdinalNumber = require ( "./get-ordinal-number" ) ;
31+
32+ describe ( "getOrdinalNumber" , ( ) => {
33+ // Case 1: Numbers ending with 1 (but not 11)
34+ test ( "should append 'st' for numbers ending with 1, except those ending with 11" , ( ) => {
35+ expect ( getOrdinalNumber ( 1 ) ) . toEqual ( "1st" ) ;
36+ expect ( getOrdinalNumber ( 21 ) ) . toEqual ( "21st" ) ;
37+ expect ( getOrdinalNumber ( 101 ) ) . toEqual ( "101st" ) ;
38+ expect ( getOrdinalNumber ( 131 ) ) . toEqual ( "131st" ) ;
39+ expect ( getOrdinalNumber ( 1001 ) ) . toEqual ( "1001st" ) ;
40+ } ) ;
41+
42+ // Case 2: Numbers ending with 2 (but not 12)
43+ test ( "should append 'nd' for numbers ending with 2, except those ending with 12" , ( ) => {
44+ expect ( getOrdinalNumber ( 2 ) ) . toEqual ( "2nd" ) ;
45+ expect ( getOrdinalNumber ( 22 ) ) . toEqual ( "22nd" ) ;
46+ expect ( getOrdinalNumber ( 102 ) ) . toEqual ( "102nd" ) ;
47+ expect ( getOrdinalNumber ( 132 ) ) . toEqual ( "132nd" ) ;
48+ expect ( getOrdinalNumber ( 1002 ) ) . toEqual ( "1002nd" ) ;
49+ } ) ;
50+
51+ // Case 3: Numbers ending with 3 (but not 13)
52+ test ( "should append 'rd' for numbers ending with 3, except those ending with 13" , ( ) => {
53+ expect ( getOrdinalNumber ( 3 ) ) . toEqual ( "3rd" ) ;
54+ expect ( getOrdinalNumber ( 23 ) ) . toEqual ( "23rd" ) ;
55+ expect ( getOrdinalNumber ( 103 ) ) . toEqual ( "103rd" ) ;
56+ expect ( getOrdinalNumber ( 133 ) ) . toEqual ( "133rd" ) ;
57+ expect ( getOrdinalNumber ( 1003 ) ) . toEqual ( "1003rd" ) ;
58+ } ) ;
59+
60+ // Case 4: Numbers ending with 11, 12, or 13
61+ test ( "should append 'th' for numbers ending with 11, 12, or 13" , ( ) => {
62+ expect ( getOrdinalNumber ( 11 ) ) . toEqual ( "11th" ) ;
63+ expect ( getOrdinalNumber ( 12 ) ) . toEqual ( "12th" ) ;
64+ expect ( getOrdinalNumber ( 13 ) ) . toEqual ( "13th" ) ;
65+ expect ( getOrdinalNumber ( 111 ) ) . toEqual ( "111th" ) ;
66+ expect ( getOrdinalNumber ( 112 ) ) . toEqual ( "112th" ) ;
67+ expect ( getOrdinalNumber ( 113 ) ) . toEqual ( "113th" ) ;
68+ expect ( getOrdinalNumber ( 1011 ) ) . toEqual ( "1011th" ) ;
69+ expect ( getOrdinalNumber ( 1012 ) ) . toEqual ( "1012th" ) ;
70+ expect ( getOrdinalNumber ( 1013 ) ) . toEqual ( "1013th" ) ;
71+ } ) ;
72+
73+ // Case 5: All other numbers (should get "th")
74+ test ( "should append 'th' for all other numbers" , ( ) => {
75+ // Numbers ending with 0
76+ expect ( getOrdinalNumber ( 0 ) ) . toEqual ( "0th" ) ;
77+ expect ( getOrdinalNumber ( 10 ) ) . toEqual ( "10th" ) ;
78+ expect ( getOrdinalNumber ( 20 ) ) . toEqual ( "20th" ) ;
79+ expect ( getOrdinalNumber ( 100 ) ) . toEqual ( "100th" ) ;
80+
81+ // Numbers ending with 4-9
82+ expect ( getOrdinalNumber ( 4 ) ) . toEqual ( "4th" ) ;
83+ expect ( getOrdinalNumber ( 5 ) ) . toEqual ( "5th" ) ;
84+ expect ( getOrdinalNumber ( 6 ) ) . toEqual ( "6th" ) ;
85+ expect ( getOrdinalNumber ( 7 ) ) . toEqual ( "7th" ) ;
86+ expect ( getOrdinalNumber ( 8 ) ) . toEqual ( "8th" ) ;
87+ expect ( getOrdinalNumber ( 9 ) ) . toEqual ( "9th" ) ;
88+
89+ // Larger numbers ending with 4-9
90+ expect ( getOrdinalNumber ( 24 ) ) . toEqual ( "24th" ) ;
91+ expect ( getOrdinalNumber ( 35 ) ) . toEqual ( "35th" ) ;
92+ expect ( getOrdinalNumber ( 46 ) ) . toEqual ( "46th" ) ;
93+ expect ( getOrdinalNumber ( 57 ) ) . toEqual ( "57th" ) ;
94+ expect ( getOrdinalNumber ( 68 ) ) . toEqual ( "68th" ) ;
95+ expect ( getOrdinalNumber ( 79 ) ) . toEqual ( "79th" ) ;
96+ } ) ;
97+
98+ // Edge cases
99+ describe ( "edge cases" , ( ) => {
100+ test ( "should handle zero" , ( ) => {
101+ expect ( getOrdinalNumber ( 0 ) ) . toEqual ( "0th" ) ;
102+ } ) ;
103+
104+ test ( "should handle large numbers" , ( ) => {
105+ expect ( getOrdinalNumber ( 1000000 ) ) . toEqual ( "1000000th" ) ;
106+ expect ( getOrdinalNumber ( 1000001 ) ) . toEqual ( "1000001st" ) ;
107+ expect ( getOrdinalNumber ( 1000002 ) ) . toEqual ( "1000002nd" ) ;
108+ expect ( getOrdinalNumber ( 1000003 ) ) . toEqual ( "1000003rd" ) ;
109+ expect ( getOrdinalNumber ( 1000011 ) ) . toEqual ( "1000011th" ) ;
110+ } ) ;
111+
112+ test ( "should throw error for negative numbers" , ( ) => {
113+ expect ( ( ) => getOrdinalNumber ( - 1 ) ) . toThrow ( "Input must be a non-negative integer" ) ;
114+ } ) ;
115+
116+ test ( "should throw error for non-integer numbers" , ( ) => {
117+ expect ( ( ) => getOrdinalNumber ( 1.5 ) ) . toThrow ( "Input must be a non-negative integer" ) ;
118+ } ) ;
119+
120+ test ( "should throw error for non-number inputs" , ( ) => {
121+ expect ( ( ) => getOrdinalNumber ( "1" ) ) . toThrow ( "Input must be a non-negative integer" ) ;
122+ expect ( ( ) => getOrdinalNumber ( null ) ) . toThrow ( "Input must be a non-negative integer" ) ;
123+ expect ( ( ) => getOrdinalNumber ( undefined ) ) . toThrow ( "Input must be a non-negative integer" ) ;
124+ } ) ;
125+ } ) ;
126+ } ) ;
127+
0 commit comments