From 87b807912a3c696c8a589efeb6a39c11ac0fe442 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 23 Jun 2015 20:12:44 -0700 Subject: [PATCH] FREQUENCIES: Reimplement FORMAT=LIMIT feature. When the FREQUENCIES input parser was rewritten, this feature was mistakenly omitted. This commit fixes the problem. Reported by Douglas Ferguson. --- src/language/stats/frequencies.c | 16 ++++++++++++++-- tests/language/stats/frequencies.at | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/language/stats/frequencies.c b/src/language/stats/frequencies.c index cd131f514b..8fb96b0d57 100644 --- a/src/language/stats/frequencies.c +++ b/src/language/stats/frequencies.c @@ -214,7 +214,7 @@ struct frq_proc int n_percentiles, n_show_percentiles; /* Frequency table display. */ - int max_categories; /* Maximum categories to show. */ + long int max_categories; /* Maximum categories to show. */ int sort; /* FRQ_AVALUE or FRQ_DVALUE or FRQ_AFREQ or FRQ_DFREQ. */ @@ -614,7 +614,7 @@ cmd_frequencies (struct lexer *lexer, struct dataset *ds) frq.n_stats = 4; - frq.max_categories = INT_MAX; + frq.max_categories = LONG_MAX; frq.percentiles = NULL; frq.n_percentiles = 0; @@ -803,6 +803,18 @@ cmd_frequencies (struct lexer *lexer, struct dataset *ds) { frq.max_categories = 0; } + else if (lex_match_id (lexer, "LIMIT")) + { + if (!lex_force_match (lexer, T_LPAREN) + || !lex_force_int (lexer)) + goto error; + + frq.max_categories = lex_integer (lexer); + lex_get (lexer); + + if (!lex_force_match (lexer, T_RPAREN)) + goto error; + } else if (lex_match_id (lexer, "AVALUE")) { frq.sort = FRQ_AVALUE; diff --git a/tests/language/stats/frequencies.at b/tests/language/stats/frequencies.at index ff54e8e9cf..0d6433c5b9 100644 --- a/tests/language/stats/frequencies.at +++ b/tests/language/stats/frequencies.at @@ -81,6 +81,29 @@ Total,,4,100.0,100.0, ]) AT_CLEANUP +# Test that the LIMIT specification works. +AT_SETUP([FREQUENCIES with LIMIT]) +AT_DATA([frequencies.sps], + [data list free /v1 v2. +begin data. +0 1 +2 5 +4 3 +3 5 +end data. + +frequencies v1 v2/statistics=none/FORMAT=LIMIT(3). +]) +AT_CHECK([pspp -O format=csv frequencies.sps], [0], [dnl +Table: v2 +Value Label,Value,Frequency,Percent,Valid Percent,Cum Percent +,1.00,1,25.00,25.00,25.00 +,3.00,1,25.00,25.00,50.00 +,5.00,2,50.00,50.00,100.00 +Total,,4,100.0,100.0, +]) +AT_CLEANUP + # Tests for a bug where PSPP would crash when a FREQUENCIES command # was used with the HTML output driver. AT_SETUP([FREQUENCIES HTML output crash]) -- 2.30.2