From 192047914c6539e986a3d9b81598a32ead3d96a5 Mon Sep 17 00:00:00 2001 From: Philip Kirkbride Date: Thu, 17 Aug 2017 15:37:02 -0400 Subject: [PATCH] sumOfNaturalNumbers: Convert to structured answer (#4255) * convert sumOfNaturalNumbers to structured answer * cleaned up syntax --- lib/DDG/Goodie/SumOfNaturalNumbers.pm | 18 ++++++++++---- t/SumOfNaturalNumbers.t | 34 +++++++++++++++++++-------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/lib/DDG/Goodie/SumOfNaturalNumbers.pm b/lib/DDG/Goodie/SumOfNaturalNumbers.pm index 8f0571fc3..b79234402 100644 --- a/lib/DDG/Goodie/SumOfNaturalNumbers.pm +++ b/lib/DDG/Goodie/SumOfNaturalNumbers.pm @@ -27,11 +27,19 @@ handle remainder => sub { # Check if we're getting integers. return unless $_ =~ /^(?:from )?(\d+)\s*(to|-)\s*(\d+)$/i; - if ($1 > $3) { - return; - } else { - my $sum = ((($3 * ($3 + 1)) / 2)-(($1 * ($1 - 1)) / 2)); - return 'Sum of natural numbers from ' . commify($1) . ' to ' . commify($3) . ' is ' . commify($sum) . '.'; + return if ($1 > $3); + + my $sum = ((($3 * ($3 + 1)) / 2)-(($1 * ($1 - 1)) / 2)); + my ($from_number, $to_number, $sum) = map { commify($_) } ($1, $3, $sum); + my $string_answer = 'Sum of natural numbers from ' . $from_number . ' to ' . $to_number; + return $string_answer, structured_answer => { + data => { + title => "$sum", + subtitle => $string_answer + }, + templates => { + group => 'text' + } } }; diff --git a/t/SumOfNaturalNumbers.t b/t/SumOfNaturalNumbers.t index e65c1f48d..ada3d6bf5 100644 --- a/t/SumOfNaturalNumbers.t +++ b/t/SumOfNaturalNumbers.t @@ -1,25 +1,39 @@ -#!/usr/bin/env perl - use strict; use warnings; use Test::More; use Test::Deep; use DDG::Test::Goodie; -zci is_cached => 1; zci answer_type => 'sum'; +zci is_cached => 1; + +sub build_sum_answer { + my($title, $subtitle) = @_; + return $subtitle, + structured_answer => { + data => { + title => "$title", + subtitle => $subtitle + }, + templates => { + group => 'text', + } + }; +} + +sub build_sum_test { test_zci(build_sum_answer(@_)) } ddg_goodie_test( [ 'DDG::Goodie::SumOfNaturalNumbers' ], - 'sum 1 to 10' => test_zci('Sum of natural numbers from 1 to 10 is 55.'), - 'sum 55 to 63' => test_zci('Sum of natural numbers from 55 to 63 is 531.'), - 'add 33 to 100' => test_zci('Sum of natural numbers from 33 to 100 is 4,522.'), - 'sum 1-10' => test_zci('Sum of natural numbers from 1 to 10 is 55.'), - 'sum from 1 to 10' => test_zci('Sum of natural numbers from 1 to 10 is 55.'), - '1-10 sum' => test_zci('Sum of natural numbers from 1 to 10 is 55.'), - 'add from 1 to 100' => test_zci('Sum of natural numbers from 1 to 100 is 5,050.'), + 'sum 1 to 10' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'), + 'sum 55 to 63' => build_sum_test('531', 'Sum of natural numbers from 55 to 63'), + 'add 33 to 100' => build_sum_test('4,522', 'Sum of natural numbers from 33 to 100'), + 'sum 1-10' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'), + 'sum from 1 to 10' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'), + '1-10 sum' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'), + 'add from 1 to 100' => build_sum_test('5,050', 'Sum of natural numbers from 1 to 100'), # Invalid Input 'sum 1 --- 10' => undef,